社区
游戏开发
帖子详情
dirextx 如何计算mesh旋转后的包围盒的坐标
hh23
2009-04-02 09:28:40
通过ComputeBoundingBox能够得到初始状态的min,max向量。但当z轴选择a度后min,max如何计算?
...全文
136
4
打赏
收藏
dirextx 如何计算mesh旋转后的包围盒的坐标
通过ComputeBoundingBox能够得到初始状态的min,max向量。但当z轴选择a度后min,max如何计算?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ProgramRookie
2009-04-28
打赏
举报
回复
直接用变换阵乘包围盒是绝对错误的,自己画下就知道变换后模型很可能会不在包围盒内,应该先变换所得到的包围盒八个顶点,再从这8个顶点中计算出一个新的包围盒:
实例:
void SelfDefObj::CalculateBoundingBoxInWorld(){
D3DXVECTOR3 tmpMin, tmpMax;
D3DXVECTOR3 modelMin, modelMax;
this->m_worldAABB.GetDetails( tmpMax, tmpMin );
this->m_modelAABB.GetDetails( modelMax, modelMin );
//先获取平移量
tmpMin = tmpMax = D3DXVECTOR3( this->m_pMotelToWorld->_41, this->m_pMotelToWorld->_42, this->m_pMotelToWorld->_43 );
//再获取旋转缩放的变化
if( this->m_pMotelToWorld->_11 > 0.0f ){
tmpMin.x += this->m_pMotelToWorld->_11 * modelMin.x;
tmpMax.x += this->m_pMotelToWorld->_11 * modelMax.x;
}
else{
tmpMin.x += this->m_pMotelToWorld->_11 * modelMax.x;
tmpMax.x += this->m_pMotelToWorld->_11 * modelMin.x;
}
if( this->m_pMotelToWorld->_12 > 0.0f ){
tmpMin.y += this->m_pMotelToWorld->_12 * modelMin.y;
tmpMax.y += this->m_pMotelToWorld->_12 * modelMax.y;
}
else{
tmpMin.y += this->m_pMotelToWorld->_12 * modelMax.y;
tmpMax.y += this->m_pMotelToWorld->_12 * modelMin.y;
}
if( this->m_pMotelToWorld->_13 > 0.0f ){
tmpMin.z += this->m_pMotelToWorld->_13 * modelMin.z;
tmpMax.z += this->m_pMotelToWorld->_13 * modelMax.z;
}
else{
tmpMin.z += this->m_pMotelToWorld->_13 * modelMax.z;
tmpMax.z += this->m_pMotelToWorld->_13 * modelMin.z;
}
if( this->m_pMotelToWorld->_21 > 0.0f ){
tmpMin.x += this->m_pMotelToWorld->_21 * modelMin.x;
tmpMax.x += this->m_pMotelToWorld->_21 * modelMax.x;
}
else{
tmpMin.x += this->m_pMotelToWorld->_21 * modelMax.x;
tmpMax.x += this->m_pMotelToWorld->_21 * modelMin.x;
}
if( this->m_pMotelToWorld->_22 > 0.0f ){
tmpMin.y += this->m_pMotelToWorld->_22 * modelMin.y;
tmpMax.y += this->m_pMotelToWorld->_22 * modelMax.y;
}
else{
tmpMin.y += this->m_pMotelToWorld->_22 * modelMax.y;
tmpMax.y += this->m_pMotelToWorld->_22 * modelMin.y;
}
if( this->m_pMotelToWorld->_23 > 0.0f ){
tmpMin.z += this->m_pMotelToWorld->_23 * modelMin.z;
tmpMax.z += this->m_pMotelToWorld->_23 * modelMax.z;
}
else{
tmpMin.z += this->m_pMotelToWorld->_23 * modelMax.z;
tmpMax.z += this->m_pMotelToWorld->_23 * modelMin.z;
}
if( this->m_pMotelToWorld->_31 > 0.0f ){
tmpMin.x += this->m_pMotelToWorld->_31 * modelMin.x;
tmpMax.x += this->m_pMotelToWorld->_31 * modelMax.x;
}
else{
tmpMin.x += this->m_pMotelToWorld->_31 * modelMax.x;
tmpMax.x += this->m_pMotelToWorld->_31 * modelMin.x;
}
if( this->m_pMotelToWorld->_32 > 0.0f ){
tmpMin.y += this->m_pMotelToWorld->_32 * modelMin.y;
tmpMax.y += this->m_pMotelToWorld->_32 * modelMax.y;
}
else{
tmpMin.y += this->m_pMotelToWorld->_32 * modelMax.y;
tmpMax.y += this->m_pMotelToWorld->_32 * modelMin.y;
}
if( this->m_pMotelToWorld->_33 > 0.0f ){
tmpMin.z += this->m_pMotelToWorld->_33 * modelMin.z;
tmpMax.z += this->m_pMotelToWorld->_33 * modelMax.z;
}
else{
tmpMin.z += this->m_pMotelToWorld->_33 * modelMax.z;
tmpMax.z += this->m_pMotelToWorld->_33 * modelMin.z;
}
this->m_worldAABB.SetDetails( tmpMax, tmpMin );
}
饭团大暴走
2009-04-03
打赏
举报
回复
[Quote=引用 1 楼 P_hantom 的回复:]
先把模型进行坐标变换,每个顶点的位置就发生变化了,然后再用ComputeBoundingBox
[/Quote]
或者
[Quote=引用 2 楼 zhangci226 的回复:]
一样的,mesh模型旋转或移动时,都是乘以旋转或位移矩阵
把这个矩阵同样乘以包围盒的坐标就可以了
[/Quote]
张赐
2009-04-02
打赏
举报
回复
一样的,mesh模型旋转或移动时,都是乘以旋转或位移矩阵
把这个矩阵同样乘以包围盒的坐标就可以了
IONPhantom
2009-04-02
打赏
举报
回复
先把模型进行坐标变换,每个顶点的位置就发生变化了,然后再用ComputeBoundingBox
Di
rectX天空球和天空
盒
子模型
在一些大型的3D游戏中,有几个必不可少的元素,比如说天空和大地,这些元素的存在可以增加3D场景的真实感。三维场景中天空和大地场景的模拟其实很简单,这种场景跟古人所说的“天圆地方”有着异曲同工之妙。天空其实就是一个很大的容器,把整个世界都罩在下面,大地就是一个平面,场景中所有的元素都显示在二者所
包围
的空间中。三维天空的技术主要包括三种类型:一种是平面型天空(Sky Plane),仅用一个平面盖在所有
第七章
Di
rectX 数学向量,碰撞检测和粒子系统(上)
数学不仅在游戏开发中,甚至在整个软件编程行业中,都占据了非常重要的位置。如果没有数学,那么
计算
机编程不会得到快速的发展。软件编程的本质就是处理数据,这种处理很大程度上取决于算法,而算法的本质就是数学。游戏开发中使用最多的就是几何数学。
坐标
系是游戏开发中最基础的概念,包括2D
坐标
系和3D
坐标
系,其实就是维度的不同。2D
坐标
系就是x/y两个维度,它与我们的电脑/手机屏幕是一致的。3D
坐标
系则是由x/y/z三个维度构成,z维度其实就是垂直我们的电脑/手机屏幕向里或向外的方向。3D
坐标
系分为左手
坐标
系和右手
坐标
系,
从图形学认识Unity中的
Mesh
从图形学的角度,认识 Unity中的
Mesh
。如果你想深入学习,还有相关的扩展资料。
Di
rectx3d绘制
包围
体并控制光照效果
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Mi...
第一章
Di
rectX
计算
机图形学(上)
计算
机图形学是一种使用数学算法将二维或三维图形转化为
计算
机显示器的栅格形式(像素单位)的科学。
计算
机图形学的研究对象是图形(3D模型),我们需要使用这些图形来模拟现实世界的物体。构成图形的要素有两类,一是形状的点线面等几何要素,二是反映物体表面的属性,如颜色等非几何要素。在
计算
机中表示图形的方法通常有三种:线框,表面和实体。线框模型采用点和线的集合来描述三维图形。线框模型的优点就是结构简单,缺点不能表示物体的表面。表面模型在线框模型的基础上,增加了物体面的信息,用面的集合来表示三维图形。表面模型又分为平面模
游戏开发
8,324
社区成员
23,684
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章