OpenGL:设置位置而不是翻译?

时间:2010-09-17 18:33:12

标签: java opengl graphics jogl

我可以将当​​前渲染位置设置为任意值,而不是仅仅从当前位置给它一个偏移量吗?

这就是我目前正在做的事情:

gl.glTranslatef(3.0f, 0.0f, 2.0f);

它允许我说“我想向左移动”而不是“我想移动到点(2,1,2)”。有没有办法做后者?

我正在使用带有JOGL的OpenGL。

更新

@Bahbar建议如下:

gl.glLoadIdentity();
gl.glTranslatef(...);

当我这样做时,除了六行之外的所有内容都会消失。我不知道为什么。我遇到的问题是远剪裁平面太近了,所以也许他们离得太远而无法渲染。

2 个答案:

答案 0 :(得分:5)

是。从身份矩阵开始。

gl.glLoadIdentity();
gl.glTranslatef(...);

答案 1 :(得分:0)

是的,您可以使用gluLookAt命令设置视图位置。如果您查看OpenGL常见问题解答,则会出现与您的问题最相关的问题:8.060 How do I make the camera "orbit" around a point in my scene?

  

您可以通过模拟轨道   平移/旋转场景/对象   并保持相机相同   地点。例如,绕物体运行   放在Y轴的某个地方,而   不断看着起源,   你可以这样做:

gluLookAt(camera[0], camera[1], camera[2], /* look from camera XYZ */
          0, 0, 0, /* look at the origin */
          0, 1, 0); /* positive Y up vector */ 
glRotatef(orbitDegrees, 0.f, 1.f, 0.f); /* orbit the Y axis */ 
          /* ...where orbitDegrees is derived from mouse motion */
glCallList(SCENE); /* draw the scene */
  

如果你坚持绕物理轨道运行相机位置,你会   需要改造当前的相机   使用它之前的位置向量   你的观看转型。

     

无论哪种情况,我都建议你   调查gluLookAt()(如果你不是   已经使用这个例程。)

请注意,gluLookAt调用:作者将摄像机位置存储在3值数组中。如果你这样做,你将能够完全按照你想要的绝对坐标指定你的视点。

注意:如果您移动眼睛位置,您可能也想要指定视图方向。在这个例子中,作者决定将注意力集中在点(0,0,0)上。

这个问题很可能与您尝试做的事情有关:GLU.gluLookAt in Java OpenGL bindings seems to do nothing