direct中怎样将3d模型的坐标转换为屏幕的坐标???

sun2985 2008-11-15 02:37:02
我导入了一个3d模型,就是一个正方体,按住右键拖动可以使其自由旋转,然后我想做到左键点击屏幕时判断如果点在模型的某个面(能看到的)内,就使这个面变亮,请问如何做到?
...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun2985 2008-11-15
  • 打赏
  • 举报
回复
没给成分????
sun2985 2008-11-15
  • 打赏
  • 举报
回复
找到了..................
sun2985 2008-11-15
  • 打赏
  • 举报
回复
好啊,我找不到..............
我的邮箱:ivagabondize@163.com
要不就qq:896566785
zzz822163 2008-11-15
  • 打赏
  • 举报
回复
你去找DirectX 9 3D游戏设计入门这本书看看吧,讲的很详细了,找不到的话告诉我,我发给你吧
zzz822163 2008-11-15
  • 打赏
  • 举报
回复
directx 的例子下面有个Pick,你可以看看

const D3DXMATRIX *pmatProj = g_Camera.GetProjMatrix();

POINT ptCursor;
GetCursorPos( &ptCursor );
ScreenToClient( DXUTGetHWND(), &ptCursor );

// Compute the vector of the pick ray in screen space
D3DXVECTOR3 v;
v.x = ( ( ( 2.0f * ptCursor.x ) / pd3dsdBackBuffer->Width ) - 1 ) / pmatProj->_11;
v.y = -( ( ( 2.0f * ptCursor.y ) / pd3dsdBackBuffer->Height ) - 1 ) / pmatProj->_22;
v.z = 1.0f;

// Get the inverse view matrix
const D3DXMATRIX matView = *g_Camera.GetViewMatrix();
const D3DXMATRIX matWorld = *g_Camera.GetWorldMatrix();
D3DXMATRIX mWorldView = matWorld * matView;
D3DXMATRIX m;
D3DXMatrixInverse( &m, NULL, &mWorldView );

// Transform the screen space pick ray into 3D space
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
sun2985 2008-11-15
  • 打赏
  • 举报
回复
能不能稍加叙述一下?
zzz822163 2008-11-15
  • 打赏
  • 举报
回复
看选取的章节,有详细的介绍,就是那个计算射线

19,464

社区成员

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

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