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

时间:2015-02-23 11:50:00

标签: java opengl graphics glut jogl

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

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

大小由radius - 属性和位置

定义
gl.glTranslatef(posX, posY, posZ);

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

enter image description here

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

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

任何人都可以启发我吗?

1 个答案:

答案 0 :(得分:1)

一些研究揭示了答案:

方法

gl.glTranslate(posX,posY,posZ);

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

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

结果如下:

enter image description here

thread 帮助我找到了答案