如何围绕OpenGL 2中位于(0,0,0)的顶点旋转三角形

时间:2013-09-26 18:32:46

标签: android opengl-es rotation translation

我正在尝试使用旋转和平移制作带有6个三角形的六边形。我没有进行多次翻译调用,而是希望将三角形向下平移一次,并绕Z轴旋转60度六次(我的草图可能有助于解释:http://i.imgur.com/SrrXcA3.jpg)。在重复drawTriangle()和rotate()方法六次之后,我应该有一个六边形。

目前我的代码如下:

public void onDrawFrame(GL10 unused) 
{
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); //start by clearing the screen for each frame

    GLES20.glUseProgram(mPerVertexProgramHandle); //tell OpenGL to use the shader program we've compiled

    //Get pointers to the program's variables. Instance variables so we can break apart code
    mMVPMatrixHandle = GLES20.glGetUniformLocation(mPerVertexProgramHandle, "uMVPMatrix");
    mPositionHandle = GLES20.glGetAttribLocation(mPerVertexProgramHandle, "aPosition");
    mColorHandle = GLES20.glGetAttribLocation(mPerVertexProgramHandle, "aColor");

    //Prepare the model matrix!
    Matrix.setIdentityM(mModelMatrix, 0); //start modelMatrix as identity (no transformations)
    Matrix.translateM(mModelMatrix, 0, 0.0f, -0.577350269f, 0.0f); //shift the triangle down the y axis by -0.577350269f so that its top point is at 0,0,0
    drawTriangle(mModelMatrix); //draw the triangle with the given model matrix
    Matrix.rotateM(mModelMatrix, 0, 60f, 0.0f, 0.0f, 1.0f);
    drawTriangle(mModelMatrix);
}

这是我的问题:看来我的三角形没有围绕(0,0,0)旋转,而是围绕三角形的中心旋转(如图所示:http://i.imgur.com/oiLFSCE.png)。

是否可以在其顶点所在的位置(0,0,0)周围旋转三角形?

1 个答案:

答案 0 :(得分:0)

你真的确定你的常数-0.577350269f是三角形中心的正确值吗?

此外,您的代码看起来不完整(您使用的是mvp句柄,但从不在代码中使用它),您能提供更多信息吗?