游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1120|回复: 0

无法正确拾取模型,请看哪里有问题?

[复制链接]

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2007-12-23 23:20:00 | 显示全部楼层 |阅读模式
        disb->Acquire();
        disb->GetDeviceState(sizeof(DIMOUSESTATE),&sbhcq);
        sys._41=sys._41-sbhcq.lX*0.25f;
        sys._42=sys._42-sbhcq.lY*0.25f;
        if(sbhcq.rgbButtons[0]!=0&&sb==0)
        {
        //        sb=1;
                //获取后台缓冲区的宽度和高度
                iWidth=800;
                iHeight=600;
                //获取当前鼠标在窗口客户区中的位置
                GetCursorPos( &ptCursor );
                ScreenToClient( ckjb, &ptCursor );
                //获取当前设备的变换矩阵
                dx->GetTransform( D3DTS_WORLD, &matWorld );
                dx->GetTransform( D3DTS_VIEW, &matView );
                dx->GetTransform( D3DTS_PROJECTION, &pmatProj );
                //计算世界观察矩阵的逆矩阵
                D3DXMATRIX mWorldView = matWorld * matView;
                D3DXMatrixInverse( &m, 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;
                DWORD sjxsl=0;
                D3DXIntersect( mesh, &vPickRayOrig, &vPickRayDir, &bHit,
                                                         NULL, NULL, NULL, NULL,
                                                        &pBuffer, &sjxsl );
                if(sjxsl>0)
                {
                        D3DXMatrixTranslation(&sys1,20.0f,0.0f,50.0f);//用于测试是否被拾取
                }

        }
        if(sbhcq.rgbButtons[1]!=0){
                sb=0;
                D3DXMatrixTranslation(&sys1,0.0f,0.0f,-50.0f);//用于测试是否被拾取
        }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 23:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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