Здравствуйте, форумчане!
Почему-то не проверяется глубина (z) в OpenGL!
Делал по открывку кода в книге «OpenGL. Суперкнига, 3-е издание».
Вот основной файл.
#include <GL/glut.h>
#include <math.h>
#include <games_engine.h>
shapes shape;
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1, 0, 1);
shape.circle(0, 75, 0, 50, 75, 32);
glColor3f(0, 1, 1);
shape.circle(0, 0, 0, 50, 0, 32);
glRotatef(1, 1, 0, 0);
glutSwapBuffers();
}
void timerFunc(int = 0) {
display();
glutTimerFunc(33, timerFunc, 0);
}
void changeSizeC(GLint w, GLint h) {
if(h == 0)
h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
GLfloat aspectRatio = (GLfloat)w / (GLfloat)h;
if(w <= h)
glOrtho(-100, 100, -100 / aspectRatio, 100 / aspectRatio, -100, 100);
else
glOrtho(-100 * aspectRatio, 100 * aspectRatio, -100, 100, -100, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void firstSetupOGL() {
glClearColor(0, 0, 0, 1);
glColor3f(1, 1, 1);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(400, 400);
glutInitWindowPosition(400, 200);
glutCreateWindow("Test");
firstSetupOGL();
glutReshapeFunc(changeSizeC);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
timerFunc();
glutMainLoop();
return 0;
}
ChangeSizeC подстраивает изображение под размеры окна, была ещё ChangeSizeS, я её вырезал, так как она, в данном коде, не используется. Там только glOrtho от 0 до 100 было, а не от -100 до 100.
class shapes {
public:
void circle(GLint xCenter, GLint yCenter, GLint zCenter, GLfloat widthCircle, GLfloat heightCircle, GLshort vertexs) {
glBegin(GL_TRIANGLE_FAN);
glVertex3f(xCenter, yCenter, zCenter);
for(angle = 0; angle < (2 * GL_PI); angle += (GL_PI / vertexs)) {
x = widthCircle * sin(angle);
z = widthCircle * cos(angle);
glVertex3f(x, yCenter - heightCircle, z);
}
glEnd();
}
};