我正在使用以下显示代码为项目绘制一个简单的旋转木马的基础:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, 1.0, 3.0, 7.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 4.0, 3.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0);
GLUquadricObj *obj = gluNewQuadric();
glTranslatef(0, 0, -0.05);
glColor3f(0, 0, 0);
gluCylinder(obj, radius, radius, 0.1, 100, 1);
glColor3f(0, 1, 0);
gluPartialDisk(obj, 0, radius, 100, 1, 0, 90);
glColor3f(1, 1, 0);
gluPartialDisk(obj, 0, radius, 100, 1, 90, 90);
glColor3f(1, 0, 0);
gluPartialDisk(obj, 0, radius, 100, 1, 180, 90);
glColor3f(0, 0, 1);
gluPartialDisk(obj, 0, radius, 100, 1, 270, 90);
glutSwapBuffers();
现在,这或多或少都可以。它产生了这个,这是我所期待的(不按比例):
这里的问题是它看起来很奇怪而且不切实际。中心应该在...井,中心,但相反,显着进一步“下降”产生的图像。旋转场景确认部分磁盘实际上是相同的大小和大约相同的原点。可能导致这种情况的原因是什么?
答案 0 :(得分:0)
我不确定这是否是您问题的真正原因,但我对此有了强烈的预感:您没有提供反映视口宽高比的宽高比。 < / p>
在gluPerspective
中,第二个参数采用视口的方面。在某处你有一个电话glViewport(x,y,width,height)
。您应该为gluPerspective
提供宽度和高度的比率,即
gluPerspective(45.0, (float)width/(float)height, 3.0, 7.0);
答案 1 :(得分:0)
如果您有相机控制或可以随时间旋转它,您可能会更好地了解发生了什么。
看起来有点像圆柱部分遮挡了光盘的红色和黄色。
似乎不太可能,但深度测试或背面剔除可能会有进一步的问题?
glEnable(GL_DEPTH_TEST); //not enabled by default on all OSes
glDisable(GL_CULL_FACE); //just to be sure
glDisable(GL_BLEND); //for good measure
小心投影中的近/远值 - 它们非常接近,可以轻松地剪掉你不想要的东西。再说一次,相差10,000多个,你就会遇到深度战斗问题。
答案 2 :(得分:0)
嗯,事实证明这很简单。在看了KoKuToru的链接之后,我突然意识到它实际上是向后的 - 也就是说,看起来更大的圆圈的一半在应该在底部时位于顶部。通过一些实验,我发现罪魁祸首就在这一行:
gluLookAt(0.0, 4.0, 3.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0);
具体来说,第二个参数。这是积极的,这表明我真正想要的,而不是下降。 D'哦。