// ??? работает некорректно ???
//glClearDepth(1.0f); // установка буфера глубины
//glEnable(GL_DEPTH_TEST); // разрешить тест глубины
//glDepthFunc(GL_LEQUAL); // тип теста глубины
#include<gl\glut.h>
#include<iostream>
#include<Windows.h>
using namespace std;
int const KEY_ESCAPE = 27;
void initGL();
void render();
void keyboard(unsigned char key, int x, int y);
void timer(int);
void box(double x, double y, double z, int length, float r, float g, float b);
void axis();
GLfloat LightAmbient[] = {.5, .5, .5, 1};
GLfloat LightDiffuse[] = {.5, .5, .5, 1};
GLfloat LightPosition[] = {-67, 32, -43, 1};
GLfloat LightDirection[] = {0, 0, 0};
float xrot, yrot;
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("3Dexample");
initGL();
glutDisplayFunc(render);
glutKeyboardFunc(keyboard);
glutTimerFunc(1,timer,0);
glutMainLoop();
return 0;
}
void initGL()
{
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,1.46, 1, 500);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// ??? работает некорректно ???
//glClearDepth(1.0f); // установка буффера глубины
//glEnable(GL_DEPTH_TEST); // разрешить тест глубины
//glDepthFunc(GL_LEQUAL); // тип теста глубины
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // улучшеные вычисления перспективы
glEnable(GL_LIGHTING); // разрешаем освещение
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);
glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);
glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,LightDirection);
glEnable(GL_LIGHT1);
glTranslatef(0, 0, -120);
glutFullScreen();
ShowCursor(false);
}
void render()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(xrot, 1, 0, 0);
glRotatef(yrot, 0, 1, 0);
//axis();
box(0, 0, 0, 20, .56, .84, .69); // длина стороны 20 единиц
glPopMatrix();
xrot+=.5;
yrot+=.5;
glutSwapBuffers();
}
void timer(int)
{
render();
glutTimerFunc(1,timer,0);
}
void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case KEY_ESCAPE: exit(0);break;
}
}
void box(double x, double y, double z, int length, float r, float g, float b)
{
float l;
l = length / 2;
glBegin(GL_QUADS);
glColor3f(r, g, b);
glVertex3f(x + -l, y + l, z + l);
glVertex3f(x + l, y + l, z + l);
glVertex3f(x + l, y + -l, z + l);
glVertex3f(x + -l, y + -l, z + l);
glEnd();
glBegin(GL_QUADS);
glColor3f(r, g, b);
glVertex3f(x + -l, y + l, z + -l);
glVertex3f(x + l, y + l, z + -l);
glVertex3f(x + l, y + -l, z + -l);
glVertex3f(x + -l, y + -l, z + -l);
glEnd();
glBegin(GL_QUADS);
glColor3f(r, g, b);
glVertex3f(x + -l, y + l, z + -l);
glVertex3f(x + -l, y + l, z + +l);
glVertex3f(x + -l, y + -l, z + +l);
glVertex3f(x + -l, y + -l, z + -l);
glEnd();
glBegin(GL_QUADS);
glColor3f(r, g, b);
glVertex3f(x + l, y + l, z + -l);
glVertex3f(x + l, y + l, z + +l);
glVertex3f(x + l, y + -l, z + +l);
glVertex3f(x + l, y + -l, z + -l);
glEnd();
glBegin(GL_QUADS);
glColor3f(r, g, b);
glVertex3f(x + -l, y + l, z + -l);
glVertex3f(x + l, y + l, z + -l);
glVertex3f(x + l, y + l, z + l);
glVertex3f(x + -l, y + l, z + l);
glEnd();
glBegin(GL_QUADS);
glColor3f(r, g, b);
glVertex3f(x + -l, y + -l, z + -l);
glVertex3f(x + l, y + -l, z + -l);
glVertex3f(x + l, y + -l, z + l);
glVertex3f(x + -l, y + -l, z + l);
glEnd();
}
void axis()
{
glBegin(GL_LINES);
glColor3f(1, 0, 0);
glVertex3f(0, 0, 0 );
glVertex3f(20, 0, 0);
glColor3f(0, 1, 0);
glVertex3f(0, 20, 0);
glVertex3f(0, 0, 0);
glColor3f(0, 0, 1);
glVertex3f(0, 0, 0 );
glVertex3f(0, 0, 20);
glEnd();
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.