|

楼主 |
发表于 2009-9-3 10:04:00
|
显示全部楼层
Re: 懂解析3DS文件头0X4160处理的朋友进!请教!
先自己顶起来 。
我自己参照3DSLIB开源库的写的处理方法也是不行,而且我对这个库的转化方法感觉有点问题:
其中3DSLIB方法如下:
float inv_matrix[4][4], M[4][4];
lib3ds_matrix_copy(inv_matrix, mesh->matrix);//mesh->matrix就是该3DS读取的转换矩阵。其中,U,V,N,0按行存储
float tmp[3];
lib3ds_matrix_inv(inv_matrix);//求转换矩阵的逆矩阵
lib3ds_matrix_copy(M, mesh->matrix);
lib3ds_matrix_scale(M, -1.0f, 1.0f, 1.0f);//将M矩阵的第一行取反
lib3ds_matrix_mult(M, M, inv_matrix);//M=M*inv_matrix; M即为最后的转换矩阵
for (i = 0; i < mesh->nvertices; ++i) {
lib3ds_vector_transform(tmp, M, mesh->vertices);//对顶点进行转化
lib3ds_io_write_vector(io, tmp);
}
我觉得他的问题在于:
M是最后求得的转化矩阵。现在对M进行数学推导:
M=M*inv_matrix --->M= -1*(mesh->matrix)*inv_matrix; 其中-1为一对角矩阵,a00为-1,其他对角元素全为1. inv_matrix与mesh->matrix互为逆矩阵
-----------》M=-1*1=-1(-1为一对角矩阵,a00为-1,其他对角元素全为1)
那么这个最终M矩阵就是这么一个对角矩阵,这个变化矩阵的作用就是使顶点数据的x坐标全部取反而已。
如果仅仅这么做,那也没必要如此费力的推出M。
还是我理解有错。
需要大家的点拨。。
小弟急啊
|
|