ПРОГРАММИРОВАНИЕ И ДИЗАЙН
Выпуск #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)
OpenGL/DirectX для начинающих

Все мы играем, или играли в игры. Некоторые игры нам нравятся, в некоторых чего-то нам не хватает. Мы часто говорим: <Если б эту игру делал я, то я бы добавил\изменил :> и т.д. А вам никогда не приходило в голову написать свою собственную игру? Вот этим мы как раз и займемся. Мы, конечно же не напишем с вами продолжение 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), и посмотрите, что у нас получилось! А получилось у нас - "прозрачное" некрасивое окошко (вы наверное хотели увидеть уже игру, но: не все сразу).

Автор: Алексей (aka Virus) Сало
Сайт: OpenGL/DirectX для начинающих
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
be number one
Hosted by uCoz