【问题标题】:Android OpenGL-ES: Object is showing up with wrong ChiralityAndroid OpenGL-ES:对象以错误的手性显示
【发布时间】:2015-09-28 16:57:44
【问题描述】:

我有一个对象,我在 Nexus 9 上的 Android OpenGL ES 3.0 中渲染。该对象有大约 80000 个顶点和几十万个三角形。

我知道这些顶点位于右手坐标系中。当我使用我的电脑查看对象(使用 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 width, int height):

    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 坐标),确实不能解决我的手性问题。我对如何解决这个问题感到非常困惑。

【问题讨论】:

  • 你应该显示你的代码:)

标签: android opengl-es projection-matrix


【解决方案1】:

终于解决了我的问题(经过 16 小时的尝试)。原来我选错了一面。从 GL_BACK 切换到 GL_FRONT 对我有用。

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多