我正在使用默认的android示例代码 http://developer.android.com/training/graphics/opengl/touch.html 在此示例中,我们可以通过toucht事件旋转三角形。
我想通过x,y axiss添加运动以进行测试。 三角形行为并不像我期望的那样。我做错了什么?
教程中的代码与我的新行高亮显示:
public void onDrawFrame(GL10 unused) {
// Draw background color
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
// Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
// Draw square
mSquare.draw(mMVPMatrix);
**//Translating this matrix 'brakes' triangle
-> Matrix.translateM(mMVPMatrix, 0, 0, pos, -1.0f);
//NOTHING happens here: ??? Why?
-> Matrix.translateM(mRotationMatrix, 0, pos, 0, -1.0f);**
// Create a rotation for the triangle
// long time = SystemClock.uptimeMillis() % 4000L;
// float angle = 0.090f * ((int) time);
Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);
// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);
// Draw triangle
mTriangle.draw(mMVPMatrix);
}
默认行为:
用我的代码:
答案 0 :(得分:1)
感谢 icrev 评论:
您不能在MVP矩阵上进行平移/旋转/缩放,并按预期获得结果。
您必须在模型矩阵中翻转/旋转对象(或在View矩阵中进行相机反转/旋转)。
请查看此The purpose of Model View Projection Matrix以更好地了解您需要做什么
以下是步骤:
将M矩阵设置为Identity矩阵。翻译或旋转它。注意万向节锁(en.wikipedia.org/wiki/Gimbal_lock)
设置V矩阵Matrix.setLookAtM(mVMatrix,0,0,0,-3,0f,0f,0f,0f,1.0f,0.0f); 3.你已经有投影矩阵(在你的情况下是mProjMatrix)