| ПРОГРАММИРОВАНИЕ И ДИЗАЙН |
Выпуск #20 - 3 июля 2002 года (архив рассылки)
Всего подписчиков: 5925
|
В этом выпуске:
> Новости сайта
> Вопросы читателей (6)
> Пишем свою собственную 3D игру (часть 1)
> API функции
> Ссылки
> Авторам
|
Новости сайта
3 июля 2002
> Вышел 20й выпуск рассылки.
http://prs.narod.ru - всё для программиста и WEB мастера.
|
Вопросы читателей
Уважаемые читатели!
Мне стали часто приходить письма следующего содержания:
--------------------------------------------------
Question=
--------------------------------------------------
Всё дело в том, что когда Вы отправляете вопрос через ту форму, которая расположена
в этой рассылке, отправка осуществляется Вашим почтовым клиентом. При этом письмо
формируется следующим образом: Вы вводите в поле для вопроса текст, нажимаете "Отправить".
Далее загружается установленный в Вашей системе почтовый клиент и отправляет письмо с темой
"Vopros" на prs@narod.ru. Текст письма определяется как "Question=" плюс тот текст, который
Вы ввели в текстовое поле. Например мне может прийти такое письмо:
--------------------------------------------------
Question=Не умею программировать, но хочу научиться!!!
Помогите!!!
Заранее благодарен.
--------------------------------------------------
Т.е. после знака "=" идёт то, что Вы пишите в текстовом поле. Но, видимо, некоторые
почтовые клиенты (или из-за "глюков") не добавляют текст, поэтому мне приходят
такие "пустые" письма. Будьте внимательнее.
Вопрос 45
Здравствуйте!
Подскажите, как перехватить нажатие клавиши НАЗАД (Back) на любом броузере?
Я не хочу, что бы броузер выполнял команду "history.go(-1)", так как
страничка полностью генерируется ***.asp-файлом за несколько шагов и поэтому
операция "history.go(-1)" не приводит к ожидаемому результату. Отмена
кэширования не помогает.
Надо выполнить несколько иные действия вместо возврата назад, например,
"history.go(-4); refresh(); имитация нажатия клавиши "Повторить";... "
Если возможно, то ответ в кодах VBScript.
Ответить
|
|
Вопрос 46
Доброе время суток ВАМ.
Мне необходим компонент для создания отчетов в VB6, данные на основе ADODB.Recordset.
Стандартный VBшный и CrystalReports Seagate не подходят, первый недостаточно функциональный,
второй излишне наворочен. Интересен компонент с возможностью подотчетов и таблиц.
Смотрел DataDinamic ActivReports (версия 1.??), вроде
неплох но нет ломалки (регистратора), а платить возможности пока нет.
Бевз Андрей
Ответить
|
|
Вопрос 47
У меня такая проблема: когда модем принимает звонок, он берет трубку, но
ничегог не делает. В итоге ни callback не работает, ни dial-in server.
Help me. Спасибо.
Ответить
|
|
Вопрос 48
Пожалуйста подскажите что делать.
Когда соединяюсь с провайдером по dial-up, связь рвется через одну-две минуты, а иногда и раньше.
Уже замучился.
Виновата ли в этом только телефонная линия?
Уже перепробовал три разных номера.
Или причина может быть другой?
Спасибо,
Марат
Ответить
|
|
Вопрос 49
Как на http://yandex.narod.ru разместить свой сайт. Он у меня уже готовый на жёском диске и мне хотелось бы
разместить его там, но там выскакивают какие то помощники... И вообще как проходит эта процедура. В общем я не
понял. Объясните, пожалуйста. Заранее благодарен.
Ответить
|
|
Вопрос 50
Задача: взять изображение со сканера, преобразовать в опред. размеры (пиксел х пиксел),
сохранить на диск в формате JPEG.
Сергей. sima@ellink.ru
Ответить
|
|
Вопросы задавайте на этой странице,
на e-mail: prs@narod.ru, или заполнив эту форму (отправляется через почтовый клиент):
|
Пишем свою собственную 3D игру (часть 1)
Все мы играем, или играли в игры. Некоторые игры нам нравятся, в некоторых
чего-то нам не хватает. Мы часто говорим: <Если б эту игру делал я, то я бы
добавил\изменил :> и т.д. А вам никогда не приходило в голову написать свою
собственную игру? Вот этим мы как раз и займемся.
Мы, конечно же не напишем с вами продолжение Quake, или чего ни будь в этом
роде. Данная статья послужит для того, что бы иметь представление о том, как
вообще пишутся игры. Писать мы с вами будем что то, типа тенниса для двоих
игроков.
Итак, что нам нужно для написания игры? Кроме мозгов, нам еще пригодится
знание какого ни будь языка программирования, и библиотека OpenGL. К стати,
прочитать о том, что вообще такое OpenGL, откуда эта графическая библиотека
берет свое начало (а также увидеть пример работы) вы сможете в статье
Руслана Ризванова "OpenGL и Delphi" (МК ?19). Но, в этой статье мы не будем
изучать OpenGL, так как наша главная цель- научиться писать игры.
Мы будем пользоваться языком С++, и компилятором - Microsoft Visual C++ 6.0.
Почему именно этим языком? Я думаю, что это отдельный разговор (отдельная
статья).
Что ж, пора приступать! Давайте настроим наш компилятор. Но, вначале нам
придется скачать один файл (библиотеку GLUT), он небольшой (всего 93кб):
www.opengl.fud.ru/glut.zip
Теперь разархивируйте файлы (из только что скачанного вами архива glut.zip)
mui32.lib и glut32.lib в папку Lib, где у вас установлен Visual C++ (скорее
всего это: C:\Program Files\Microsoft Visual Studio\VC98\Lib). Файл glut.h
поместите в папку Include\GL (C:\Program Files\Microsoft Visual
Studio\VC98\Include\GL\), a glut32.dll в папку C:\Windows\System. На этом с
установкой библиотеки закончили.
Откройте Visual C++ и создайте приложение Win32 Console Application.
Теперь нажмите Build\Set Active Configuration, и выберите Win32 Release.
Затем, нажмите Project\Setting и перейдите на вкладку Link. В строке
Object\library modules: допишите следующие библиотеки: opengl32.lib
glu32.lib glaux.lib glut32.lib.
Перед тем, как начать писать свою игру, давайте немного определимся с
терминологией, используемой в программировании 3D графике.
|
|
Рендеринг - это процесс подготовки, выдачи (прорисовки) изображения на экран.
В общем, это все действия, которые связаны с выдачей картинки на экран.
Буфер - это область для временного хранения данных.
Двойная буферизация - это один из способов рендеринга, при котором существует
два буфера. Содержимое первого (переднего) буфера (front buffer)
показывается на экран и вы видите какое то изображение. В это время на
заднем буфере (back buffer) подготавливается следующий кадр (рисуется).
Когда кадр на заднем буфере готов, тогда передний и задний буфер меняются
местами. И затем все это повторяется. С помощью такой технологии избегается
мерцание экрана.
Z-buffer - также часто вместо этого слова употребляется слово Буфер Глубины
(Depth Buffer). Это буфер величиной с экран, в котором хранятся Z координаты
пикселей. Z-ось добавляет третью величину - глубину.
|
Пока что нам этого для начала хватит. И теперь переходим к написанию кода.
Давайте сейчас рассмотрим из чего состоит приложение, написанное на OpenGL
(это графическая библиотека, которую мы будем использовать при
программировании игр, и 3D графики, есть конечно и альтернатива - DirectX,
которую мы трогать не будем :). Для работы с окнами мы будем использовать в
наших приложениях, как я уже говорил, библиотеку GLUT.
Первым делом нам нужно инициализировать (подготовить для работы) библиотеку
OpenGL. Функция main() (которая всегда присутствует в приложениях, написаных
на C++) будет включать вызовы функций GLUT, с помощью которых мы можем
устанавливать параметры окна. Также в функцию main() мы должны включить
функцию Display, с помощью который мы и будем рисовать. Вот пример функции
main():
void main(int argc, char** argv)
{
//инициализация
glutInit(&argc,argv);
//установка режима отображения
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
//размер окна
glutInitWindowSize(400,500);
//позиция окна
glutInitWindowPosition(0,0);
//заглавие нашего окошка
glutCreateWindow("OpenGL first");
//функция для рисования
glutDisplayFunc(Display);
//цикл
glutMainLoop();
}
Теперь разберем каждую строчку нашего кода. Начнем с первой:
glutInit(&argc,argv) Это функция-инициализация. Эта функция проводит необходимые
начальные действия по созданию окна.
glutInitDisplayMode(int Mode) С помощью этой функции устанавливаются необходимые режимы
отображения информации, которые можно использовать совместно с помощью операции побитового
ИЛИ, в языке С++ это значок ' | '.
Для начала рассмотрим самые необходимые нам пока что режимы:
|
|
GLUT_RGB Режим RGB (отображение цвета с помощью трех основных цветов - красного, зеленого
и синего). Используется по умолчанию.
GLUT_SINGLE Окно с одиночным буфером. Этот режим используется также по умолчанию.
GLUT_DOUBLE Окно с двойным буфером (о том, что это такое, написано выше).
GLUT_DEPTH Окно с буфером глубины (или Z-buffer'ом, о котором также написано выше).
|
Следующая функция у нас идет:
glutWindowSize(400,500). С ее помощью мы определяем размер нашего окна (в данном случае
400 - ширина, 500 - высота). Размер задается в пикселях.
Место, где будет расположено окно (левый верхний угол окна) мы задаем функцией
glutWindowPosition(int x, int y).
А теперь мы должны создать само окно. Это делается с помощью glutCreateWindow(string),
где в скобках мы пишем заголовок окна.
Функция glutDisplayFunc (имя функции) определяет функцию, в которой мы будем
рисовать, и делать различные вычисления (хотя, последнее - это необязательно
делать в этой ф-и). В качестве параметра вы должны указать имя вашей
функции. Например, вы написали функцию:
void MyDisplay(void)
{
\\что-то, например, рисуем кружок
}
Тогда наша функция будет иметь вид:
glutDisplayFunc(MyDisplay)
То есть мы указали, что функция, которая ответственная за рисование всех объектов (в
нашем примере, кружка), будет MyDisplay.
Контроль всех событий происходит внутри бесконечного цикла glutMainLoop(void).
Вот собственно и все! Теперь давайте посмотрим полный листинг нашей программы:
//Подключаем нужные библиотеки для работы с OpenGL
#include <GL/gl.h>
//Библиотека GLUT
#include <GL/glut.h>
//Библиотека GLU, которую мы будем использовать позже.
#include <GL/glu.h>
void Display(void)
{
//тут рисуем что угодно
}
void main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(400,500);
glutInitWindowPosition(0,0);
glutCreateWindow("OpenGL super game");
glutDisplayFunc(Display);
glutMainLoop();
}
Теперь, скомпилируйте весь этот код (для этого в Microsoft Visual C++ нажмите клавишу
F7), и посмотрите, что у нас получилось! А получилось у нас - "прозрачное" некрасивое
окошко (вы наверное хотели увидеть уже игру, но: не все сразу).
|
API функции
Функция GetThreadPriority
| Описание: |
Определяет приоритет потока. |
| Объявление: |
Для Visual Basic:
Declare Function GetThreadPriority Lib "kernel32" Alias "GetThreadPriority" (ByVal hThread As Long) As Long |
| Параметры: |
hThread
Указатель на поток.
Windows NT: указатель должен иметь право доступа THREAD_QUERY_INFORMATION
|
| Возвращаемое значение: |
Функция возвращает значение приоритета потока. |
Функция SetThreadPriority
| Описание: |
Устанавливает приоритет потока. |
| Объявление: |
Для Visual Basic:
Declare Function SetThreadPriority Lib "kernel32" Alias "SetThreadPriority" (ByVal hThread As Long, ByVal nPriority As Long) As Long |
| Параметры: |
hThread
Указатель на поток.
Windows NT: указатель должен иметь право доступа THREAD_SET_INFORMATION
nPriority
Значение приоритета. Принимает одно из следующих значений:
THREAD_PRIORITY_ABOVE_NORMAL = 1
Приоритет выше на 1 пункт от нормального.
TTHREAD_PRIORITY_BELOW_NORMAL = -1
Приоритет ниже на 1 пункт от нормального
THREAD_PRIORITY_HIGHEST = 2
Приоритет выше на 2 пункта от нормального
THREAD_PRIORITY_IDLE = -15
Самый низкий приоритет.
THREAD_PRIORITY_LOWEST = -2
Приоритет ниже на 2 пункта от нормального.
THREAD_PRIORITY_NORMAL = 0
Нормальный (средний) приоритет.
THREAD_PRIORITY_TIME_CRITICAL = 15
Самый высокий приоритет.
|
| Возвращаемое значение: |
Функция возвращает значение, отличное от нуля в успешном случае, или 0, если произошла ошибка. |
|
Ссылки
OpenGL/DirectX для начинающих
Сайт для тех, кто хочет научиться писать игры с использованием
OpenGL и DirectX. Здесь вы сможете с нуля освоить 3D графику, и
программирование с помощью OpenGL/DirectX на C++. На этом сайте вы найдете
уроки, статьи, и многое другое...
Хотите увидеть здесь Вашу ссылку? Тогда пишите на prs@narod.ru!
|
Авторам
Вы хотите, чтобы Ваши материалы были опубликованы в этой рассылке? Тогда пишите -
prs@narod.ru. В качестве гонорара Вы получите
от 100 до 10000 баннерных показов сети RLE (Gold), а также посетителей, которые зайдут к
Вам на сайт со ссылок после статьи и в разделе "Ссылки". Давайте делать рассылку вместе!
|
Все выпуски рассылки, начиная с первого, Вы можете прочитать в архиве рассылки.
Сайт рассылки: Program Studio - всё для программиста и WEB мастера
Автор рассылки: Павел Николаевич
Ваши предложения, жалобы и рекомендации можете присылать на
prs@narod.ru
|
|