[英]OpenGL color depth buffer
我有一个简单的研究项目,代表了一些太空星的系统。 我有一颗恒星和几颗行星,月亮绕着恒星旋转。 我正在使用深度缓冲,但是即使行星应该被恒星遮挡,行星也始终位于恒星的前面。 问题可能是什么原因?
void drawPlanet(float orbitRadius, float planetRadius, float daysInYear, float hoursInDay){
static float year = 0;
static float days = 0;
static float hours = 0;
glPushMatrix();
glRotatef(year, 0, 1, 0);
glTranslatef(orbitRadius, 0 ,0);
glRotatef(days, 1, 2, 0);
glutWireSphere(planetRadius, 20, 16);
drawLuna(0.3, 0.1, 30, 15);
glPopMatrix();
hours++;
days = hours/hoursInDay;
year=days/daysInYear;
}
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0,0,5, 0, 0, 0, 0 ,1, 0);
glColor3f(1.0, 0.647059, 0.00);
glutSolidSphere(0.5, 20, 16);
glColor3b(197, 96, 63);
drawPlanet(2, 0.2, 50, 12);
drawPlanet(1, 0.15, 30, 15);
glFlush();
}
int main(int argc, char** argv)
{
....
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glEnable(GL_DEPTH_TEST);
....
}
如果没有OpenGL上下文,则对glEnable(GL_DEPTH_TEST)
调用无效。 只有在glutCreateWindow
之后,GLUT才会创建OpenGL上下文。
通常,您不应在显示功能之外调用glEnable
。 您还必须清除深度缓冲区,因此
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.