2015-07-10 63 views
1

我有一個對象,我在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座標),通過更改頂點數據或將縮放矩陣模型視圖,並沒有解決我的手問題。我絕對難以理解如何解決這個問題。

+0

你應該顯示你的代碼:) – Kata

回答

0

終於想通了我的問題(經過16小時的嘗試)。原來我是在剔除錯誤的一面。我從GL_BACK切換到GL_FRONT。