社区
游戏开发
帖子详情
如何自己实现D3DXMatrixRotationAix和D3DXMatrixRotationYawPitchRoll??
lyzcom
2003-11-27 11:43:44
如何自己实现这两个函数的功能?要完全和D3DX库的这两个函数实现的功能一样。
因为我数学不太好,弄这两个函数三天了,但是总是有问题。不是有偏差就是完全不对。哪位大哥帮帮忙吧,我实在不行了。
另外,能不能推荐一本专门讲3D数学与物理学的书?我只要有一本这样的参考书就可以马上学上来,毕竟数学基本不是很差。
...全文
202
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.min.js 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文件修复工具就能轻松解决问题了。D
3D
12.dll是存放在windows系统中至关重要的dll文件,缺少该文件可能会对造成系统不能正常运行或部分游戏无法正常运行。当你的电脑弹出“计算机中丢失D
3D
12.dll”或者“D
3D
12.dll加载失败”等错误提示时,来下载小编带来的这款文件修复就好了,欢迎需要的朋友来下载使用。 D
3D
12.dll丢
【已解决】d
3d
rm.dll放在哪里?d
3d
rm.dll文件下载地址在哪?
d
3d
rm.dll放在哪里?d
3d
rm.dll文件下载地址在哪?d
3d
rm.dll是电脑内十分重要的文件,它的丢失易导致游戏、应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好d
3d
rm.dll文件,放置在对应系统的目录下面,运行补丁即可让程序正常运行它是一个电脑系统中必不可少、非常重要的dll文件,对于系统来说缺少相关文件至关重要,这时此dll文件就派上用场了若你的电脑不小心丢失了这个文件那可就麻烦了。 d
3d
rm.dll找不到的解决方法 1、从本站下载d
3d
rm
D3js快速入门——用最新版D3js
实现
树图
文章目录:引言1. D3js 是什么2. D3js 相对其他数据可视化方案的优势2.1 SVG 对比 Canvas2.2 D3.js 对比 Echarts3. 怎么用 D3.js 开发一个树图3.1 前置基础3.2 d3开发树图流程3.3 动手
实现
一个树图3.3.1 普通tide tree3.3.2 你的树图不简单—— radio tide tree3.3.3 更多可能——更多类型的树图 引言 上周我们组新开项目,技术调研之后决定使用 d3.js 做数据可视化开发,mentor让我来做初期技术调研,之后的技
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 Roll);
游戏开发
8,324
社区成员
23,684
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章