Opengl es 在OpenGL ES 2.0中围绕其轴旋转形状,然后平移该形状

Opengl es 在OpenGL ES 2.0中围绕其轴旋转形状,然后平移该形状,opengl-es,opengl-es-2.0,Opengl Es,Opengl Es 2.0,我试着绕一个三角形的中心(0,0,0)旋转一个三角形,然后将它平移(0.5,0.5,0)。但是,无论我将translateM命令放在rotateM命令之前还是之后,我仍然会得到相同的结果,即一个三角形被平移到所述位置,旋转(如果您愿意,旋转)大约(0,0,0)。我在网上找过类似的帖子,但都没用。这是我的密码: 注意:我的三角形都以(0,0,0)为中心 Matrix.setIdentityM(mModelMatrix, 0); // *** transform shape bef

我试着绕一个三角形的中心(0,0,0)旋转一个三角形,然后将它平移(0.5,0.5,0)。但是,无论我将translateM命令放在rotateM命令之前还是之后,我仍然会得到相同的结果,即一个三角形被平移到所述位置,旋转(如果您愿意,旋转)大约(0,0,0)。我在网上找过类似的帖子,但都没用。这是我的密码:

注意:我的三角形都以(0,0,0)为中心

    Matrix.setIdentityM(mModelMatrix, 0);

    // *** transform shape before rendering

    Matrix.setRotateM(mRotationMatrix, 0, rx, -1.0f, 0, 0);
    Matrix.multiplyMM(mModelMatrix, 0, mRotationMatrix, 0, mModelMatrix, 0);        // rotate

    Matrix.setRotateM(mRotationMatrix, 0, ry, 0, -1.0f, 0);
    Matrix.multiplyMM(mModelMatrix, 0, mRotationMatrix, 0, mModelMatrix, 0);        // rotate

    Matrix.setRotateM(mRotationMatrix, 0, rz, 0, 0, -1.0f);
    Matrix.multiplyMM(mModelMatrix, 0, mRotationMatrix, 0, mModelMatrix, 0);        // rotate

    Matrix.translateM(mModelMatrix, 0, tx, ty, tz);                         // translate

    Matrix.multiplyMM(mvpMatrix, 0, mModelMatrix, 0, mvpMatrix, 0);         // world view


    // *** render

    // Add program to OpenGL environment
    GLES20.glUseProgram(mProgram);

    // get handle to vertex shader's vPosition member
    mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");

    // Enable a handle to the triangle vertices
    GLES20.glEnableVertexAttribArray(mPositionHandle);

    // Prepare the triangle coordinate data
    GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
                                 GLES20.GL_FLOAT, false,
                                 vertexStride, vertexBuffer);

    // get handle to fragment shader's vColor member
    mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");

    // Set color for drawing the triangle
    GLES20.glUniform4fv(mColorHandle, 1, color, 0);

    // get handle to shape's transformation matrix
    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
    MyGL20Renderer.checkGlError("glGetUniformLocation");

    // Apply the projection and view transformation
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
    MyGL20Renderer.checkGlError("glUniformMatrix4fv");

    // Draw the triangle
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);

    // Disable vertex array
    GLES20.glDisableVertexAttribArray(mPositionHandle);

任何建议都将不胜感激。

您的矩阵乘法逻辑可能有问题。据我所知,你想要的第一个运算是最后一个乘法,所以你的乘法顺序应该是先平移,然后旋转。最后,如果我们也能看到你的矩阵乘法代码,那就更好了。这就是问题所在。我需要先平移,然后旋转,矩阵操作数的顺序是错误的。