【THREE矩阵】MVP

【模型矩阵】

matrix是某个节点的本地坐标下的模型矩阵
matrixWorld是这个节点的世界坐标下的模型矩阵
因此需要一次相乘
如scene根节点,在render的时候执行scene. updateMatrixWorld

this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );

遍历执行计算子节点 孙节点的updatematrix计算得到matrix本地矩阵和updatematrixworld计算得到matrixworld世界矩阵

three中模型矩阵传入是在render函数中
p_uniforms.setValue( _gl, ‘modelMatrix’, object.matrixWorld )

参考:
http://www.yanhuangxueyuan.com/doc/three.js/matrixworld.html

【视图矩阵】

render函数里面scene. updateMatrixWorld后,camera也计算这个,得到相机的世界坐标下的模型矩阵matrixWorld,其逆矩阵matrixWorldInverse就是视图矩阵

render函数里面有
p_uniforms.setValue( _gl, ‘viewMatrix’, camera.matrixWorldInverse );

这里还找到个相机位置挺有用,这个是世界坐标系下的相机位置
const uCamPos = p_uniforms.map.cameraPosition;
uCamPos.setValue( _gl,
_vector3.setFromMatrixPosition( camera.matrixWorld ) );

【投影矩阵】

看camera的属性就行
render函数里面有
p_uniforms.setValue( _gl,‘projectionMatrix’, camera.projectionMatrix );

【法向量】

p_uniforms.setValue( _gl, ‘normalMatrix’, object.normalMatrix );//这个normalMatrix是直接转换到视图坐标下的,所以下面这个想某方向向量和这个求dot的时候,该方向向量需要转到视图坐标系下,如下面https://blog.csdn.net/srk19960903/article/details/78734238
备注:
我感觉他这个顶点到相机的向量左乘视图矩阵有点问题吧,不是要乘逆矩阵的转置吗,但是看three.js ShaderChunk\envmap_physical_pars_fragment.glsl.js 里面也有类似这种乘法,这里有个疑问为什么法向量需要左乘逆转置,而方向向量是左乘正常矩阵
是不是法向量会考虑不等比缩放,而普通方向向量不考虑这个呢

下面是灯光的使用详解
https://learnopengl-cn.github.io/02%20Lighting/02%20Basic%20Lighting/
法向量转到世界坐标需要左乘模型坐标逆矩阵的转置
法向量转到视图坐标左乘模型视图矩阵的逆矩阵的转置
three里面的object.normalMatrix.getNormalMatrix( object.modelViewMatrix );是直接计算视图坐标下的法向量转换矩阵

【three模型视图矩阵】

p_uniforms.setValue( _gl, ‘modelViewMatrix’, object.modelViewMatrix );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值