游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2754|回复: 9

???o???????????????

[复制链接]

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2011-9-14 09:21:00 | 显示全部楼层 |阅读模式
???1.?????????]????????N?????o???????????????,???????W??????K????,??????????????N??,??????,??????????????

???2.?? D3DXMatrixLookAtLH ???,??? eye ??? -800.0f ,700.0f ,-200.0f ???N?????,?????N??,lookat ?????,?????????? 0~1 ??,???????????????,??????N??????
ZCamera::ZCamera(HWND hWnd,LPDIRECT3DDEVICE9 pDevice)
{
        D3DXVECTOR3        eye(-800.0f,700.0f,-200.0f);
        D3DXVECTOR3        lookat(-800.0f,700.0f,0.0f);
        D3DXVECTOR3        up(0.0f,1.0f,0.0f);
        D3DXMatrixIdentity( &m_matView );
        SetView( &eye, &lookat, &up );
        g_pMyd3dDevice = pDevice;
        hwnd = hWnd;
}

/// ????????z??C????????.
D3DXMATRIX*        ZCamera::SetView( D3DXVECTOR3* pvEye,D3DXVECTOR3* pvLookat,D3DXVECTOR3* pvUp)
{
        m_vEye                = *pvEye;
        m_vLookat        = *pvLookat;
        m_vUp                = *pvUp;
        /*D3DXVec3Normalize( &m_vView, &( m_vLookat - m_vEye ) );
        D3DXVec3Cross( &m_vCross, &m_vUp, &m_vView );*/

        D3DXMatrixLookAtLH( &m_matView, &m_vEye, &m_vLookat, &m_vUp);
        return &m_matView;
}

http://upload.gameres.com/20119/sf_1492058_8047.rar?

26

主题

417

帖子

476

积分

中级会员

???

Rank: 3Rank: 3

积分
476
发表于 2011-9-14 09:30:00 | 显示全部楼层

Re:???o???????????????

??2?eye?????????eye ? lookat?????Camera Z vector?????????????

???DX9??????????????

zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
   
xaxis.x           yaxis.x           zaxis.x          0
xaxis.y           yaxis.y           zaxis.y          0
xaxis.z           yaxis.z           zaxis.z          0
-dot(xaxis, eye)  -dot(yaxis, eye)  -dot(zaxis, eye)  l

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2011-9-16 13:29:00 | 显示全部楼层

Re: ???o???????????????

????????????????z??C???|???????

26

主题

417

帖子

476

积分

中级会员

???

Rank: 3Rank: 3

积分
476
发表于 2011-9-18 17:28:00 | 显示全部楼层

Re:???o???????????????

???????eye????????????????
???????object1?(0,0,0)???????eye( 0, 0, 800 )??far clip plane ??100????????object1??????????????far clip plane

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2011-9-18 21:09:00 | 显示全部楼层

Re:???o???????????????

??????????????????,help me ??,???????????????????e????????

26

主题

417

帖子

476

积分

中级会员

???

Rank: 3Rank: 3

积分
476
发表于 2011-9-19 10:28:00 | 显示全部楼层

Re:???o???????????????

??????

        // ZCamera.cpp, ???line 60? ???????     
        RECT wndRect;
        GetClientRect( hwnd, &wndRect );

        v.x =  ( ( ( 2.0f * ptCursor.x ) / wndRect.right) - 1 ) / matProj._11;
        v.y = -( ( ( 2.0f * ptCursor.y ) /wndRect.bottom) - 1 ) / matProj._22;
        v.z =  1.0f;

        // ???1440 * 900????????????window???????client area???
        // PickRay?????viewport?width & height? ?????????window???????
        // ???window?non client area??????????????

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2011-9-20 20:37:00 | 显示全部楼层

Re:???o???????????????

Dear playerwing ?????r??????a.
??????,????????]?,?????????????????????r,?????,??????????,
?????????????????,??????? 1440? 900 ???????,?????????????????1440/900 ?????,?????????????

????
bool ZCamera::pickmap(LPD3DXMESH pMesh,D3DXVECTOR3 v0,D3DXVECTOR3 v1,D3DXVECTOR3 v2,D3DXMATRIX matWorld,BOOL b_moxing)
{
        D3DXVECTOR3 vPickRayDir;
        D3DXVECTOR3 vPickRayOrig;
        BOOL pHit=NULL;
        DWORD *pFaceIndex=NULL;
        FLOAT *pU=NULL;
        FLOAT *pV=NULL;
        FLOAT *pDist=NULL;
        LPD3DXBUFFER *ppAllHits=NULL;
        DWORD *pCountOfHits=NULL;
        D3DXMATRIX matProj;
        FLOAT fBary1, fBary2, fDist;
        g_pMyd3dDevice->GetTransform( D3DTS_PROJECTION, &matProj );

        POINT ptCursor;
        GetCursorPos( &ptCursor );
        ScreenToClient( hwnd, &ptCursor );
       
        D3DXVECTOR3 v;
        v.x =  ( ( ( 2.0f * ptCursor.x ) / 1440) - 1 ) / matProj._11;
        v.y = -( ( ( 2.0f * ptCursor.y ) /900) - 1 ) / matProj._22;
        v.z =  1.0f;
       
        //RECT wndRect;
        //GetClientRect( hwnd, &wndRect );
        //v.x =  ( ( ( 2.0f * ptCursor.x ) / wndRect.right) - 1 ) / matProj._11;
        //v.y = -( ( ( 2.0f * ptCursor.y ) /wndRect.bottom) - 1 ) / matProj._22;
        //v.z =  1.0f;


}


HRESULT Game::InitD3D()
{
    m_pD3D=Direct3DCreate9(D3D_SDK_VERSION);

        D3DPRESENT_PARAMETERS d3dpp;
        D3DDISPLAYMODE                        d3ddm;
        m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);
        memset(&d3dpp,0,sizeof(d3dpp));
        d3dpp.Windowed = false;                //???? << ???? false

.........
}
//
void Game::SetupProj()
{
        D3DXMATRIX* matView=Keyboard->GetMatrix();
        m_pD3DDevice->SetTransform( D3DTS_VIEW, matView );

//        RECT wndRect;
//        GetClientRect( hwnd, &wndRect );
//        FLOAT fAspect = ((FLOAT)wndRect.right) /wndRect.bottom;
           FLOAT fAspect = ((FLOAT)1440) /900;                  

        D3DXMATRIX matProj;
    D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, fAspect, 1.0f, 50000.0f);
    m_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);
}

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2011-9-20 22:17:00 | 显示全部楼层

Re:???o???????????????

???:
? playerwing ????????????????????,?????y????,???????????r,??????????????????? ScreenToClient( hwnd, &ptCursor ); ??Q,????? ScreenToClient( hwnd, &ptCursor );,?????????,??,


bool ZCamera::pickmap(LPD3DXMESH pMesh,D3DXVECTOR3 v0,D3DXVECTOR3 v1,D3DXVECTOR3 v2,D3DXMATRIX matWorld,BOOL b_moxing)
{
        D3DXVECTOR3 vPickRayDir;
        D3DXVECTOR3 vPickRayOrig;
        BOOL pHit=NULL;
        DWORD *pFaceIndex=NULL;
        FLOAT *pU=NULL;
        FLOAT *pV=NULL;
        FLOAT *pDist=NULL;
        LPD3DXBUFFER *ppAllHits=NULL;
        DWORD *pCountOfHits=NULL;
        D3DXMATRIX matProj;
        FLOAT fBary1, fBary2, fDist;
        g_pMyd3dDevice->GetTransform( D3DTS_PROJECTION, &matProj );

        POINT ptCursor;
        GetCursorPos( &ptCursor );
//        ScreenToClient( hwnd, &ptCursor );
       
        D3DXVECTOR3 v;
        v.x =  ( ( ( 2.0f * ptCursor.x ) / 1440) - 1 ) / matProj._11;
        v.y = -( ( ( 2.0f * ptCursor.y ) /900) - 1 ) / matProj._22;
        v.z =  1.0f;
       
//        RECT wndRect;
        //GetClientRect( hwnd, &wndRect );

        //v.x =  ( ( ( 2.0f * ptCursor.x ) / wndRect.right) - 1 ) / matProj._11;
        //v.y = -( ( ( 2.0f * ptCursor.y ) /wndRect.bottom) - 1 ) / matProj._22;
        //v.z =  1.0f;

        static bool b = false;
        //if(!b)
        {
                ////FILE *fp = fopen("C:\\1.txt","at+");
                //fprintf(fp,"x:%d        y:%d,x:%d        y:%d\n",ptCursor.x,ptCursor.y,wndRect.right,wndRect.bottom );
                //fclose(fp);
                //b = true;
               
        }

PS: ?? playerwing ????????,???.

26

主题

417

帖子

476

积分

中级会员

???

Rank: 3Rank: 3

积分
476
发表于 2011-9-21 09:50:00 | 显示全部楼层

Re:???o???????????????

????~

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2011-9-26 17:23:00 | 显示全部楼层

????? ?????????????????????

???????? pickmap ?????,??????????????????????r,???????x????,?????
IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ;
????N?]???????@?????

?

bool ZCamera::pickmap(LPD3DXMESH pMesh,D3DXVECTOR3 v0,D3DXVECTOR3 v1,D3DXVECTOR3 v2,D3DXMATRIX matWorld,BOOL b_moxing)
{
        D3DXVECTOR3 vPickRayDir;
        D3DXVECTOR3 vPickRayOrig;
        BOOL pHit=NULL;
        DWORD *pFaceIndex=NULL;
        FLOAT *pU=NULL;
        FLOAT *pV=NULL;
        FLOAT *pDist=NULL;
        LPD3DXBUFFER *ppAllHits=NULL;
        DWORD *pCountOfHits=NULL;
        D3DXMATRIX matProj;
        FLOAT fBary1, fBary2, fDist;
        g_pMyd3dDevice->GetTransform( D3DTS_PROJECTION, &matProj );

        POINT ptCursor;
        GetCursorPos( &ptCursor );
        ScreenToClient( hwnd, &ptCursor );
       
        D3DXVECTOR3 v;
        v.x =  ( ( ( 2.0f * ptCursor.x ) / 1440) - 1 ) / matProj._11;
        v.y = -( ( ( 2.0f * ptCursor.y ) /900) - 1 ) / matProj._22;
        v.z =  1.0f;
       
        RECT wndRect;
        GetClientRect( hwnd, &wndRect );

        v.x =  ( ( ( 2.0f * ptCursor.x ) / wndRect.right) - 1 ) / matProj._11;
        v.y = -( ( ( 2.0f * ptCursor.y ) /wndRect.bottom) - 1 ) / matProj._22;
        v.z =  1.0f;

        static bool b = false;
        //if(!b)
        {
                ////FILE *fp = fopen("C:\\1.txt","at+");
                //fprintf(fp,"x:%d        y:%d,x:%d        y:%d\n",ptCursor.x,ptCursor.y,wndRect.right,wndRect.bottom );
                //fclose(fp);
                //b = true;
               
        }


        D3DXMATRIX matView, m;
        g_pMyd3dDevice->GetTransform( D3DTS_VIEW, &matView );
        matView=matWorld*matView;
        D3DXMatrixInverse( &m, NULL, &matView);

        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;
        /*
       
                HRESULT D3DXIntersect(      
                           LPD3DXBASEMESH pMesh,
                           CONST D3DXVECTOR3 *pRayPos,
                           CONST D3DXVECTOR3 *pRayDir,
                           BOOL *pHit,
                           DWORD *pFaceIndex,
                           FLOAT *pU,
                           FLOAT *pV,
                           FLOAT *pDist,
                           LPD3DXBUFFER *ppAllHits,
                           DWORD *pCountOfHits
                );
                l             pMesh????ID3DXBaseMesh????????????.x????????????????????????????????direct9 SDK
                l             pRayPos ???????
                l             pRayDir ????????????????????
                l             pHit ??????????????true,???????????
                l             pU ????????U??
                l             pV??????V??
                l             pDist ??????????????
                ????????????????????????*pDist???
                l             ppAllHits??????????????????????
                l             pCountOfHits ????????????????

*/

        if (b_moxing)
                D3DXIntersect(pMesh,&vPickRayOrig,&vPickRayDir,&pHit,pFaceIndex,pU,pV,pDist,ppAllHits,pCountOfHits);
        else
                pHit=IntersectTriangle(vPickRayOrig,vPickRayDir,v0,v1,v2,&fDist,&fBary1,&fBary2);

        if( pHit==true)
        {
                D3DXVECTOR3 point,t;
                     // ??? IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ;

                point = v0 + fBary1*(v1-v0) + fBary2*(v2-v0); << ?????????
               

                int a;

                if( point == v0 )  // ????? v0 ?t???
                {
                        a = 1;
                }else if( point == v1 ) // ????? v1 ?t???

                {
                        a = 2;
                }else if( point ==v2)// ????? v2 ?t???

                {
                        a = 3;
                }

               

        }
        return pHit;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-22 13:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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