gpt4 book ai didi

opengl - OpenGL Z轴向上

转载 作者:行者123 更新时间:2023-12-02 04:09:32 25 4
gpt4 key购买 nike

我一直试图使我的opengl引擎将z轴用作向上轴,但是无论我做什么都不显示。我这样计算 View 矩阵:

float width = xymax - xmin;
float height = xymax - ymin;

float depth = zfar - znear;
float q = -(zfar + znear) / depth;
float qn = -2 * (zfar * znear) / depth;

float w = 2 * znear / width;
w = w / aspect;
float h = 2 * znear / height;

m[0] = w;
m[1] = 0;
m[2] = 0;
m[3] = 0;

m[4] = 0;
m[5] = 0;
m[6] = h;
m[7] = qn;

m[8] = 0;
m[9] = q;
m[10] = 0;
m[11] = 0;

m[12] = 0;
m[13] = 0;
m[14] = -1;
m[15] = 0;

以前,当我将Y轴向上(工作正常)时,代码如下:
m[0]  = w;
m[4] = 0;
m[8] = 0;
m[12] = 0;

m[1] = 0;
m[5] = h;
m[9] = 0;
m[13] = 0;

m[2] = 0;
m[6] = 0;
m[10] = q;
m[14] = -1;

m[3] = 0;
m[7] = 0;
m[11] = qn;
m[15] = 0;

首先将每个对象/顶点乘以一个简单的转换矩阵:
1 0 0 xposition
0 1 0 yposition
0 0 1 zposition
0 0 0 1

然后通过上面生成的投影矩阵
我只是黑屏。要进行此操作,我还需要更改其他内容吗?

最佳答案

这些看起来就像是在投影矩阵中使用的矩阵,如果旋转那个矩阵,则会发生奇怪的事情,因为您正在混淆OpenGL对传入数据的期望。

相反,您必须在应用投影之前对输入的 vector 进行旋转。或者换句话说,您从旋转矩阵开始,然后将投影乘以该矩阵。

现在,如果您使用的是固定功能管道,则只需使用工作变量,然后将其放入投影矩阵即可。如果使用着色器,请将其放入gl_ProjectionMatrix统一中。有许多着色器算法需要世界空间顶点的位置。合并投影和模型 View 是有问题的。

对于您的模型 View ,假定以下内容为您的身份矩阵:

1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1

并继续使用您的工作投影,并在第二阶段应用它。

但是,您所做的只是漫不经心地交换了所有非零y <-> z项,这是错误的:
w  0  0  0
0 h 0 0
0 0 q qn
0 0 -1 0

正确的做法是交换y和z列:
w  0  0  0
0 q 0 0
0 0 h -1
0 0 qn 0

现在,如果您将上面给出的新“身份”乘以r,则在您的工作投影上,您将得到的正是这个。

关于opengl - OpenGL Z轴向上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005799/

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