我想知道大神们是如何评价我这种写法的。高分求讨论……
2 个解决方案
#1
看了你写的我也不知道 平移是做什么的了
在当前状态(这个状态在OpenGL里面是一个矩阵,gl有函数可获取)基础上做一次平移动作,按齐次坐标4X4矩阵的处理,就是下面这个矩阵
| 1 0 0 X|
| 0 1 0 Y|
| 0 0 1 Z|
| 0 0 0 1|
12,13,14 是这16个数字列优先一维数组表达方式下的3个数字,就是(X,Y,Z)偏移量
我对这个的处理是 全部统一为4X4矩阵的乘法,不对旋转或者偏移(我不用缩放)做区分
当然如果一个平移计算,只把偏移量(X,Y,Z)加到当前矩阵第四列的三个数字上,计算量是少了很多的
在当前状态(这个状态在OpenGL里面是一个矩阵,gl有函数可获取)基础上做一次平移动作,按齐次坐标4X4矩阵的处理,就是下面这个矩阵
| 1 0 0 X|
| 0 1 0 Y|
| 0 0 1 Z|
| 0 0 0 1|
12,13,14 是这16个数字列优先一维数组表达方式下的3个数字,就是(X,Y,Z)偏移量
我对这个的处理是 全部统一为4X4矩阵的乘法,不对旋转或者偏移(我不用缩放)做区分
当然如果一个平移计算,只把偏移量(X,Y,Z)加到当前矩阵第四列的三个数字上,计算量是少了很多的
#2
OpenGL目前对矩阵是有一层托管的,不过在core profile里面就没有了,当然可以采用glGetFloatv( GL_MODELVIEW_MATRIX, matrix );这样的函数来验证其正确性。目前我是这么做的,而且我参考了Qt中关于矩阵运算的代码,发现它们平移后都要对原来矩阵做一次左乘。其他可以参考代码的地方有Bullet源代码以及Assimp源代码。
#1
看了你写的我也不知道 平移是做什么的了
在当前状态(这个状态在OpenGL里面是一个矩阵,gl有函数可获取)基础上做一次平移动作,按齐次坐标4X4矩阵的处理,就是下面这个矩阵
| 1 0 0 X|
| 0 1 0 Y|
| 0 0 1 Z|
| 0 0 0 1|
12,13,14 是这16个数字列优先一维数组表达方式下的3个数字,就是(X,Y,Z)偏移量
我对这个的处理是 全部统一为4X4矩阵的乘法,不对旋转或者偏移(我不用缩放)做区分
当然如果一个平移计算,只把偏移量(X,Y,Z)加到当前矩阵第四列的三个数字上,计算量是少了很多的
在当前状态(这个状态在OpenGL里面是一个矩阵,gl有函数可获取)基础上做一次平移动作,按齐次坐标4X4矩阵的处理,就是下面这个矩阵
| 1 0 0 X|
| 0 1 0 Y|
| 0 0 1 Z|
| 0 0 0 1|
12,13,14 是这16个数字列优先一维数组表达方式下的3个数字,就是(X,Y,Z)偏移量
我对这个的处理是 全部统一为4X4矩阵的乘法,不对旋转或者偏移(我不用缩放)做区分
当然如果一个平移计算,只把偏移量(X,Y,Z)加到当前矩阵第四列的三个数字上,计算量是少了很多的
#2
OpenGL目前对矩阵是有一层托管的,不过在core profile里面就没有了,当然可以采用glGetFloatv( GL_MODELVIEW_MATRIX, matrix );这样的函数来验证其正确性。目前我是这么做的,而且我参考了Qt中关于矩阵运算的代码,发现它们平移后都要对原来矩阵做一次左乘。其他可以参考代码的地方有Bullet源代码以及Assimp源代码。