Opengl上的旋转问题

时间:2011-08-01 12:31:04

标签: android opengl-es rotation

我一直试图在Opengl es for android中绕另一个点旋转。它以某种特定方式起作用。随着旋转变大(即接近90°),该点进一步远离旋转中心。最终,该点围绕旋转中心在椭圆轨道中旋转,但是我希望它以圆形方式旋转。有谁知道我怎么能这样做?谢谢

package org.example.pointtest;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import javax.microedition.khronos.opengles.GL10;

public class LegRoot 
{
public  FloatBuffer hipVertexBuffer;
float[]hip={1.75f,-2.75f,0.0f};//0 hip
float[]knee={1.75f,-6.75f,0.0f};//1 knee
float[]ankle={1.75f,-10.75f,0.0f};//2 ankle


public float distance2D(float[]origin,float[]extremity)
{
    float a=extremity[0]-origin[0];
    float b=extremity[1]-origin[1];
    float c=extremity[2]-origin[2];
    float[] d={a,b,c};
    return d[1];
}
public LegRoot() 
{
    float []hippoint=
    {
            1.75f,-2.75f,0.0f
    };//0 hip

    ByteBuffer vbb = ByteBuffer.allocateDirect(1*3*4);
    vbb.order(ByteOrder.nativeOrder());
    hipVertexBuffer=vbb.asFloatBuffer();
    hipVertexBuffer.put(hippoint);
    hipVertexBuffer.position(0);
}
public void hip(GL10 gl)
{
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0,hipVertexBuffer);// root joint transformation matrix(supposition)
    gl.glPushMatrix();
    gl.glColor4f(1f, 0f, 0f, 1f);
    gl.glRotatef(0f, 0, 0, 1);
    gl.glTranslatef(0f,0f, 0);
    gl.glDrawArrays(GL10.GL_POINTS, 0, 1);
    gl.glPopMatrix();

}

public void knee(GL10 gl)
{   
    gl.glPushMatrix();
    gl.glTranslatef(-hip[0], -hip[1], 0);
    gl.glRotatef(0f, 0, 0, 1);
    gl.glTranslatef(hip[0], hip[1], 0);
    gl.glTranslatef(0,distance2D(hip,knee), 0);
    hip(gl);
    gl.glPopMatrix();
}
public void ankle(GL10 gl)
{
    gl.glPushMatrix();
    gl.glTranslatef(-knee[0], -knee[1], 0);
    gl.glRotatef(90f, 0, 0, 1);
    gl.glTranslatef(knee[0], knee[1], 0);
    gl.glTranslatef(0, distance2D(knee, ankle), 0);
    knee(gl);
    gl.glPopMatrix();
}

}

1 个答案:

答案 0 :(得分:0)

在这里得到答案我复制了我的评论。

你的Matrix中可能有一个glScale。您可以尝试在绘制之前加载单位矩阵,以确保不涉及比例。但这会删除您之前执行的所有其他转换。

另请注意:当您使用非方形显示并且不考虑显示器的宽高比时,这也会看起来像缩放。

对于你的第二个问题:你能发表你的旋转声明吗?也许最好为新问题打开一个新问题。