2013-01-11 86 views
1

我的問題是我不能在OpenGL中獲得「視線」矢量。我做了一些研究,發現它應該是轉換後的Z向量,但它不想工作。我已經得到了這個代碼來檢測塊的速度(我希望它從「相機」向前移動),但它始終與相機無關,但始終與渲染世界相同:OpenGL中的視線矢量

GLfloat matrix[16]; 
    glGetFloatv (GL_MODELVIEW_MATRIX, matrix); 
    GLfloat d = sqrt(matrix[8]*matrix[8] + matrix[9]*matrix[9] + matrix[10]*matrix[10]); 
    xmov = matrix[8]/d; 
    ymov = matrix[9]/d; 
    zmov = matrix[10]/d; 

我做錯了什麼?

+0

那麼,如果它的畫相對於世界,移動它相對於世界。否則,我覺得將模型視圖分解爲模型視圖矩陣和視圖矩陣非常有用,並且在我需要時忽略後者(所以是的,它將是Z座標) –

+0

它被繪製在世界的相機位置。現在我希望它能夠改變相機「看」的方式,但它總是與相機相對而不是相機。對不起,我是OpenGl的新手,也許是idk。 – Machiaweliczny

回答

2

好了,現在你澄清後,你真正想做的事,我敢肯定,這是正確的答案:

你可能使用一種叫做ModelView矩陣。你覺得它基本上是由兩部分組成的嗎?那麼,這是爲了我,並且在我思考了一段時間後,這是有道理的。最終的頂點位置計算如下:

gl_Position = ProjectionMat * ModelViewMat * VertexPos; 

你看,有對OpenGL的沒有什麼區別,你是否從原點移動「攝像頭」由[x,y,z]或移動的物體[-x,-y,-z] - 你會得到相同的結果。然而,將「相機」位置區分爲可能與原點不同的東西是有用的。

gl_Position = ProjectionMat * ViewMat * ModelMat * VertexPos; 

我覺得最自然的方式來做到這一點是,正如我所說,分裂成計算​​兩個矩陣:ModelView。場景中的每個物體現在都必須更改Model矩陣,並通過更改View矩陣來設置攝像機位置。說得通?

我給你舉個例子。如果您的相機位於[5,0,0](對應於Translate(-5,0,0)),並且您的對象位於[-5,0,0]中,則相機將佔用10個單位。現在,當您將相機遠離原點(增加第一個平移距離)時,「相機」和對象之間的距離會增大。

對象翻譯是型號,相機翻譯是查看

所以不難得出結論,如果你想忽略攝像機的位置,只是剝離View部分從方程;每個對象現在將被繪製爲而不是考慮相機位置,因此僅相對於您的視口。

gl_Position = ProjectionMat * ModelMat * VertexPos; 

我們的假設模型現在將土地沿X軸的5個單位從視無論的你當前「看」,那就是,我認爲,幾乎你想要達到的目標。

無論如何,你很可能a nice tutorial about it

+0

感謝您的解釋 - 澄清了很多。你能推薦我更好的解釋這個話題的任何書籍/教程嗎?導致我的OpenGL學習如此緩慢的主要原因。我只是沒有真正獲得座標和轉換。 – Machiaweliczny

+1

該鏈接位於答案的最後一行@ user1701595 :)由於您在這裏是新的,所以在分數下方有一個勾號按鈕,將答案標記爲「已接受」。 –