在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?