聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 基于平面的三维空间物体任意点移动算法概要

基于平面的三维空间物体任意点移动算法概要

时间:2018-11-20 05:15:04    下载该word文档

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

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服