计算机图形学非常简单的平移方面的问题……高分求救!

时间:2022-07-02 22:42:46
是这样的,我在学习计算机图形学的时候了解了矩阵平移的算法,但是在实战的过程中总是得到错误的结果。我在看了开源的数学库时发现别人原来矩阵的平移写法和我以前写的不一致,就改成了自己的写法,并且写了一篇文章 [地址在这里]
我想知道大神们是如何评价我这种写法的。高分求讨论……

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)加到当前矩阵第四列的三个数字上,计算量是少了很多的

#2


引用 1 楼 victor_woo 的回复:
看了你写的我也不知道 平移是做什么的了

在当前状态(这个状态在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目前对矩阵是有一层托管的,不过在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)加到当前矩阵第四列的三个数字上,计算量是少了很多的

#2


引用 1 楼 victor_woo 的回复:
看了你写的我也不知道 平移是做什么的了

在当前状态(这个状态在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目前对矩阵是有一层托管的,不过在core profile里面就没有了,当然可以采用glGetFloatv( GL_MODELVIEW_MATRIX, matrix );这样的函数来验证其正确性。目前我是这么做的,而且我参考了Qt中关于矩阵运算的代码,发现它们平移后都要对原来矩阵做一次左乘。其他可以参考代码的地方有Bullet源代码以及Assimp源代码。