2010-09-17 113 views
3

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

这是我在做什么目前:

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

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

我正在使用OpenGL和JOGL。

更新

@Bahbar提出以下建议:

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

当我这样做,一切,除了半年线消失。我不知道为什么。我遇到了一个问题,那就是太远的剪贴板太靠近了,所以它们可能太远而无法渲染。

回答

5

是的。从身份矩阵开始。

gl.glLoadIdentity(); 
gl.glTranslatef(...); 
+0

好的,我怎样才能得到当前位置? – 2010-09-17 18:43:25

+0

@Rosarch没有什么像当前位置,只有模型矩阵的翻译。 – 2010-09-17 19:45:05

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