2010-09-17 117 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