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

标签 java opengl graphics glut jogl

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

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 状态有关..

谁能启发我吗?

最佳答案

一点点研究揭示了答案:

方法

gl.glTranslate(posX,posY,posZ);

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

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

这是结果:

enter image description here

这个thread 帮助我找到了答案

关于java - JOGL:在指定位置绘制球体会导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673143/

相关文章:

java - 使用 XMLScanner 反序列化 xml 导致输出字符串更大

java - hibernate settimeout 不工作 mysql

c++ - 在opengl中用线程绘制顶点

java - 如何使用 Jackson yaml 以大括号 ([ ]) 格式将 Java 列表打印到 Yaml 列表

java - 使用 Java 和 Ruby 实现 JSON 中的多态性或继承

c++ - 为什么我得到 'vector subscript out of range' ?

Opengl:移动相机 "fps style"

android - 基于 Unity 的 Android 游戏屏幕在 Lollipop 下对角线切成两半(但在 Jelly Bean 下不是)

opengl - 我的有限 FPS : 60

Android:更改png文件颜色的最简单方法