2015-07-10 62 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。