【发布时间】:2020-11-25 10:18:01
【问题描述】:
我正在尝试使用 glm 旋转纹理图像,但输出看起来拉伸或没有沿 z 轴正确旋转。这个可能的解决方案是什么。
float imgAspectRatio = imageWidth / (float) imageHeight;
float viewAspectRatio = viewWidth / (float) viewHeight;
if (imgAspectRatio > viewAspectRatio) {
yScale = viewAspectRatio / imgAspectRatio;
} else {
xScale = imgAspectRatio / viewAspectRatio;
}
glm::mat4 model(1.0f);
model = glm::translate(model, glm::vec3(0, 0, 0));
model = glm::rotate(model, glm::radians(angle),
glm::vec3(0, 0, 1));
model = glm::scale(model, glm::vec3(xScale, yScale, 1.0f));
glm::mat4 projection(1.0f);
projection = glm::ortho(
-imgAspectRatio,
imgAspectRatio,
-1.0f,
1.0f,
-1.0f,
1.0f
);
【问题讨论】:
-
如何变换顶点?如果你计算一个模型视图投影矩阵,它必须是
mvp = projection * model;。如果在着色器代码中应用这两个矩阵,那么它必须是gl_Position = projection * model * vertex;。 -
转换仅在 cpu 中完成,例如
mvp= projection * model;,在着色器中就像gl_Position = modelMat*vec4(vertex, 1.0);
标签: c++ opengl rotation scaling glm-math