Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример программы с применением текстурирования

Читайте также:
  1. CALL — Вызов подпрограммы
  2. CИТУАЦИОННЫЕ ЗАДАЧИ С ПРИМЕРАМИ РЕШЕНИЯ
  3. CИТУАЦИОННЫЕ ЗАДАЧИ С ПРИМЕРАМИ РЕШЕНИЯ
  4. CИТУАЦИОННЫЕ ЗАДАЧИ С ПРИМЕРАМИ РЕШЕНИЯ
  5. CИТУАЦИОННЫЕ ЗАДАЧИ С ПРИМЕРАМИ РЕШЕНИЯ
  6. I. ФИЛОСОФСКО-ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ПРОГРАММЫ
  7. III. Примеры физиологического строения животных

Для того чтобы проиллюстрировать вызов средств текстурирования, предлагаемых OpenGL, приведено приложение, которое отображает вращающийся тетраэдр. На рис. 11.10 показан один кадр анимации, создаваемой этой программой. Код данного приложения приведен далее в листинге 11.1.

Листинг 11.1. Приложение, осуществляющее вращение текстурированного тетраэдра:

#include <gl\glut.h>

#include <gl\glaux.h>

#pragma comment(lib, "glaux.lib")

GLfloat ratio = 4.0/3.0;

GLfloat angle = 0.0;

void init()

{ glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(60.0, ratio, 0.01f, 110.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

AUX_RGBImageRec *image = auxDIBImageLoad("image.bmp");

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->sizeX, image->sizeY, 0, 3, GL_UNSIGNED_BYTE, image->data);

glEnable(GL_TEXTURE_2D);

glEnable(GL_DEPTH_TEST);

}

void reshape(int width, int height)

{ if (ratio > width/height) glViewport(0, 0, width, width/ratio);

else glViewport(0, 0, height*ratio, height);

}

void display()

{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();

glRotatef(angle, 0.0, 1.0, 0.0);

glBegin(GL_TRIANGLES);

// грань 0

glTexCoord2f(0, 0); glVertex3f(1, 0, 0);

glTexCoord2f(0, 1); glVertex3f(0, 1, 0);

glTexCoord2f(1, 0); glVertex3f(0, 0, 1);

// грань 1

glTexCoord2f(0, 0); glVertex3f(0, 0, 0);

glTexCoord2f(0, 1); glVertex3f(0, 1, 0);

glTexCoord2f(1, 0); glVertex3f(1, 0, 0);

// грань 2

glTexCoord2f(0, 0); glVertex3f(0, 0, 0);

glTexCoord2f(1, 0); glVertex3f(0, 0, 1);

glTexCoord2f(0, 1); glVertex3f(0, 1, 0);

// грань 3

glTexCoord2f(0, 0); glVertex3f(1, 0, 0);

glTexCoord2f(0, 1); glVertex3f(0, 0, 1);

glTexCoord2f(1, 0); glVertex3f(0, 0, 0);

glEnd();

glPopMatrix();

glFlush();

glutSwapBuffers();

}

void idle()

{ angle += 0.5f;

if (angle > 360.0) angle = 0.0;

glutPostRedisplay();

}

int main(int argc, char* argv[])

{ glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

glutInitWindowPosition(0, 0);

glutInitWindowSize(640, 480);

glutCreateWindow("Пример текстурирования");

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutIdleFunc(idle);

init();

glutMainLoop();

return 0;

}

 

В данном примере для загрузки в оперативную память изображения “image.bmp” используется функция библиотеки GLAux (OpenGL Auxiliary Library), прототип которой:

AUX_RGBImageRec * APIENTRY auxRGBImageLoad(LPCTSTR).

Функция возвращает указатель на структуру AUX_RGBImageRec, где sizeX – ширина и sizeY – высота изображения, а data – указатель на загруженные в память данные изображения.

GLUT автоматически подключает библиотеки OpenGL32.lib, GLUT32.lib и другие, при подключении

#include <gl\glut.h>.

В отличие от библиотеки GLUT библиотеке GLAux, кроме подключения #include <gl\glaux.h>, необходимо также подключение библиотеки GLAux.lib, что можно сделать следующим образом:

#pragma comment(lib, "glaux.lib").


Дата добавления: 2015-07-10; просмотров: 104 | Нарушение авторских прав


Читайте в этой же книге: Наложение текстуры на грань | Пример. | Визуализация текстуры | Взаимодействие текстуры с объектом | Генерация текстурных координат | Функции OpenGL для задания текстурного изображения |
<== предыдущая страница | следующая страница ==>
Функции OpenGL для установки параметров текстуры| Истечение жидкости через малое круглое отверстие

mybiblioteka.su - 2015-2024 год. (0.006 сек.)