我编写了使用OpenGL ES的应用程序。我在模拟和真实的Nexus 5上测试它,其上安装了Android 6(API 23)。
在测试较旧的Android版本(API 22-)时,它出现了,我的3d对象缺少一个维度。
在statring应用程序之后,在两种情况下看起来都是这样(视图设置为-z,y轴在这里):
但是当旋转它时,API 22(或更低)和23中的行为存在差异。
Case API 22(或更低版本):
物体是平的 - 模型上的Z轴似乎缺失,但是光线正确计算(具有适当的Z值)。
Case API 23(所需的):
所有截图均来自模拟器;我只使用API 23(Nexus 5)在一台真实设备上进行了测试,并在那里工作。
旋转由触摸事件完成,并由以下代码处理:
case one===1
OpenGL版本在AndroidManifest中设置:
Matrix.rotateM(mCurrentRotation, 0, mDeltaRotationY, 1.0f, 0.0f, 0.0f);
Matrix.multiplyMM(mModelMatrix, 0, mModelMatrix, 0, mCurrentRotation, 0);
对我而言,模特或视图martix的行为似乎发生了变化。
修改 根据评论要求: 矩阵是在我的渲染中创建的,它扩展了GLSurfaceView.Renderer 我正在关注http://www.learnopengles.com/教程来准备这个。
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
答案 0 :(得分:1)
我知道这个问题已经过时了,但我今天遇到了同样的问题。 所以,万一有人遇到这个,我发现了问题。
每当您致电Matrix.multiplyMM(float[] result, ...)
时,结果&#39; float数组既不能与左侧矩阵相等,也不能与右侧矩阵相等。
在Android Marshmallow(或更高版本)上,这似乎不是一个问题......但是在下面最好先调用结果矩阵上的.clone()
并将其传递给左边/右手边的矩阵代替。
长话短说,对于Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);
,第二个mMVPMatrix
需要替换为mMVPMatrix.clone()
才能使其正常工作。