第 18卷 第 3期 2009年 9月
计 算 机 辅 助 工 程 Computer A ided Engineering
Vol . 18No . 3Sep t . 2009
文章编号 :1006-0871(2009 0320083204
基于平面的三维空间物体任意点移动算法
宋继红 , 李凤龙 , 徐全生
(沈阳工业大学 信息科学与工程学院 , 沈阳 110178
摘 要 :为优化虚拟三维管理领域的物体移动操作 , 实现利用鼠标完成物体在三维空间中任意点
的移动过程 , 引入可移动平面的概念 , 在三维空间建立垂直于视线在 xz 平面投影的可移动平面 ; 建 立 1条从摄像机位置到鼠标位置的射线 , 由鼠标滚轮控制可移动平面在视线方向上的前后移动 ; 通 过移动可移动平面 , 使鼠标射线与可移动平面的交点可以到达三维空间中的任意位置 ; 计算射线与 可移动平面的交点坐标 , 将其作为待移动物体新坐标放入渲染流水线 , 从而完成物体移动 . 用表明 , . 关键词 :D irect X; 可移动平面 ; 三维移动 ; 鼠标射线 ; 中图分类号 :TP317. 4; TP391. 73 a lgor ith m of objects i n
3D space ba sed on pl ane
S ONG J ihong, L I Fengl ong, XU Quansheng
(I nfo . Sci . &Eng . College, Shenyang Univ . of Tech . , Shenyang 110178, China
Abstract:To op ti m ize the operati on of move ment of objects in virtual 3D manage ment field and realize the p r ocess of using mouse t o comp lete the object move ment t o any point in 3D s pace, the concep t of movable p lane is intr oduced int o the study . A movable p lane is built that is per pendicular t o the p r ojecti on of sightline in xz p lane; a radial fr om ca mera positi on t o mouse point is built and the mouse wheel is used t o contr ol the f or ward and back ward move ment of the movable p lane al ong the sightline directi on; the intersecti on point of the mouse radial and the movable p lane can be moved t o any positi on in 3D s pace by moving the moveable p lane; the coordinate of the intersecti on point of the radial and the moving p lane is calculated, taken as the ne w coordinate of the object t o be moved which is added int o the r omance p i peline, and the object move ment can be i m p le mented . The app licati on shows that the
algorith m can ensure the move ment accuracy and s peed of the objects and reduce the input devices that
hel p t o move objects .
Key words:D irect X; movable p lane; 3D moving; mouse radial; radial counterchange
收稿日期 :2009202218 修回日期 :2009205208
作者简介 :宋继红 (1968— , 女 , 辽宁福县人 , 副教授 , 研究方向为计算机网络通信 、 计算机网络远程控制 、 虚拟现实技术 ,
(E 2mail stuky_2005@126.com
0 引 言
在计 算 机 技 术 高 速 发 展 的 今 天 , 虚 拟 现 实
(V irtual Reality, VR 技术作为 1门综合计算机图
形 、 多媒体 、 传感器 、 人机交互 、 网络 、 立体显示以及 仿真等多种技术而发展起来的计算机领域的新技术
正逐步走向成熟并得到广泛应用 . [1]VR 本质上是 1种先进的计算机用户接口 , 它通过给用户同时提供 诸如视觉 、 听觉 、 触觉等各种直观而又自然的感知交 互手段 , 最大限度地方便用户操作 , 从而减轻用户负 担 , 提高整个系统的工作效率 . [2]因其在管理领域 中所具有的独特优势 , 近几年 VR 正逐渐被应用到 各种管理领域 . 特别是在建筑 、 仓储等管理领域中 , 传统的窗口式管理软件已不能满足用户需要 , 人们 希望能对数据进行可视化管理 , 从感观上对仓库中 的物品进行管理 . 因而 , VR 技术成为数据可视化管 理的首选 . 当 VR 技术应用于建筑 、 仓储等管理领域 中时 , 实现物体在虚拟三维场景中的移动成为实现 VR 技术在该领域应用的基础 . 因为在三维环境中 多了深度信息 , 反映到坐标系上就增加了 z 方向的 坐标值 , 从而使得一些在二维空间交互的简单问题 到三维空间就变得非常复杂 . [3]利用鼠标 、 触摸板 等二维输入设备得到的输入信息只具有 x 和 y 方向 的二维信息 , ,
景中的三维坐标 [,
. 最初的三维空间物体移动 方案利用键盘等输入设备在三维空间通过在 x, y, z 3个坐标增加或减少 1个固定值完成 , 这种方法不 但耗费移动时间 , 而且因其在 x, y, z 轴上每次只可 移动 1个固定值 , 移动精度很难保证 . 因此 , 实现通 过鼠标控制完成二维屏幕的三维移动操作对 VR 技 术应用于虚拟三维管理工作上具有极其重要的意 义 .
1 基于平面的三维空间物体任意点 移动算法
在三维空间中建立垂直于视线在 xz 平面投影 的可移动平面 , 并建立从摄像机位置 , 到鼠标位置的 射线 . 计算射线与可移动平面的交点 , 将其放入渲染 流水线作为待移动物体的新坐标值从而完成三维物 体的移动 . 此算法可分解为以下 5步 :(1 建立可移 动平面 ; (2 建立鼠标射线 ; (3 拾取物体确定待移 动物体 ; (4 对平面进行移动 ; (5 计算射线与移动 平面交点 .
1. 1 建立可移动平面
通过 3点可确定 1个平面 , 该平面要满足以下 要求 :(1 平面要通过物体重心 ; (2 平面垂直于 xz 平面 ; (3 平面垂直于视线在 xz 平面的投影 . 定义 P 1点为物体重心点 , 可通过查看物体的当前位置信 息获得 P
1
点 . 设该重心中点垂直上方点为 P
2
, 其坐
标为 (x
P 1
, y P
1
+10, z
P 1
. 为使平面垂直于视线在 xz 平面上的投影 , 此时只需再在 xz 平面上找到 1点
P 3, 即 可 得 到 向 量 A (P 1, P 2 与 向 量 B (P 0 Eye ,
P 0
v Look
, 使向量 A 与 B 满足
A ×B =0(1
因 P
3
点在 xz 平面上 , 所以 y
P 3
=0, 又因 P 3点
在 x 轴上的坐标只要不与 P
1
点在 x 轴重合 , 即可建
立满足要求的平面 , 所以设 P
3
=(10000, 0, h , z P 3为待求值 . 由式 (1 得
(x
P 1
-x P
3
×(x P
0vEye
-x P
0v Look
+
(z
P 1
-z P
3
×(z P
0vEye
-z P
0v Look
=0
z
P 3
=z P
1
(x
P 1
-x P
3
×(x P
-x P
(z
P 0
vEye
-z P
0v Look
P
12
P
3
面 . B , :A =P
2
-1B 2-3. 利用 irect X oss ( 计算 A 和 B :D3DXVec3Cr oss (C , A , B , 所
以过 P
1
, P 2, P 3的平面方程为
x c (x -x p
1
+y
c
(y -y
p
1
+z
c
(z -z
p
1
=0 1. 2 建立鼠标射线
当按下鼠标并移动到屏幕上的点 S 时 , 从屏幕 上可想象出 1条从摄像机位置到鼠标点处的射线 . 然而 , 应用程序不可能仅仅根据得到的屏幕点 S 的 坐标建立这条射线 . [5]与二维图形程序的显示方式 不同 , 三维图形程序中的顶点要经过世界变换 、 摄像 机变换 、 投影变换 、 剪切以及视口缩放 , 才能在二维 屏幕上显示 . [6]为获取鼠标按下点的造型空间坐 标 , 利用造型空间和用户空间之间的坐标变换提取 空间坐标 . [7]设在投影窗口上与 S 点对应的点为 P, 投影面为 z =1. 建立 1条射线 , 使其从投影空间起点 出发穿过点 P . 建立射线的算法可分解为以下 3步 : (1 捕捉屏幕上点 S, 确定 S 点对应投影窗口上的点 P; (2 建立 1条从投影坐标系原点出发穿过点 P 的 射线 ; (3 将射线和模型变换到同一坐标系中 . 1. 2. 1
屏幕到投影窗口变换
视口变换矩阵 [8]为
2
00
0-
2
00z max -z m in
x +
2
y +
2
z m in
48计 算 机 辅 助 工 程 2009年
投影窗口上的点 P 通过视口变换产生屏幕上 的点 S:
x s =x +x +2
(2 y s =y +y +
2
(3
z 坐标在视口变换以后没有作为二维图像的一部分
存储被存储到深度缓存中 .
[9]
因此 , 由式 (2 和 (3
得到计算 x p 的式 (4 和计算 y p 的式 (5 .
x p =2x s -2x -w
w
(4 y p
=
-2y s +2y +h h
(5
通常情况下 , 视口中的 x 和 y 为 0, 因此能更进 一步得到
x p =2x w -1(6 y p =
-2y h
(7
, 1, p =1
(8 的观察视野 . 为了得到被缩放之前点的值 , 必须通过 缩放变换的逆运算来变换点 . 设 P 为投影矩阵 , 因 为变换矩阵的 P 00和 P 11是点的 x 坐标和 y 坐标的缩 放值 , 所以被缩放之前点的值为
x p =w
-P (9 y p =
h
+P (10
此时点 P 为屏幕上点 S 对应投影窗口上的点 . 1. 2. 2 建立射线
射线可以表示为等式 P (r =P 0+tu , 其中 , P 0
是射线的起点位置 , u 是用于描述射线的方向向量 .
在前面设定射线的起点为投影空间的起点 , 因此 p 0=(0, 0, 0 . 因为射线通过点 P, 所以方向向量 u 可表示为 u =P -P 0=(x p , y p , 1 -(0, 0, 0 =P . 采 用上述方法在 D irect3D 中计算射线 . 首先定义射线 结构体 RAY,
Struct RAY {
D3DXVERCT OR3O rigin; D3DXVERCT OR3D irecti on;
}
创建 RAY 类型全局变量 Ra, 其中变量 O rigin
和 D irecti on 分别用于存储射线的起点和方向 . 定义
函数 Get Ray (int x , int y 计算射线 . 在函数中声明 D3DV I E W P ORT9类 型 结 构 体 V ie wport 和 D3DX MAT R I X 类 型 矩 阵 Pr oj . 用 pd3dDevice 2>Get V ie wport (&V ie wport 将视口信息存储于 V ie wport 中 , 用 pd3d Device 2>GetTransf or m (D3DTS _PROJECTI O N, &Proj 获取投影矩阵 , 并用 Pr oj 返 回 . 根据式 (9 和 (10 计算出 x p 和 y p , 可得射线的 起点为 D3DXVECT OR3(0. 0f, 0. 0f, 0. 0f , 射线的方 向为 D3DXVECT OR3(x p , y p , 1. 0f , 最后函数返回射 线 Ra .
1. 2. 3 射线变换
在第 1. 2. 2节中计算出来的射线是在投影空间 中描述的 . 为了完成射线与第 1. 1节中建立的移动 平面相交 , . 与 . []
(r =0tu P . Transf or mRay (Ray 3ray, D3DX MAT R I X 3T 变 换 射 线 . 其 中 , 采 用 函 数 D3DXVec3Transf or mCood 变换射线起点 , 第 4个分 量缺省为 1; 采用函数 D3DXVec3Transf or mNor mal 变 换射线方向 , 第 4个分量缺省为 0. 这里 , 起点作为 1个点变换 , 方向作为 1个向量变换 . 至此 , 在待移动 物体所在的世界坐标系中可得到 1条从摄像原点出 发并经过鼠标在世界坐标系下对应点的射线 Ra . 1. 3 拾取物体确定待移动物体
通过第 1. 2节计算得到的射线原点与方向向 量 , 利用 D irect X S DK D3DX I ntersect ( 函数逐一判 断场景中的物体是否被拾取 , 以确定待移动物体 . 函 数原型为 :D3DX I ntersect (pMesh, &vPickRayO rig, &vPickRayD ir, &bHit, NULL, NULL, NULL, NULL,
NULL, NULL [11]
; 通过 bH it 返回值是否为 1判定
物体是否被拾取 . 利用该函数可以一次性拾取到射 线所穿过的几个物体 , 此时可通过提取物体在三维 场景中的位置信息 Place [i ], 并计算找出距摄像机 距离最小的物体为拾取物体 . 1. 4 对平面进行移动
前面建立的平面只能实现物体在 1个平面上移 动 , 要实现物体在整个三维空间移动需要让该平面 在视线方向上向前或向后移动 . 如图 1所示 , 在 xz 平面内可移动面可表示为 1条直线 . 要把可移动面 从面 1位置移动到面 2位置只须让面 1中的各点分 别在 z 轴和 x 轴方向上移动 1个单位即可 . 图中视 线的方向向量 O E =(P 0vEye -P 0v Look ; 角 α为向量
5
8第 3期 宋继红 , 等 :基于平面的三维空间物体任意点移动算法
O E 与 x 轴的夹角 ; d 为移动距离 . 由图可得 Δx =d cos α, z =d sin α所以移动后 P 1, P 2, P 3的点坐标
分别为
P 4=(x p 1
+d cos α, y p 1
, z p 1
+d sin α
p 5=(x p 2
+d cos α, y p 2
, z p 2
+d sin α
p 6=(x p 3
+d cos α, y p 3
, z p 3
+d sin α
再将 P 4, P 5, P 6赋值给 P 1, P 2, P 3
.
图 1 可移动平面变换
采用上述方法在 D 数 Plan Move (int , 参数 i 用于控制平面向前移动还是向后移动 . 该函
数响应鼠标滚轮事件 WM _MOUSEWHEEL, 当向前 滚动时 , 使移动距离 d >0, 反之 d <0, 从而完成平面 移动 . 此时点 P 1, P 2, P 3都被赋予移动后的新坐标 值 , 重新建立移动平面方程得
x (x -x p 1
+y c (y -y p 1
+z c (z -z p 1
=0
1. 5 计算射线与移动平面交点
由于第 1和 2节已建立从摄像原点到鼠标在世 界坐标系对应点的射线和垂直于视线在 xz 平面上 投影的可移动平面 , 所以下一步只要计算射线与可 移动平面的交点 , 得出交点值 , 将其作为世界坐标系 下待移动物体的新坐标 , 装入渲染流水线即可完成 对物体的移动 . 交点值的计算过程如下 :
x c (x -x p 1
+y c (y -y p 1
+z c (z -1
=0
x O rigin Ra D irecti Ra O +y irecti on t
z Ra z D irecti on Ra ×t
:t 为参数方程的参数 . 解方程得
t =
x c -x O rigin Ra +y c (y p -y O rigin Ra +z c (z p -y O rigin Ra
x c ×x D irection Ra +y c ×y D irection Ra +z c ×z D irecti on Ra
x =x O rigin Ra +x O rigin Ra x c (x p -x O rigin Ra +y c (y p -y O rigin Ra
+z c (z p -y O rigin Ra
x c ×x D irection Ra +y c ×y D irecti on Ra +z c ×z D irection Ra
y =y O rigin Ra +y O rigin Ra x c (x p 1
-x O rigin Ra +y c (y p 1
-y O rigin Ra +z c (z p 1
-y O rigin Ra
x c ×x D irection Ra +y c ×y D irecti on Ra +z c ×z D irection Ra
z =z O rigin Ra +z O rigin Ra x c (x p -x O rigin Ra +y c (y p -y O rigin Ra +z c (z p -y O rigin Ra
x c ×x D irection Ra +y c ×y D irection Ra +z c ×z D irection Ra
此交点值为鼠标射线与移动平面的交点坐标 , 即待移动物体的新坐标值 . 将该点装入渲染流水线 作为待移动物体的坐标 , 到此完成物体在三维空间 中的移动 .
2 实验结果
上述算法在 PC 机 (AMD A thl on 64Pr ocess or 3000+处理器 , 1G B 内存 , NV I D I A GeForce 6600LE 显卡 上利用 D irect3D 9. 0c (AG U2006 图形库实 现 . 在场景中 , 当物体被拾取到后 , 通过拖动鼠标可 以使物体在初始移动平面上自由移动 . 当滚动鼠标 滚轮 , 物体可在新建立的移动平面上自由移动从而 达到通过鼠标使物体在三维空间中作任意位置移动 的目的 . 图 2为相关示例 .
图 2 算法实践
3 结束语
为改进物体在三维空间的移动操作 , 从建立可
移动平面和鼠标射线出发 , 通过移动可移动平面 , 使 鼠标射线与可移动平面的交点可以到达三维空间中 的任意位置 , 而后将该位置坐标作为待移动物体新 坐标放入渲染流水线 , 完成物体移动 . 该算法能保证 移动的速度与精度 , 同时也可减少因移动所需的输
(下转第 91页
68计 算 机 辅 助 工 程 2009年
图 10 应力模型更新和其版本控制
3 进一步工作
应该 指 出 , 鉴 于 强 度 分 析 工 作 的 复 杂 性 ,
StrenBox 强度自动化计算平台目前完成的是基础框 架性工作和针对金属杆板结构的静强度计算 , 所以 功能的拓展和完善将是一项长期的工作 , 需要持续 不断的努力 . :, 效率 ; 实现接头或开口等局部细节模型与整个机身 (或机 翼 结构的整体模型的融合和互相驱动 ; 任务和项 目管理的进一步实用化 ; 复合材料结构分析 ; 疲劳和 损伤容限分析等 .
4 结 论
毫无疑问 , 结构强度自动化计算平台代表着飞 行器结构强度设计和研究发展的重要方向 , 也代表 着强度计算工作发展的总趋势 . 正因为此 , 国内外 很多软件企业以及用户都在探讨发展这种平台的有 效途径 . 过去的经验表明 , 此种平台不可能建立在 通用的数据管理概念基础上 , 适用于任何学科和任 何领域的通用平台是不存在也没有意义的 . 构筑平 台除了要从大处把握整体架构外 , 还需要深入研究 特殊应用领域的数据 、 方法 、 规则和经验做法等 , 在 此基础上形成实用的软件体系 , 提供给用户真正方 便和高效的软件工具 . Stren Box 的尝试 , 取得突破 , , 不久的将来可望形成完 . 另外 , StrenBox 在航空工业的成功经验可以复制到如航天 、 汽车和 能源等其他领域 , 也可以由单纯的强度计算问题扩 展到结构和系统设计的其他方面 .
(编辑 于 杰
(上接第 86页
入设备 . 实际应用证实该方法切实可行 . 参考文献 :
[1] 韩晓玲 . 虚拟现实技术发展趋向浅析 [J ].多媒体技术及其应用 , 2005, 12(2 :5492550. [2] 陈定方 , 罗亚波 . 虚拟设计 [M].北京 :机械工业出版社 . 2007:223.
[3] T AN IB S, NOBREG A T, dos S ANT OS T R. Generic visualizati on and mani pulati on fra me work f or three 2di m ensi onal medical envir on ments[C ]//
19th I EEE I nt Sy mp on Comput 2Based Med Syste m s, US A:I EEE COMP UT Soc, 2006:27231.
[4] 何健鹰 , 徐强华 , 游佳 . 基于 OpenG L 的一种三维拾取方法 [J ].计算机工程与科学 , 2006(1 :45246. [5] 陆国栋 , 许鹏 , 温星 . 基于向量夹角的三维网格模型简化算法 [J ].工程设计学报 , 2005, 12(2 :1242128. [6] 王德才 , 杨关胜 , 孙玉萍 . D irect X 3D 图形与动画程序设计 [M].北京 :人民邮电出版社 , 2007:852103. [7] 李怀健 , 陈星铭 . 基于 VB 获取鼠标按下点的造型空间坐标 [J ].计算机辅助工程 , 2008, 17(2 :50253. [8] 叶至军 . 3D 游戏开发引导 [M].北京 :人民邮电出版社 , 2006:1122113.
[9] 金禾工作室 . 3D 游戏程序设计基础 [M].北京 :北京希望电子出版社 , 2006:1222126.
[10] L I U Z, SH IJ Y, PENG H Y . A D irect3D 2based large 2scale dis p lay parallel rendering system architecture for clusters [C ]//Advances in Comput
Syste m s A rchitecture, Ger man:Sp ringer 2Verlag, 2005:24226.
[11] 王德才 , 杨关胜 , 孙玉萍 . D irect X 3D 图形与动画程序设计 [M].北京 :人民邮电出版社 , 2007:5902591.
(编辑 于 杰
1
9第 3期 牟全臣 , 等 :结构强度自动化计算软件平台 StrenBox 的方法和实践
¥29.8
¥9.9
¥59.8