내 OpenGL 코드에 이상한 동작이 있습니다. 나는 바닥에 카펫을 그려 넣고 싶다.동일한 평면에있는 다른 다각형 안에있는 다각형
아래 코드에서 GROUND_SIZE가 2071보다 크고 CARPET_HEIGHT가 0.0003보다 작은 경우 작은 폴리곤이 그려지지 않습니다. 그리기 순서는 결과 이미지를 변경하지 않습니다.
#include <GL/glut.h>
const int GROUND_SIZE = 3000;
const bool GROUND_FIRST = true;
const float CARPET_HEIGHT = 0.0003;
void carpet(){
glColor3f(1.0,0.0,0.0);
glBegin(GL_QUADS);
glNormal3f(0,1,0);
glVertex3f(-1.0, -1.0, CARPET_HEIGHT);
glVertex3f(1.0, -1.0, CARPET_HEIGHT);
glVertex3f(1.0, 1.0, CARPET_HEIGHT);
glVertex3f(-1.0, 1.0, CARPET_HEIGHT);
glEnd();
}
void ground(){
glColor3f(0.0,0.7,0.0);
glBegin(GL_QUADS);
glNormal3f(0,1,0);
glVertex3f(-GROUND_SIZE, -GROUND_SIZE, 0);
glVertex3f(GROUND_SIZE, -GROUND_SIZE, 0);
glVertex3f(GROUND_SIZE, GROUND_SIZE, 0);
glVertex3f(-GROUND_SIZE, GROUND_SIZE, 0);
glEnd();
}
void draw(){
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
if (GROUND_FIRST) {
ground();
carpet();
}
else {
carpet();
ground();
}
glutSwapBuffers();
}
int main(){
int argc = 1; char* argv[] = { (char*)"" };
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowPosition(100, 50);
glutInitWindowSize(640, 640);
glutCreateWindow("Window");
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_DEPTH_TEST);
glClearColor(0.0f, 1.0f, 1.0f, 1.0f);
glutDisplayFunc(draw);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, 0.1, 1000.0);
gluLookAt(0.0, -5.0, 1.0, 0.0f, 0.0f, 1.0f, 0,0,1);
glutMainLoop();
return 0;
}
OpenGL이 동일한 비행기의 다른 다각형 안에있는 다각형을 그리는 지 여부를 결정하는 규칙을 이해하고 싶습니다.
감사합니다.
내가 보통을 설정하는 것이 좋습니다를 모든 행렬 연산 이전에 적절한 행렬 모드로 바뀌는 것입니다. – datenwolf