社区
游戏开发
帖子详情
如何自己实现D3DXMatrixRotationAix和D3DXMatrixRotationYawPitchRoll??
lyzcom
2003-11-27 11:43:44
如何自己实现这两个函数的功能?要完全和D3DX库的这两个函数实现的功能一样。
因为我数学不太好,弄这两个函数三天了,但是总是有问题。不是有偏差就是完全不对。哪位大哥帮帮忙吧,我实在不行了。
另外,能不能推荐一本专门讲3D数学与物理学的书?我只要有一本这样的参考书就可以马上学上来,毕竟数学基本不是很差。
...全文
194
1
打赏
收藏
如何自己实现D3DXMatrixRotationAix和D3DXMatrixRotationYawPitchRoll??
如何自己实现这两个函数的功能?要完全和D3DX库的这两个函数实现的功能一样。 因为我数学不太好,弄这两个函数三天了,但是总是有问题。不是有偏差就是完全不对。哪位大哥帮帮忙吧,我实在不行了。 另外,能不能推荐一本专门讲3D数学与物理学的书?我只要有一本这样的参考书就可以马上学上来,毕竟数学基本不是很差。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ttmmdd
2003-11-27
打赏
举报
回复
推荐"线性代数"和"计算机图型学"(电子工业出版社的?就是从老外的教材翻译的那个)
我手上只有轴角<->四元式 欧拉角<->四元式 矩阵(行矩阵 3列X4行 )<->四元式的转换的代码.
你可以再参考下网上3DMAX的开原部分,和网上的一些3D引擎.
附代码
void Quat::ConvertFromEulerAngle(const float fYaw,const float fPitch,const float fRoll)
{
float fSinYaw = sinf( fYaw/2.0f );
float fSinPitch = sinf( fPitch/2.0f );
float fSinRoll = sinf( fRoll/2.0f );
float fCosYaw = cosf( fYaw/2.0f );
float fCosPitch = cosf( fPitch/2.0f );
float fCosRoll = cosf( fRoll/2.0f );
x = fSinRoll * fCosPitch * fCosYaw - fCosRoll * fSinPitch * fSinYaw;
y = fCosRoll * fSinPitch * fCosYaw + fSinRoll * fCosPitch * fSinYaw;
z = fCosRoll * fCosPitch * fSinYaw - fSinRoll * fSinPitch * fCosYaw;
w = fCosRoll * fCosPitch * fCosYaw + fSinRoll * fSinPitch * fSinYaw;
}
void Quat::ConvertFromMatrix(const Matrix3 &mat)
{
float tr, su;
int i;
tr=mat.m[0][0]+mat.m[1][1]+mat.m[2][2];
if(tr>0)
{
su = sqrtf(tr + 1.0f);
w = 0.5f * su;
su =0.5f/su;
x = (mat.m[2][1] - mat.m[1][2]) * su;
y = (mat.m[0][2] - mat.m[2][0]) * su;
z = (mat.m[1][0] - mat.m[0][1]) * su;
}
else
{
i =0;
if(mat.m[1][1] > mat.m[0][0]) i = 1;
if(mat.m[2][2] > mat.m[i][i]) i = 2;
switch (i)
{
case 0:
su = sqrtf((mat.m[0][0] - (mat.m[1][1] + mat.m[2][2])) + 1);
x = 0.5f * su;
su =0.5f/su;
y = (mat.m[0][1] + mat.m[1][0]) * su;
z = (mat.m[2][0] + mat.m[0][2]) * su;
w=(mat.m[2][1] - mat.m[1][2]) * su;
break;
case 1:
su = sqrtf((mat.m[1][1] - (mat.m[2][2] + mat.m[0][0])) + 1);
y = 0.5f*su;
su = 0.5f/su;
z = (mat.m[1][2] + mat.m[2][1]) * su;
x = (mat.m[0][1] + mat.m[1][0]) * su;
w = (mat.m[0][2] - mat.m[2][0]) * su;
break;
case 2:
su = sqrtf((mat.m[2][2]-(mat.m[0][0]+mat.m[1][1]))+1);
z=0.5f*su;
su=0.5f/su;
x = (mat.m[2][0]+mat.m[0][2]) * su;
y = (mat.m[1][2]+mat.m[2][1]) * su;
w = (mat.m[1][0]-mat.m[0][1]) * su;
break;
}
}
}
void Quat::ConvertToMatrix ( Matrix3 &tm)
{
float xx = x*x; float yy = y*y; float zz = z*z;
float xy = x*y; float xz = x*z; float yz = y*z;
float wx = w*x; float wy = w*y; float wz = w*z;
tm.m[0][0] = 1 - 2 * ( yy + zz );
tm.m[0][1] = 2 * ( xy - wz );
tm.m[0][2] = 2 * ( xz + wy );
tm.m[1][0] = 2 * ( xy + wz );
tm.m[1][1] = 1 - 2 * ( xx + zz );
tm.m[1][2] = 2 * ( yz - wx );
tm.m[2][0] = 2 * ( xz - wy );
tm.m[2][1] = 2 * ( yz + wx );
tm.m[2][2] = 1 - 2 * ( xx + yy );
tm.m[3][0] = tm.m[3][1] = tm.m[3][2] = 0.0f;
}
void Quat::ConvertToAxisAngle (Point3 &vector ,float & angle )
{
float fTheta = acosf(w) * 2.0f;
vector.x = x / sinf( fTheta/2.0f );
vector.y = y / sinf( fTheta/2.0f );
vector.z = z / sinf( fTheta/2.0f );
angle=fTheta;
}
void Quat::ConvertFromAxisAngle(Point3 &vector , float & angle )
{
this->w=cosf (angle/2.0f);
this->x=sinf(angle/2.0f)*vector.x;
this->y=sinf(angle/2.0f)*vector.y;
this->z=sinf(angle/2.0f)*vector.z;
}
d3.min.js d3.js
D3.js 的两个主要文件,`d3.min.js`和`d3.js`,都是
实现
这一功能的关键。 `d3.min.js`是D3.js的压缩版本,它包含了所有D3的功能,但体积更小,适合在生产环境中使用,以提高网页加载速度。而`d3.js`则是未压缩的源...
【已解决】计算机丢失d
3d
12.dll怎么办?d
3d
12.dll加载失败怎么办
d
3d
12.dll加载失败怎么办?如果你在使用电脑时遇到D
3D
12.dll文件丢失了,不用着急,使用小编带来的这款D
3D
12.dll文件修复工具就能轻松解决问题了。D
3D
12.dll是存放在windows系统中至关重要的dll文件,缺少该文件可能...
【已解决】d
3d
rm.dll放在哪里?d
3d
rm.dll文件下载地址在哪?
d
3d
rm.dll文件下载地址在哪?d
3d
rm.dll是电脑内十分重要的文件,它的丢失易导致游戏、应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好d
3d
rm.dll文件,放置在对应系统的...
D3js快速入门——用最新版D3js
实现
树图
怎么用 D3.js 开发一个树图3.1 前置基础3.2 d3开发树图流程3.3 动手
实现
一个树图3.3.1 普通tide tree3.3.2 你的树图不简单—— radio tide tree3.3.3 更多可能——更多类型的树图 引言 上周我们组新开项目,技术...
D
3D
X
Matrix
Rotation
YawPitchRoll
函数
D
3D
X
Matrix
Rotation
YawPitchRoll
函数用指定的绕Y轴角度,绕X轴角度和Z轴角度创建旋转矩阵。定义:D
3D
X
MATRIX
*WINAPI D
3D
X
Matrix
Rotation
YawPitchRoll
( D
3D
X
MATRIX
*pOut, FLOAT Yaw, FLOAT Pitch, FLOAT...
游戏开发
8,325
社区成员
23,684
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章