Листинг 5.8. Рисование сцены, прочитанной из SDL-файла
#include "SDL.h"
iimimmmmmmmm globals iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiin
Scene SCn;
// construct the scene object // создаем объект scene
//«««««««««««< displaySDL »»»»»»»»»»»»» void displaySDL(void)
{
glMatrixMode(GL_PROJECTIDN): // set the camera // устанавливаем камеру
glLoadldentityO:
double winHt - 1.0: // half-height of the window // половина высоты окна
gl0rtho(-winHt*64/48.0. winHt*64/48.0. -winHt. winHt. 0.1. 100.0):
glMatrixMode(GL_MODELVIEW):
glLoadldentityO:
gluLookAt(2.3. 1.3. 2. 0. 0.25. 0. 0.0.1.0.0.0):
glClear(gl_COLDR_BUFFER_bit | GL_DEPTH_BUFFER_BIT); // clear screen // очищаем экран
sen.drawSceneOpenGLC):
}
// end of display // конец отображения
5.6. Рисование трехмерных сцен с применением OpenGL
//««««««««««« main »»»»»»»»»»»»»>»»
void maindnt argc. char **argv)
{
g1utlnit(&argc. argv):
glutInitDisp1ayMode(GLUT_RGB | GLUT_DEPTH):
glutInitWindowSize(640. 480):
glutlnitwindowPositiondOO. 100):
glutCreatewindowCread and draw an SDL scene"): // «читаем и рисуем SDL-сцену»
http://doork-shop.ru dorma - автоматические двери.
glutDisplayFunc(displaySDL):
glShadeMode1(GL_SM00TH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE):
glViewportCO. 0. 640. 480):
sen.read("myScenel.dat"); // read the SDL file and build the objects // читаем SDL-файл и создаем объекты
glEnable(GL_LIGHTING):
scn.makeLightsOpenGLO: // scan the light list and make OpenGL lights // просматриваем список источников света // и создаем источники света OpenGL
glutMainLoopO:
}
В листинге 5.8 приведена программа, которая читает SDL-файл и рисует сцену. Программа эта очень короткая (но кроме нее, разумеется, должен быть загружен код для классов Scene, Shape и т. д.). Эта программа читает специальный SDL-файл myScenel.dat, который вновь рисует ту же сцену, что изображена на рис. 5.56. Отметим, что путем простой замены читаемого SDL-файла данная программа способна нарисовать любую сцену, описанную на языке SDL, без каких-либо изменений в ее коде.