D3D中模型旋转问题

姚小白 2016-08-04 02:40:47
假设旋转使用下面代码:

问题:
绕X轴旋转yaw角度后,再绕Y轴旋转pitch角度。但是发现绕X轴旋转之后,其实Y轴也已经改变了,不再是初始的时候平行于屏幕的Y轴,现在Y轴应该是垂直于XoZ平面,也就是说和屏幕有个角度。
但我想要的结果是绕X旋转之后,Y轴 ,Z轴都会倾斜,三个轴都是原来的状态,然后再绕Y轴旋转。请问这样要怎么实现
...全文
714 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
IONPhantom 2018-11-09
  • 打赏
  • 举报
回复
先绕Y旋转再绕X旋转,也就是获取XYZ3个轴的旋转矩阵之后这样乘
RotationY*RotationX*RotationZ,这是FPS/FreeCamera的基本特性
shiter 2016-08-06
  • 打赏
  • 举报
回复
这个难道不能直接传个旋转轴进去,省的你一个一个算
姚小白 2016-08-06
  • 打赏
  • 举报
回复
引用 2 楼 wangyaninglm 的回复:
这个难道不能直接传个旋转轴进去,省的你一个一个算
D3DXVECTOR3 vX(1,0,0);
	D3DXVECTOR3 vY(0,1,0);
	D3DXVECTOR3 vZ(0,0,1);

	D3DXMATRIX matX,matY,matZ;
	D3DXMatrixRotationAxis(&matX,&vX,yaw);
	D3DXMatrixRotationAxis(&matY,&vY,pitch);
	D3DXMatrixRotationAxis(&matZ,&vZ,0);

	D3DXMATRIX matWorld;
	D3DXMatrixMultiply(&matWorld, &matX, &matY);
	D3DXMatrixMultiply(&matWorld, &matWorld, &matZ);
这样?
赵4老师 2016-08-04
  • 打赏
  • 举报
回复
Physics Modelling for Game Programmers 游戏编程的物理建模(文删节版) 后记】 我将这本书界定成 3D 游戏开发的入门书籍,其实一直来我都有一个疑问,起初的时候我看 了很多 3D 开发方面的书籍也做了一些例子程序,但是对 3D开发还是有许多未知,自从我 见到这书以后,我终于明白我缺少的是什么了?其实就是需要一条线把我所学过的这些知识 全部串起来,反观当下无论是纸皮书还是电子书往往都是将 3D 开发分成若干块,专门讲一 块或是几块,开发是一个整体,所以我看了那么多书似乎前面还是有一层纱捅不破。 如果你是个新手,那绝对在此书会找到很多你感兴趣的东西,如果对于 DirectX 你已经足够 了解但就是不知从何开始,这本书可以整理你的思路,带你走出山谷奔向另一座高峰。 大概因为作者是一名老师的缘故,论述有些拖泥带水,文涉及到的 c++以及 Direct3D 基 础知识我都没有翻出,我相信你轻易就能找到相应的替代品,对于 15 章和 16 章的实例分 析没有翻,我想任何具备高物理程度的人都不难推导出这些公式,所以传言说老外的应用 科学的普及教育做得奇差,大概是真的。 本书只能作为免费传播,请勿用于商业,谢谢,最后我非常希望我的努力能换来你的赞许, 如果真是这样,那我将会很荣幸! 底层模式:HAL 和HEL(删除) 高层模式:DirectX 组件(删除) COM对象(删除) 使用DirectX 初始化 DirectX 的硬件方法 使用DirectX 向导初始化 Direct3D 使用物理建模框架初始化 Direct3D 小结(删除) 第三节:3D 编程和物理学的数学工具(删除) 三角几何(删除) 2D坐标系(删除) 3D和4D坐标系(删除) 物理单位(删除) 矢量 代码实现的矢量:物理建模的数学库 矢量与标量的乘除法 点积 叉积 单位化矢量 投影 Direct3D 的矢量 矩阵 特性 加法和减法 乘法和除法 矩阵相乘 转置 行列式 逆矩阵 小结(删除) 第四节:2D 变换和渲染 2D变换 主动和被动变换 平移 旋转 缩放 组合变换 变换实现:一个三角形的自旋 使用物理建模的框架 设定几何体 更新帧(Frame) 渲染帧 将所有的步骤放置到一起(删除) 小结(删除) 第五节:3D 变换和渲染 3D变换 齐次坐标 平移 缩放 旋转 3D管道 局部坐标转世界坐标 世界坐标转观察坐标 观察坐标转投影坐标 投影坐标转屏幕坐标 3D渲染 例子1:3D 自旋三角形 例子2:自旋的圆椎 小结(删除) 第六节:网格(Mesh)和 X 文件 纹理 从文件创建纹理 设定纹理 材质 装载一个网格 获取纹理和材质 渲染网格 清除网格 d3d_mesh类 载入一个网格 渲染一个网格 d3d_mesh类的引用计数 小结(删除) 第二部分:3D 对象,运动和碰撞 第七节:动态粒子 点状粒子 一维运动力学 速度(删除) 速度的导数求法(删除) 加速度(删除) 力 2D 和 3D 运动力学(删除) 质点模型 介绍d3d_point_mass类 使用d3d_point_mass类 游戏的质点 小结(删除) 第八节:粒子碰撞 碰撞检测 包围球 包围圆柱 包围盒 空间分隔的优化 碰撞响应 动量守恒 能量 弹性碰撞 刚性碰撞 补偿系数 2D和3D 的粒子碰撞 球的碰撞 实现 小结(删除) 第九节:刚体动力 刚体 重心 2D 刚体旋转 2D 刚体的粒子 转矩和惯性力矩 3D刚体 3D转矩 3D 的平行轴定理 主轴线 定向 3D 刚体的实现 d3d_rigid_body类 初始化 d3d_rigid_body对象 更新d3d_rigid_body对象 渲染d3d_rigid_body对象 小结(删除) 第十节:刚体碰撞 碰撞检测 粗糙近似 碰撞检测的改进 碰撞响应 线性碰撞响应 角度碰撞响应 组合碰撞响应 更新物理建模框架 小结(删除) 第十一节:重力和抛射体 牛顿万有引力法则 抛射体轨迹 抛射体运动模型 冲力与恒力之间的差异 滚动 小结(删除) 第十二节:质量与弹力系统 实现弹力所需的事 头发与马尾辫 织物 一切从周期运动开始 胡克定律 衰减周期运动 实现织物 升级质点 弹力 织物类 初始化织物 更新和渲染织物 进行调整 增加织物的表现力 小结(删除) 第十三节:水体与波纹 水体与浮力 水的特性 浮力产生的原理 求取压强和密度 运动阻力 对摩擦力的观察 粘性阻力 水体的流向 波 实现水体 低开销实现的技巧 3D水体 在水体放置对象 为刚体增加浮力 它会浮起来吗? 小结(删除) 第三部分:3D 模拟 第十四节:为游戏开发需做的准备 重新设计物理建模的框架 简单程序的初始化 添加一个游戏类 设置高效的矩阵变换 恢复丢失的设备对象 使用质点重新定义刚体 网格原点和重心 DirectInput 介绍(删除) 初始化 DirectInput(删除) 获取键盘和鼠标输入(删除) 关闭DirectInput(删除) DirectX 的摄像机运动(删除) 小结(删除) 第十五节:汽车,气垫船,船只以及小舟(删除整章) 汽车 能量,力,加速度和摩擦 车辆的空气阻力 制动 车辆拐弯 实现一个基本的车辆模型 气垫船和无引力飞船 气垫船是如何工作的 气垫船的空气阻力 气垫船拐弯 船只和小舟 船只和小舟的包围边界 船体容积的计算 船只和小舟的续航能力 质量和有效质量 阻力和小舟 空气阻力 流速和波 小结 第十六节:飞机和宇宙飞船(删除整章) 飞行模拟的简单方法 低空飞行或是无物理影响 实现一个简单的飞行模拟 与飞机相关的物理学 飞机的主要部件 基本的动力 飞机建模:具备适合的地点和动力 与宇宙飞船相关的物理学 宇宙的空战 火箭 月球着陆器 其他行星已知的物理学 其他行星待论证的物理学 结束语(删除) 附录 A 术语(删除) 附录 B C++的一个简明介绍(删除) 附录 C window编程基础(删除) 索引(删除)
目录: 第Ⅰ部分 基础知识 必备的数学知识 3D空间的向量 向量相等 计算向量的长度 向量的规范化 向量加法 向量减法 数乘 点积 叉积 矩阵 矩阵相等、矩阵数乘和矩阵加法 矩阵乘法 单位矩阵 逆矩阵 矩阵的转置 D3DX矩阵 基本变换 平移矩阵 旋转矩阵 比例变换矩阵 几何变换的组合 向量变换的一些函数 平面(选读) D3DXPLANE 点和平面的空间关系 平面的创建 平面的规范化 平面的变换 平面到某一点的最近点 射线(选读) 射线 射线与平面的相交 小结    第Ⅱ部分 Direct3D基础 第1章 初始化Direct3D 1.1 Direct3D概述 1.1.1 REF设备 1.1.2 D3DDEVTYPE 1.2 COM(组件对象模型) 1.3 预备知识 1.3.1 表面 1.3.2 多重采样 1.3.3 像素格式 1.3.4 内存池 1.3.5 交换链和页面置换 1.3.6 深度缓存 1.3.7 顶点运算 1.3.8 设备性能 1.4 Direct3D的初始化 1.4.1 获取接口IDirect3D9的指针 1.4.2 校验硬件顶点运算 1.4.3 填充D3DPRESENT_PARAMETER结构 1.4.4 创建IDirect3DDevice9 接口 1.5 例程:Direct3D的初始化 1.5.1 d3dUtility.h/cpp 1.5.2 例程框架 1.5.3 例程:D3D初始化 1.6 小结 第2章 绘制流水线 2.1 模型表示 2.1.1 顶点格式 2.1.2 三角形单元 2.1.3 索引 2.2 虚拟摄像机 2.3 绘制流水线 2.3.1 局部坐标系 2.3.2 世界坐标系 2.3.3 观察坐标系 2.3.4 背面消隐 2.3.5 光照 2.3.6 裁剪 2.3.7 投影 2.3.8 视口变换 2.3.9 光栅化 2.4 小结 第3章 Direct3D的绘制 3.1 顶点缓存与索引缓存 3.1.1 创建顶点缓存和索引缓存 3.1.2 访问缓存内容 3.1.3 获取顶点缓存和索引缓存的信息 3.2 绘制状态 3.3 绘制的准备工作 3.4 使用顶点缓存和索引缓存进行绘制 3.4.1 IDirect3DDevice9::DrawPrimitive 3.4.2 IDirect3DDevice9::DrawIndexedPrimitive 3.4.3 Begin/End Scene 3.5 D3DX几何体 3.6 例程:三角形、立方体、茶壶、D3DXCreate* 3.7 小结 第4章 颜色 4.1 颜色表示 4.2 顶点颜色 4.3 着色 4.4 例程:具有颜色的三角形 4.5 小结 第5章 光照 5.1 光照的组成 5.2 材质 5.3 顶点法线 5.4 光源 5.5 例程:光照 5.6 一些附加例程 5.7 小结 第6章 纹理映射 6.1 纹理坐标 6.2 创建并启用纹理 6.3 纹理过滤器 6.4 多级渐进纹理 6.4.1 多级渐进纹理过滤器 6.4.2 使用多级渐进纹理 6.5 寻址模式 6.6 例程:纹理四边形 6.7 小结 第7章 融合技术 7.1 融合方程 7.2 融合因子 7.3 透明度 7.3.1 Alpha通道 7.3.2 指定Alpha来源 7.4 用DirectX Texture Tool 创建Alpha通道 7.5 例程:透明效果 7.6 小结 第8章 模板 8.1 模板缓存的使用 8.1.1 模板缓存格式的查询 8.1.2 模板测试 8.1.3 模板测试的控制 8.1.4 模板缓存的更新 8.1.5 模板写掩码 8.2 例程:镜面效果 8.2.1 成像的数学问题 8.2.2 镜面效果实现概述 8.2.3 代码解析 8.3 例程:Planer Shadows 8.3.1 平行光阴影 8.3.2 点光源产生的阴影 8.3.3 阴影矩阵 8.3.4 使用模板缓存防止二次融合 8.3.5 代码解析 8.4 小结 第Ⅲ部分 Direct3D的应用 第9章 字体 9.1 ID3DXFont接口 9.1.1 创建一个ID3DXFont 接口对象 9.1.2 绘制文本 9.1.3 计算每秒绘制的帧数 9.2 CD3DFont 9.2.1 创建CD3DFont类的实例 9.2.2 绘制文本 9.2.3 清理 9.3 D3DXCreateText函数 9.4 小结 第10章 网格(一) 10.1 几何信息 10.2 子集和属性缓存 10.3 绘制 10.4 网格优化 10.5 属性表 10.6 邻接信息 10.7 克隆 10.8 创建网格(D3DXCreateMeshFVF) 10.9 例程:网格的创建与绘制 10.10 小结 第11章 网格(二) 11.1 ID3DXBuffer 11.2 XFile 11.2.1 加载XFile文件 11.2.2 XFile材质 11.2.3 例程:XFile 11.2.4 生成顶点法线 11.3 渐进网格 11.3.1 生成渐进网格 11.3.2 顶点属性权值 11.3.3 ID3DXPMesh接口方法 11.3.4 例程:Progressive Mesh 11.4 外接体 11.4.1 一些新的特殊常量 11.4.2 外接体的类型 11.4.3 例程:Bounding Volumes 11.5 小结 第12章 设计一个灵活的Camera类 12.1 Camera类的设计 12.2 实现细节 12.2.1 观察矩阵(取景变换矩阵, View Matrix)的计算 12.2.2 绕任意轴的旋转 12.2.3 俯仰、偏航和滚动 12.2.4 行走、扫视和升降 12.3 例程:Camera 12.4 小结 第13章 地形绘制基础 13.1 高度图 13.1.1 创建高度图 13.1.2 加载RAW文件 13.1.3 访问和修改高度图 13.2 创建地形几何信息 13.2.1 顶点的计算 13.2.2 索引的计算 13.3 纹理映射 13.4 光照 13.4.1 概述 13.4.2 坐标方格的明暗度计算 13.4.3 对地形进行着色 13.5 在地形“行走” 13.6 例程:Terrain 13.7 一些改进 13.8 小结 第14章 粒子系统 14.1 粒子和点精灵 14.1.1 结构格式 14.1.2 点精灵的绘制状态 14.1.3 粒子及其属性 14.2 粒子系统的组成 14.2.1 绘制一个粒子系统 14.2.2 随机性 14.3 具体的粒子系统 14.3.1 例程:Snow System 14.3.2 例程:Firework 14.3.3 例程:Particle Gun 14.4 小结 第15章 拾取 15.1 屏幕到投影窗口的变换 15.2 拾取射线的计算 15.3 对射线进行变换 15.4 射线/物体相交判定 15.5 例程:Picking 15.6 小结

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧