在OpenGL中围绕它旋转对象

我正在写.obj文件中模型的小型3D查看器。
我有一辆车,我想旋转车轮。 我发现了很多很好的例子,但我仍然遇到了一个问题:轮子围绕着它的边界旋转,而不是绕着中心旋转。 你可以在gif上看到它。
以下部分代码无材料和照明代码。 我找到车轮中心的坐标。

GL.PushMatrix();

// Rotate the car
GL.Translate(x, y, z); //x=0, y=0, z=0
GL.Rotate(ori, 0, 1, 0); // ori=90

// ...
// Material and lighting code 
// ...

foreach (var group in file.G)
{
    GL.PushMatrix();
    if (group.name == "wheel_rf")
    {
        float xTmp, yTmp, zTmp;
        xTmp = yTmp = zTmp = 0;
        int count = 0;
        // read group's faces
        foreach (var f in group.F)
        {
            // read face's vertices
            foreach (var v in f.V)
            {
                yTmp += v.Y;
                zTmp += v.Z;
                xTmp += v.X;
                count++;
            }
        }
        yTmp /= count;
        zTmp /= count;
        xTmp /= count;
        GL.Translate(xTmp, yTmp, zTmp);
        GL.Rotate(this.wheelAngle, 1, 0, 0);
        GL.Translate(-xTmp, -yTmp, -zTmp);
    }

    // draw faces for each group
    GL.Begin(file.PrimitiveType);
    foreach (var face in group.F)
    {
        GL.TexCoord2(face.VT[0]);
        GL.Normal3(face.VN[0]);
        GL.Vertex3(face.V[0]);

        GL.TexCoord2(face.VT[1]);
        GL.Normal3(face.VN[1]);
        GL.Vertex3(face.V[1]);

        GL.TexCoord2(face.VT[2]);
        GL.Normal3(face.VN[2]);
        GL.Vertex3(face.V[2]);
    }
    GL.End();
    GL.PopMatrix();
}
GL.PopMatrix();

注意! 我第一次旋转所有的汽车90度,否则我会看到汽车回来。 我找不到问题的原因。 在汽车模型中可能会遇到麻烦,但整车很好。

链接地址: http://www.djcxy.com/p/81843.html

上一篇: Rotating an object around it's centre in OpenGL

下一篇: How do you render a cube with different colored sides in OpenGL?