相同平面中另一个多边形内的多边形
|
我的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用于确定是否会绘制同一平面中另一个多边形内部的多边形的规则。
谢谢
没有找到相关结果
已邀请:
1 个回复
搜洼挂时
函数应如下所示: