好了,現在你澄清後,你真正想做的事,我敢肯定,這是正確的答案:
你可能使用一種叫做ModelView
矩陣。你覺得它基本上是由兩部分組成的嗎?那麼,這是爲了我,並且在我思考了一段時間後,這是有道理的。最終的頂點位置計算如下:
gl_Position = ProjectionMat * ModelViewMat * VertexPos;
你看,有對OpenGL的沒有什麼區別,你是否從原點移動「攝像頭」由[x,y,z]
或移動的物體[-x,-y,-z]
- 你會得到相同的結果。然而,將「相機」位置區分爲可能與原點不同的東西是有用的。
gl_Position = ProjectionMat * ViewMat * ModelMat * VertexPos;
我覺得最自然的方式來做到這一點是,正如我所說,分裂成計算兩個矩陣:Model
和View
。場景中的每個物體現在都必須更改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
那麼,如果它的畫相對於世界,移動它相對於世界。否則,我覺得將模型視圖分解爲模型視圖矩陣和視圖矩陣非常有用,並且在我需要時忽略後者(所以是的,它將是Z座標) –
它被繪製在世界的相機位置。現在我希望它能夠改變相機「看」的方式,但它總是與相機相對而不是相機。對不起,我是OpenGl的新手,也許是idk。 – Machiaweliczny