【发布时间】:2015-06-12 07:54:25
【问题描述】:
我导入了一个由多个网格组成的 FBX 模型。不幸的是,我无法在正确的位置显示每个网格。对于每个网格,我将网格的几何变换与网格的局部变换相乘,然后将其传递给着色器。我该如何解决这个问题?
OpenGL 着色器
gl_Position = modelViewProjectionMatrix *TransformationMatrix*vertexPositionsOfMesh;
创建转换矩阵
GLKMatrix4 LcLTransformation = createTransformationMatrix(
Mesh->LclRotation,
Mesh->LclScaling,
Mesh->LclTranslation);
GLKMatrix4 GeoTransformation = createTransformationMatrix(
Mesh->GeometricRotation,
Mesh->GeometricScaling,
Mesh->GeometricTranslation);
TransformationMatrix=GLKMatrix4Transpose(GLKMatrix4Multiply(LcLTransformation,
GeoTransformation));
创建变换矩阵
GLKMatrix4 createTransformationMatrix(float* _rotation, float* _scaling, float* _translation)
{
GLKMatrix4 Rx = GLKMatrix4Make(1, 0, 0, 0,
0, cos(_rotation[0]), -sin(_rotation[0]), 0,
0, sin(_rotation[0]), cos(_rotation[0]), 0,
0, 0, 0, 1
);
GLKMatrix4 Ry = GLKMatrix4Make(cos(_rotation[1]), 0, sin(_rotation[1]), 0,
0, 1, 0, 0,
-sin(_rotation[1]), 0, cos(_rotation[1]), 0,
0, 0, 0, 1
);
GLKMatrix4 Rz = GLKMatrix4Make(cos(_rotation[2]), -sin(_rotation[2]), 0, 0,
sin(_rotation[2]), cos(_rotation[2]), 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
);
GLKMatrix4 Translation = GLKMatrix4Make(1, 0, 0, _translation[0],
0, 1, 0, _translation[1],
0, 0, 1, _translation[2],
0, 0, 0, 1
);
GLKMatrix4 Scaling = GLKMatrix4Identity;
Scaling.m00 = _scaling[0];
Scaling.m11 = _scaling[1];
Scaling.m22 = _scaling[2];
GLKMatrix4 Rotation = GLKMatrix4Multiply(GLKMatrix4Multiply(Rx, Ry), Rz);
Transformation = GLKMatrix4Multiply(Scaling, GLKMatrix4Multiply(Rotation, Translation));
return Transformation;
}
【问题讨论】:
-
感谢您的欢迎 :) 我的洗衣机的所有部件都放在不相关的地方。如果我不应用任何转换,那么它们中的大多数都处于正确的位置,但少数不是。不幸的是,我没有足够的声誉来上传图片。但我会给他们提供下拉框链接。 dl.dropboxusercontent.com/u/64007696/…dl.dropboxusercontent.com/u/64007696/…
-
注意,这个问题正在讨论on meta。
标签: c opengl transformation mesh fbx