opengl中的矩阵,防止以后搞糊涂

为了防止以后搞糊涂,今天写了代码证实了opengl的矩阵的分布情况,

书上说opengl是列向量,在我看来还是把他当成行向量来看吧,因为从opengl的矩阵各个分量的分布情况看,还是看成行向量好。

只不过opengl在做矩阵相乘的时候,相当于把矩阵转置之后再相乘,

看下面这行代码:

glTranslatef(1.0f,1.0f,1.0f);

glRotatef(30.0f,0.0f,1.0f.0.0f);

这就是为什么上面两行代码的效果是先进行旋转再进行平移了。

 

ModelView矩阵:

openglmodelview矩阵是这样的:

你定义一个float m[16];

 

x       m[0]  m[1]  m[2]  m[3]

 

y       m[4]  m[5]  m[6]  m[7]

 

z       m[8]  m[9]  m[10] m[11]

 

平移         m[12] m[13] m[14] m[15]

 

012是旋转的X轴,456是旋转的Y轴,8910是旋转的Z

这时把你的顶点看成是行向量,顶点右乘矩阵。

可以把这个矩阵直接赋值给openglmodelview矩阵:glLoadMatrix(m);

 

 

透视投影矩阵

如果float m[16].是这样来布局的:

M[0]  m[4]  m[8]  m[12]

M[1]  m[5]  m[9]  m[13]

M[2]  m[6]  m[10] m[14]

M[3]  m[7]  m[11] m[15]

这个矩阵跟上面的矩阵一一对应。

然后就可以把这个矩阵复制给projection矩阵了:glLoadMatrix(m);

 

另外我发现一个现象,在顶点shader里面这样计算一个顶点:

vec4 position = gl_ModelViewProjection* vertex;

position.x/position.w在-1.0-1.0之间

position.y/position.w在-1.0-1.0之间

但是position.z/position.w的值非常接近1.0,本来我以为这个值应该均匀分布于-1.0-1.0之间的

但是,大多数顶点的这个值都非常接近1.0,详情请看我转载的另外一篇文章,《opengl glsl 深度计算》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值