【发布时间】:2022-01-11 20:22:44
【问题描述】:
这是我的透视投影矩阵代码
inline m4
Projection(float WidthOverHeight, float FOV)
{
float Near = 1.0f;
float Far = 100.0f;
float f = 1.0f/(float)tan(DegToRad(FOV / 2.0f));
float fn = 1.0f / (Near - Far);
float a = f / WidthOverHeight;
float b = f;
float c = Far * fn;
float d = Near * Far * fn;
m4 Result =
{
{{a, 0, 0, 0},
{0, b, 0, 0},
{0, 0, c, -1},
{0, 0, d, 0}}
};
return Result;
}
这里是主要代码
m4 Project = Projection(ar, 90);
m4 Move = {};
CreateMat4(&Move,
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, -2,
0, 0, 0, 1);
m4 Rotate = Rotation(Scale);
Scale += 0.01f;
m4 FinalTransformation = Project * Move * Rotate;
SetShaderUniformMat4("Project", FinalTransformation, ShaderProgram);
Here 是一些立方体旋转的图片。 在着色器代码中,我只是将变换乘以位置(变换在左侧)。
我不确定它是否有用,但这里是轮换代码:
float c = cos(Angle);
float s = sin(Angle);
m4 R =
{
{{ c, 0, s, 0},
{ 0, 1, 0, 0},
{-s, 0, c, 0},
{ 0, 0, 0, 1}}
};
return R;
我尝试在着色器代码中而不是在 c++ 端乘以矩阵,但后来一切都消失了。
【问题讨论】:
-
您的矩阵似乎被转置了。
-
@Rabbid76 似乎已经修复了它。我转置了投影和平移矩阵,并在着色器一侧将它们相乘,尽管旋转一个似乎是正确的(可能是因为我没有写那个)。 OpenGL如何获取和乘以矩阵?因为它的行为似乎与我编写的乘法函数不同。
标签: c++ matrix opengl 3d projection-matrix