游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3425|回复: 3

求助:3D坐标转换2D坐标(D3DXVec3Project)急!

[复制链接]

5

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2008-3-17 17:40:00 | 显示全部楼层 |阅读模式
以下是部分代码,不知道是哪错了,请各位高手指点.
屏幕大小 800 600
a点坐标是100 100 100
得到的b怎么会是400 300呢?而且不管我怎么改变a点的坐标或者摄象机的位置,得到的结果是一样的

          D3DXMATRIXA16 matWorld;
        D3DXMatrixIdentity(&matWorld);
        g_pd3dDevice->SetTransform(D3DTS_WORLD,&matWorld);

        D3DXVECTOR3 vEyePt(0.0f, 0.0f, -5.0f);        //摄像机的位置
        D3DXVECTOR3 vLookPt(0.0f, 0.0f, 0.0f);        //观察点的位置
        D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);       
        D3DXMATRIXA16 matView;
        D3DXMatrixLookAtLH(&matView,&vEyePt,&vLookPt,&vUpVec);
        g_pd3dDevice->SetTransform(D3DTS_VIEW,&matView);

        D3DXMATRIXA16 matProj;
        D3DXMatrixPerspectiveLH(&matProj,D3DX_PI/4,1.0f,1.0f,100.0f);
        g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj);

        D3DVIEWPORT9 viewPort = {0,0,800,600,0.0f,1.0f};
        g_pd3dDevice->SetViewport(&viewPort);
        D3DXVECTOR3 a,b;
        a = D3DXVECTOR3(100,100,100);
        D3DXVec3Project(&b,&a,&viewPort,&matProj,&matView,&matWorld); [em4]

5

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2008-3-18 09:03:00 | 显示全部楼层

Re:求助:3D坐标转换2D坐标(D3DXVec3Project)急!

怎么没人回啊?
D3DXVec3Project这个函数返回的向量应该是结果,但不管怎么做改变,结果都是一样的.
是不是参数不对啊?

8

主题

70

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2008-3-18 22:36:00 | 显示全部楼层

Re:求助:3D坐标转换2D坐标(D3DXVec3Project)急!

似乎是投影矩阵出错,把长宽比改成800/600试试

0

主题

5

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2008-3-25 14:19:00 | 显示全部楼层

Re:求助:3D坐标转换2D坐标(D3DXVec3Project)急!

你的坐标是错的,你的a坐标写成了已经被平移过后的坐标,在调用D3DXVec3Project的时候又被传入的世界坐标矩阵转换了一次当然会产生奇异的结果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 17:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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