游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1724|回复: 3

向量 矩阵左乘的错误

[复制链接]

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-4-13 16:40:00 | 显示全部楼层 |阅读模式
我用微软提供的D3DXVec3TransformCoord函数和自己手工计算向量左乘矩阵,算出来的东西不一样,请大家看一下我的错误在哪里呢?

//VB[iCur].Pos:顶点缓冲区中待写入的当前顶点,D3DXVECTOR3型。
//VInit[iCur].Pos:当前顶点的初始位置,D3DXVECTOR3型。
//mat:转换矩阵
//目的是将 VInit[iCur].Pos 左乘 mat 矩阵后存放到 VB[iCur].Pos中

方式一、
D3DXVec3TransformCoord(&(VB[iCur].Pos),&(VInit[iCur].Pos),&mat);

方式二、
D3DXVECTOR3 P=VInit[iCur].Pos;
P.x=mat(0,0)*P.x+mat(1,0)*P.y+mat(2,0)*P.z+mat(3,0);
P.y=mat(0,1)*P.x+mat(1,1)*P.y+mat(2,1)*P.z+mat(3,1);
P.z=mat(0,2)*P.x+mat(1,2)*P.y+mat(2,2)*P.z+mat(3,2);
VB[iCur].Pos=P;

[em7] [em7] [em7] [em7]

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
 楼主| 发表于 2005-4-13 16:43:00 | 显示全部楼层

Re:向量 矩阵左乘的错误

高手们顶啊

11

主题

114

帖子

118

积分

注册会员

Rank: 2

积分
118
QQ
发表于 2005-4-13 17:14:00 | 显示全部楼层

Re:向量 矩阵左乘的错误

太粗心了,方式二中,
P.x=mat(0,0)*P.x+mat(1,0)*P.y+mat(2,0)*P.z+mat(3,0);
//P.x已经改变
P.y=mat(0,1)*P.x+mat(1,1)*P.y+mat(2,1)*P.z+mat(3,1);
//P.y的计算用了改变后的P.x,结果肯定错
P.z=mat(0,2)*P.x+mat(1,2)*P.y+mat(2,2)*P.z+mat(3,2);

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
 楼主| 发表于 2005-4-13 18:30:00 | 显示全部楼层

Re:向量 矩阵左乘的错误

是啊!说得太对了!谢谢DrawPixel!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 06:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表