【发布时间】:2012-06-09 14:20:23
【问题描述】:
我一直在尝试使用 OpenGL ES 2.0 为 Android 创建简单的漫反射光照着色器,并从 OpenGL 4.0 着色语言食谱中获取知识,但它并没有说明多少关于普通矩阵的信息,我很确定问题来自它,因为我一直在使用的“模型”在 WebGL 中运行良好,我可以使用我在 Java 中找不到的漂亮 glMatrix 库。
我不确定如何从模型视图矩阵中获取正常矩阵,但我读到它只是倒置 3x3 模型视图矩阵的转置,太糟糕的 Android Matrix 类只能让你使用 4x4 矩阵(对吗?)所以我'一直在着色器中拆分矩阵,这可能是我出错的地方。
所以我所做的就是这样:
float[] nMatrix = new float[4 * 4];
Matrix.invertM(nMatrix, 0, mvMatrix, 0);
Matrix.transposeM(nMatrix, 0, nMatrix, 0);
glUniformMatrix4fv(shader.getUniformPointer("nMatrix"), 1, false, nMatrix, 0);
然后在我的顶点着色器中我这样做:
tNorm = normalize(mat3(nMatrix) * vNormal).xyz;
剩下的代码基本上都是书上的,结果如下
正如你所看到的,立方体的某些侧面完全是黑暗的,我确信我得到了所有的法线,即使我不知道任何 Android GL 调试器,但如果你知道,请随时告诉我.
所以问题是,我怎样才能正确地从我的模型视图矩阵中获取正常矩阵?
【问题讨论】:
标签: android opengl-es opengl-es-2.0