我在OpenGL(WebGL)中有一個對象,我對它的外觀感到滿意,並且想將它移動到左側。但是,當我這樣做時,這是透視變化。我想保持它的樣子,然後在不同的地方渲染它。在屏幕座標中轉換對象
我正在使用一個相當標準的設置,我認爲,有一個投影和一個modelview矩陣。我嘗試以各種方式改變它們,但我只能讓我的對象在3D空間中移動,而不是在平面屏幕或眼睛座標中移動。任何想法如何做到這一點(沒有例如渲染到紋理)?
一些代碼摘錄。這些功能很明顯,它們來自Mozilla WebGL教程。我認爲確切的定義並不重要。
// set perspective matrix
var perspectiveMatrix = makePerspective(45, 640.0/480.0, 0.1, 100.0);
loadIdentity();
// set modelview matrix
mvTranslate([0, 0, -12]);
mvRotate(rotationAngle, [0, 1, 0]);
// and then I just draw an object...
在頂點着色器:
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
說實話,我覺得具體的代碼是不是這個問題太重要了。請不要掛在上面。我可以使用Three.js或DirectX,或手寫的raytracer。我會重新制定了一個問題:在標準的形式主義,在屏幕座標從模型計算的矩陣乘法座標:
u = Perspective * ModelView * x
我想在屏幕上移動u
。我可以用手做到這一點:
u.x += deltaX
u.y += deltaY
但是有沒有辦法玩視角矩陣來獲得相同的效果?有沒有在視圖空間中引入轉換的「標準」方式? OpenGL中有一個方便的功能嗎?
給我們一些相關的代碼。你使用glmatrix引擎嗎? –
@NikolaLukic我不確定你想看到什麼代碼,答案不應該取決於它。無論如何,我添加了一些矩陣邏輯。但你可以想象任何簡單的OpenGL代碼,一個立方體。我想將立方體放在屏幕的一側,但我不想立方體顯示它的側面,或更改視角。我沒有使用glmatrix,但答案不應該與框架有任何關係。我正在尋找類似這樣的內容:「通過此乘以你的矩陣」或「使用glShiftScreen魔術功能」。 – jdm
我想我可以通過在着色器中添加x和y座標來實現它,直到我滿意爲止,但我想知道正確的傳統方法。 – jdm