游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4817|回复: 5

[心得]从世界坐标到屏幕坐标

[复制链接]

4

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2007-8-26 13:58:00 | 显示全部楼层 |阅读模式
取得一个三维坐标投影在屏幕(视口)上的二维坐标的方法:

将要变换变换的坐标Vector3 v3;转换成Vector4 v4(v3);

取得使用者的摄影机的视角变换矩阵和投影变换矩阵
Camera* cam=mSceneMgr->getCamera(&quotlayerCam");
Matrix4 viewMatrix=cam->getViewMatrix();
Matrix4 projectMatrix=cam->getProjectionMatrix();

将转换坐标左乘矩阵的积
Vector4 v4=viewMatrix*projectMatrix*v4;
然后齐次化
Vector3 ScreenPos=Vector3(v4.x/v4.w,v4.y/v4.w,v4.z/v4.w);

这里得到的x,y坐标的范围是(-1,+1)转换成(0,1)的范围。
float x=ScreenPos.x/2+0.5
float y=-ScreenPos.y/2+0.5

ogre wiki上查到的方法一种是直接将文字绑定到SCENENODE上,作为3维的部件渲染;另一种是使用的近似的方法,
将以视口坐标作为归一化量,试验了一下觉得动态准确度不是很好,不能作为锁定标志使用(因为要一直准确的表示敌机的位置)。

一点心得而已。。希望可以帮到需要的人。 [em5]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2007-8-26 15:46:00 | 显示全部楼层

Re:[心得]从世界坐标到屏幕坐标

thank you

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-26 18:29:00 | 显示全部楼层

Re:[心得]从世界坐标到屏幕坐标

将转换坐标左乘矩阵的积
Vector4 temp=viewMatrix*projectMatrix*v4;
========================================

dx下由于是行向量,所以表述上应该说是右乘。

可以写成这样:
Vector4 temp=v4*(viewMatrix*projectMatrix);

6

主题

18

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2007-8-29 09:14:00 | 显示全部楼层

Re:[心得]从世界坐标到屏幕坐标

然后归一化
Vector3 ScreenPos=Vector3(v4.x/v4.w,v4.y/v4.w,v4.z/v4.w);

______________________________________________________________
这叫齐次化  #-_-

1

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2007-9-14 00:04:00 | 显示全部楼层

Re:[心得]从世界坐标到屏幕坐标

mark

4

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2008-1-16 16:42:00 | 显示全部楼层

Re:[心得]从世界坐标到屏幕坐标

研究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 21:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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