JOGL:在指定位置绘制球体会导致问题

Posted

技术标签:

【中文标题】JOGL:在指定位置绘制球体会导致问题【英文标题】:JOGL: Drawing spheres at specified position causes issues 【发布时间】:2015-02-23 11:49:59 【问题描述】:

我正在尝试使用以下 GLUT 方法在带有 JOGL 的 3D OpenGL 画布中绘制球体:

GLUT glut = new GLUT();
glut.glutSolidSphere(radius, stacks, slices); 

大小由radius-属性和位置定义

gl.glTranslatef(posX, posY, posZ);

在我的场景中,我正在绘制 3 个具有不同 x 坐标的相同球体。我希望得到 3 个具有相同大小和相同 y 和 z 坐标的球体,但我得到了这个(我还应用了一些灯光和颜色设置,但我认为这与问题无关) :

不仅球体的半径不同,而且它们的 z 位置也不同。第一个球体按预期绘制,但第二个和第三个球体变小了,它们在 z 轴上位于前一个球体的后面。

我不知道是什么导致了这种行为...我的想法是它可能与 OpenGL 状态有关..

谁能赐教?

【问题讨论】:

【参考方案1】:

一点点研究揭示了答案:

方法

gl.glTranslate(posX,posY,posZ);

根据前一个矩阵的位置移动矩阵,因为它们都相互相乘,这会导致那些奇怪的值。 解决方案是通过调用以下方法重新加载标识以将矩阵重置为默认状态:

gl.glLoadIdentity();
gl.glTranslate(posX,posY,posZ);

这是结果:

这个thread 帮助我找到了答案

【讨论】:

以上是关于JOGL:在指定位置绘制球体会导致问题的主要内容,如果未能解决你的问题,请参考以下文章

为什么重新安排时钟间隔会导致图像位置重置?

如何解决由于加载图像而导致屏幕闪烁的问题?

在 jogl 中使用顶点缓冲区,当三角形太多时崩溃

glGetUniformLocation() 不在 JOGL 中?

JOGL 和帧缓冲区渲染到纹理的问题:无效帧缓冲区操作错误

球击球时改变角度