游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1594|回复: 1

又一个关于d3d中鼠标拾取——改变了worldmatrix后的问题。

[复制链接]

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
发表于 2005-6-4 13:02:00 | 显示全部楼层 |阅读模式
  上次有劳secondage解决了d3d鼠标拾
取问题。当时我就发现,鼠标拾取算法里
面似乎没有引入worldmatrix。
  果然,我在改变了worldmatrix后,鼠标拾
取出现了问题。简单来说,就是物体因为改
变worldmatrix后移动开,但鼠标拾取算法仍
然认为物体在原来的位置。当鼠标移到变化
前的位置后,物体被拾取(实际上物体已经
移动走了)。
  
   下面是secondage给出的算法,各位熟悉
这个的人看该怎么样引入worldmatrix?

D3DXMATRIX matProj;
        m_pd3dDevice->GetTransform( D3DTS_PROJECTION, &matProj );

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

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

        // Get the inverse view matrix
        D3DXMATRIX matView, m;
        m_pd3dDevice->GetTransform( D3DTS_VIEW, &matView );
        D3DXMatrixInverse( &m, NULL, &matView );

        // 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;
谢谢!

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
 楼主| 发表于 2005-6-4 14:05:00 | 显示全部楼层

Re:又一个关于d3d中鼠标拾取——改变了worldmatrix后的问题。

我找了一个方法,是将viewmatrix再做一次和
worldmatrix同样的变换,这样可以达到目的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 21:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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