我有一個對象,我在Android OpenGL ES 3.0中在Nexus 9上渲染。該對象有大約80000個頂點和幾十萬個三角形。Android OpenGL-ES:對象顯示出錯Chirality
我知道一個事實,那些頂點是在右手座標系中。當我用我的電腦查看對象(使用像Paraview這樣的程序)時,我在右手座標系中看到對象。但是,只要我在OpenGL中的應用程序上渲染對象,該對象就具有錯誤的手性。
正如我上面提到的,我非常確定我的頂點是正確的。因此,在座標轉換過程中必須發生錯誤。有沒有人知道哪個矩陣(視圖,模型,投影)可能是我的問題的可能來源?我需要維護頂點的完整性,而不是對頂點數據本身執行任何轉換(如手動翻轉值)。
編輯:有人問我的代碼:我不能發表一切,因爲它是一個令人難以置信的大項目,但我會告訴你在哪裏我的矩陣已經建立了線:
在onSurfaceCreated ():
final float eyeX = 0.0f;
final float eyeY = 0.0f;
final float eyeZ = -3.0f;
final float lookX = 0.0f;
final float lookY = 0.0f;
final float lookZ = 0.0f;
final float upX = 0.0f;
final float upY = 1.0f;
final float upZ = 0.0f;
Matrix.setLookAtM(mViewMatrix, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ);
Matrix.setLookAtM(mViewMatrix2, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ);
Matrix.setLookAtM(mViewMatrix3, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ);
Matrix.setLookAtM(mViewMatrix4, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ); `
在onSurfaceChanged(GL10 glUnused,INT寬度,INT高度):
GLES30.glViewport(0, 0, width, height);
viewport[0] = 0;
viewport[1] = 0;
viewport[2] = width;
viewport[3] = height;
final float ratio = (float) width/height;
final float left = -ratio;
final float right = ratio;
final float bottom = -1.0f;
final float top = 1.0f;
final float near = 1.0f;
final float far = 500.0f;
Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far);
Matrix.frustumM(mProjectionMatrix2, 0, left, right, bottom, top, near, far);
Matrix.frustumM(mProjectionMatrix3, 0, left, right, bottom, top, near, far);
Matrix.frustumM(mProjectionMatrix4, 0, left, right, bottom, top, near, far);
爲了澄清,所述物鏡等我指的是使用mViewMatrix和mProjectionMatrix,而不是其他視圖矩陣和投影矩陣。如果這段代碼沒有問題,我可以發佈更多信息來顯示我操縱這些矩陣的地方。
EDIT2:我只是不明白爲什麼,但手動翻轉座標(例如,翻轉z座標),通過更改頂點數據或將縮放矩陣模型視圖,並沒有解決我的手問題。我絕對難以理解如何解決這個問題。
你應該顯示你的代碼:) – Kata