0

我一直在使用openGL,最后一直在搞乱一些着色器。

当我试图让这只老虎出现在屏幕上时,我的问题出现了。我一直什么也没看到。所以我决定开玩笑,把我的数学从

模型 * CameraView * CameraProjection 并向后做了 CameraProjection * CameraView * Model

我知道很明显答案不会一样。但是一旦我运行了代码,我的模型就会出现在屏幕上,并且完全按照它需要做的事情。

在我这边,我所做的只是将我在着色器中进行所有正确放置计算的矩阵传递给它。

这是我正在使用的 3 个矩阵:

模型世界位置

1.0,  0.0,  -0.03, 0.0,
0.0,  1.0,   0.0,  0.0,
0.03, 0.0,   1.0,  0.0,
1.0, -3.0, -10.0,  1

相机视图

1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0

相机投影

2.37, 0.0,   0.0,   0.0,
0.0,  3.17,  0.0,   0.0,
0.0,  0.0,  -1.0,  -1.0,
0.0,  0.0,  -0.02,  0.0

我的结果矩阵是:( 以防你们不想做)

MVP

2.38,  0.0,    0.0,   0.0,
0.0,   3.17,  -0.03, -0.03,
0.02, -0.095, -1.0,  -1.0,
2.38, -9.51,  36.1,  36.1

PVM

 2.38, 0.0,  -0.017,   0.0,
 0.02, 3.17,  3.17,    0.0,
-0.82, 3.33, 35.03,   -1.0,
 0.0,  0.0,   0.0,     0.0

数学实际上是在我的着色器中计算的。这是一个openGL着色器。

4

1 回答 1

4

那是因为“Model * CameraView * CameraProjection”是倒退的。对于列主要规范矩阵,最右边的变换首先出现。模型空间位置在最右边,然后乘以模型到世界矩阵,然后是世界到相机,然后是相机到投影。从右到左。

于 2013-08-30T23:09:00.783 回答