gpt4 book ai didi

math - 为什么我不能平移我的飞机向下?

转载 作者:行者123 更新时间:2023-12-01 14:36:14 25 4
gpt4 key购买 nike

我怀疑我搞砸了我的数学,但我似乎无法弄清楚我哪里做错了。

这是我的场景:

绿色木平面被定义为一组顶点:

    private Vertex[] planeVertices = new[]
{
/*0*/new Vertex(-1, 0, 1, 0,0, 0, 1, 0),
/*1*/new Vertex( 1, 0, 1, 1,0, 0, 1, 0),
/*2*/new Vertex( 1, 0,-1, 1,1, 0, 1, 0),
/*3*/new Vertex(-1, 0,-1, 0,1, 0, 1, 0),
};

Vertex 的前 3 个数字是坐标,后面的可以忽略。然后我将它渲染成这样:

        planeVao.Bind();
textureSampler.Value = 1;
modelMatrix.Value = new Matrix4(
5, 0, 0, 0,
0, 1, 0, -3,
0, 0, 5, 0,
0, 0, 0, 1);
GL.DrawElements(BeginMode.Triangles, planeIndices.Length,
DrawElementsType.UnsignedInt, IntPtr.Zero);

在顶点着色器中我有:

gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(Position, 1.0);

modelMatrix.Value 赋值应该沿 X 轴和 Z 轴将平面拉伸(stretch) 5 倍(确实如此,否则它将与立方体大小相同),然后-3 应该将它向下移动 3 个单位,但它没有效果。那是我想不通的部分。

在 GLSL 中 ModelMatrix 的值为 modelMatrix.Value...

因此,如果我们以第一个顶点 (-1,0,0) 为例,然后将其乘以该矩阵....对于 y 坐标,我们有 [0,1,0 ,-3]T * [-1,0,0,1] = (0*-1 + 1*0 + 0*0 + 1*-3) = -3,不是吗?不过,它看起来好像是零。


将 ModelMatrix 更改为此(将右上角的值 Tx 替换为 1):

        modelMatrix.Value = new Matrix4(
5, 0, 0, 1,
0, 1, 0, -3,
0, 0, 5, 0,
0, 0, 0, 1);

有这样的效果:

这看起来根本不像翻译...不确定这里发生了什么。


好的,我检查过我的数学没有错:

截图 [图片有点错误]

这是我所期望的结果......现在我想知道我的错误是否在其他地方。


好的 View 矩阵是:

{(0.8192319, -0.2529707, 0.5146502, 0)
(0, 0.8974438, 0.4411287, 0)
(-0.5734624, -0.3613867, 0.7352146, 0)
(8.940697E-08, -2.235174E-07, -6.800735, 1)}

投影矩阵为:

{(1.299038, 0, 0, 0)
(0, 1.732051, 0, 0)
(0, 0, -1.020202, -1)
(0, 0, -2.020202, 0)}

最佳答案

您正在切换最后一行和最后一列。 View 矩阵在底行有平移向量,但你在最后一列创建模型的平移,它处理倾斜/其他一些我没有研究太多的透视问题。

只需切换翻译位置即可。如果您的变换都是统一的,您也可以只对矩阵进行转置以获得相同的结果。

关于math - 为什么我不能平移我的飞机向下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com