游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1591|回复: 2

拾取问题

[复制链接]

15

主题

33

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2008-12-28 01:14:00 | 显示全部楼层 |阅读模式
//计算拾取射线相关变量声明
POINT        ptCursor;  //鼠标位置
D3DXMATRIX   matWorld, matView, pmatProj, modeview;//模型矩阵,视图矩阵,投影矩阵,模型视图矩阵
D3DXVECTOR3  vPickRayOrig, vPickRayDir;//拾取线原点和方向
int          iWidth, iHeight;//视图区宽度和高度

//获取后台缓冲区的宽度和高度
iWidth = DXUTGetBackBufferSurfaceDesc()->Width;
iHeight = DXUTGetBackBufferSurfaceDesc()->Height;

//获取当前鼠标在窗口客户区中的位置
GetCursorPos( &ptCursor );
ScreenToClient( DXUTGetHWND(), &ptCursor );

//获取当前设备的变换矩阵
pd3dDevice->GetTransform( D3DTS_WORLD, &matWorld );
pd3dDevice->GetTransform( D3DTS_VIEW, &matView );
pd3dDevice->GetTransform( D3DTS_PROJECTION, &pmatProj );

//计算世界观察矩阵的逆矩阵
D3DXMATRIX mWorldView = matWorld * matView;);//这里不明白为什么还乘以世界变换矩阵

D3DXMATRIX mWorldView =  matView;
D3DXMatrixInverse( &modeview, NULL, &mWorldView)
//计算拾取射线在视图空间的方向
D3DXVECTOR3 vTemp;
vTemp.x =  ((( 2.0f * ptCursor.x ) / iWidth  ) - 1 ) / pmatProj._11;
vTemp.y = -((( 2.0f * ptCursor.y ) / iHeight ) - 1 ) / pmatProj._22;
vTemp.z =  1.0f;
           //计算拾取射线在世界空间中的方向
vPickRayDir.x  = vTemp.x*m._11 + vTemp.y*m._21 + vTemp.z*m._31;
vPickRayDir.y  = vTemp.x*m._12 + vTemp.y*m._22 + vTemp.z*m._32;
vPickRayDir.z  = vTemp.x*m._13 + vTemp.y*m._23 + vTemp.z*m._33;
          //计算观察点在世界坐标系中的位置
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;

//计算被拾取到的三角形, 得到拾取到三角形的索引
BOOL               bHit;
LPD3DXBUFFER       pBuffer = NULL;
D3DXINTERSECTINFO* pIntersectInfoArray;

V_RETURN( D3DXIntersect( pMesh, &vPickRayOrig, &vPickRayDir, &bHit,
                     NULL, NULL, NULL, NULL,
                    &pBuffer, &g_dwNumIntersections ));


一共是两个问题请问一下.
vTemp.y = -((( 2.0f * ptCursor.y ) / iHeight ) - 1 ) / pmatProj._22;
这个地方前面为什么加负啊.我看公式里面没有啊.
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
这句没有看明白.计算射线的起点怎么是这样啊.

15

主题

33

帖子

33

积分

注册会员

Rank: 2

积分
33
 楼主| 发表于 2008-12-28 16:33:00 | 显示全部楼层

Re:拾取问题

这个问题没有人会吗.请大侠指点

0

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2008-12-31 13:13:00 | 显示全部楼层

Re: 拾取问题

第一个问题  如果是以照相机发出射线的话 一般情况下照相机是在地面之上的  那么发出的射线当然是在Y的负方向上
第二个问题  看下矩阵的定义就清楚了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 14:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表