Народный учебник по OpenGL


Урок 22. Наложение микрорельефа - часть 4


 

Пропущенные строки относятся к указателям на контекст GDI и прочему.

 

PFNGLMULTITEXCOORD1FARBPROC  glMultiTexCoord1fARB  = NULL;

PFNGLMULTITEXCOORD2FARBPROC  glMultiTexCoord2fARB  = NULL;

PFNGLMULTITEXCOORD3FARBPROC  glMultiTexCoord3fARB  = NULL;

PFNGLMULTITEXCOORD4FARBPROC  glMultiTexCoord4fARB  = NULL;

PFNGLACTIVETEXTUREARBPROC  glActiveTextureARB  = NULL;

PFNGLCLIENTACTIVETEXTUREARBPROC  glClientActiveTextureARB= NULL;

 

Создаем глобальные переменные:

  • filter задает используемый фильтр (см. Урок 06). Обычно берем GL_LINEAR, поэтому инициализируем переменную единичкой.
  • texture хранит текстуру, три копии, по одной на фильтр.
  • bump хранит карты микрорельефа.
  • invbump хранит инвертированную карту микрорельефа. Причина объясняется позже, в теоретическом разделе.
  • Переменные, относящиеся к логотипам, в имени которых есть слово "Logo" - хранят текстуры, добавляемые к сцене на последнем проходе.
  • Переменные, относящиеся к свету, в имени которых есть слово “Light” - хранят параметры источника света.

GLuint  filter=1;           // Какой фильтр использовать

GLuint  texture[3];         // Хранит 3 текстуры

GLuint  bump[3];            // Рельефы

GLuint  invbump[3];         // Инвертированные рельефы

GLuint  glLogo;             // Указатель на OpenGL-логотип

GLuint  multiLogo;          // Указатель на мультитекстурированный логотип

GLfloat LightAmbient[]  = { 0.2f, 0.2f, 0.2f};  // Фоновое освещение — 20% белого

GLfloat LightDiffuse[]  = { 1.0f, 1.0f, 1.0f};  // Рассеянный свет —  чисто белый

GLfloat LightPosition[]  = { 0.0f, 0.0f, 2.0f}; // Положение источника — перед экраном

GLfloat Gray[]    = { 0.5f, 0.5f, 0.5f, 1.0f};

 

Очередной фрагмент кода содержит числовое описание текстурированного куба, сделанного из GL_QUADS-ов. Каждые пять чисел представляют собой пару из двумерных текстурных и трехмерных вершинных координат. Это удобно для построения куба в цикле for…, учитывая, что нам потребуется сделать это несколько раз. Блок данных заканчивается прототипом функции WndProc(), хорошо известной из предыдущих уроков.




- Начало -  - Назад -  - Вперед -