游戏开发论坛

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

在摄像机空间里的Z排序

[复制链接]

69

主题

450

帖子

473

积分

中级会员

战魂缔造者

Rank: 3Rank: 3

积分
473
QQ
发表于 2004-10-8 13:54:00 | 显示全部楼层 |阅读模式
本人正在做D3D下的一个半透明物体排序问题,这里涉及一个在摄像机前按照视点(Eye)和看点(LookAt)轴线对物体进行Z排序的问题
看图

OBJ1和OBJ2分别是2个要排序的物体,知道他们的坐标,现在要根据摄像机位置和LookAt位置确定图中的红线和蓝线的长度
请问有何方便的算法
是在3D空间里的,还要考虑到Z轴上的情况

[em4] [em5]
sf_2004108135437.jpg

0

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2004-10-8 14:24:00 | 显示全部楼层

Re:在摄像机空间里的Z排序

方法很多。
1) 如果知道camera到objects的距离,而且LookAt已经归一化了,你可以直接用点积。

2) 用View Frustum的near plane,如果知道该plane的方程的话,就将那些objects的坐标代入,得到的就是你要的了。

3) 如果你没有View Frustum在手,直接将objects的坐标与转换投影矩阵相乘,不过值得注意的是,得到的结果不是其真正的到near plane的距离。(范围是[-1,1], 且变化不是线性关系) 不过你只需根据大小来排序就可以了。

4)如果你认为第一种方法求距离太慢,可以使用所谓的Manhattan Distance = abs(x1-x2) + abs(y1-y2) + abs(z1-z2), 然后根据大小排序。(精确度不高但可以接受)
............

第一种大概是最简单的。

21

主题

170

帖子

170

积分

注册会员

Rank: 2

积分
170
QQ
发表于 2004-10-8 14:25:00 | 显示全部楼层

Re:在摄像机空间里的Z排序

直观上看过去.
红线=(Obj1Pos-CameraPos)到(LookAtPos-CameraPos)的投影长度

69

主题

450

帖子

473

积分

中级会员

战魂缔造者

Rank: 3Rank: 3

积分
473
QQ
 楼主| 发表于 2004-10-8 14:40:00 | 显示全部楼层

Re:在摄像机空间里的Z排序

非常感谢,受益匪浅
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-22 16:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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