游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5114|回复: 15

关于定义平截头体剔除场景中一渲染顶点的问题。敬请赐

[复制链接]

22

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2008-5-4 15:45:00 | 显示全部楼层 |阅读模式
在《3D游戏编程》(电子工业出版社)第七章02节:平截头体的剔除中遇到如下困惑,请赐教:
一.该章节例子程序主要内容简要描述:
    在该例程定义了一个ZFrustum类,该类说明了一个平截头体(有六个面):
                        D3DXPLANE        m_plane[6];        /// 构成平截头体的6个平面
程序再根据这六个面来判断一个点、一个三角形或一个矩形(由两个三角形构成)的顶点信息是否被写入顶点索引缓冲中。
二.问题:
我的问题在定义平截头体(有六个面)这一步骤中,ZFrustum类定义了Make()函数来实现此功能,函数说明如下:
        BOOL        Make( D3DXMATRIXA16* pmatViewProj );
1.Make()需要以摄像机(view)矩阵*投影矩阵作为参数,请问摄像机(view)矩阵*投影矩阵得出来的是什么矩阵?
2.详细看了一下Make()函数的具体实现,但不能明白其算法思想。
敬请赐教。

附源码。

sf_200854154524.rar

93.97 KB, 下载次数:

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2008-5-4 16:32:00 | 显示全部楼层

Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请

何必怎么麻烦,搞六个平面?直接把你要剔除的顶点,乘以视图矩阵,再乘以投影矩阵,看看顶点是不是在[-1,1][-1,1][0,1]中就行了!

22

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
 楼主| 发表于 2008-5-4 17:10:00 | 显示全部楼层

Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请

可以讲详细点么?谢谢。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2008-5-5 00:22:00 | 显示全部楼层

Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请

1.ViewProj 矩阵是一个处于裁减空间中的规范视见体.
2.取裁减空间的 6 个面可以自己使用 viewProj 矩阵推导一下,简化后就是你看到的算法。

2

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2008-5-5 15:57:00 | 显示全部楼层

Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请

同意二楼观点,经过空间转换的点最终要显示在屏幕上,这样的点必定是在平截头体内,也就是在X[-1,1],Y[-1,1],Z[0,1]里面,所以直接判断变化后的点的坐标就可以了。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2008-5-5 23:55:00 | 显示全部楼层

Re: Re:关于定义平截头体剔除场景中一渲染顶点的问题。

lygamer: Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请赐教。

同意二楼观点,经过空间转换的点最终要显示在屏幕上,这样的点必定是在平截头体内,也就是在X[-1,1],Y[-1,1],Z[0,1]里面,所以直接判断变化后的点的坐标就可以了。

这样做是可以,但是效率可不怎么高啊.别为了方便简单而忽略的效率.

2

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2008-5-6 10:31:00 | 显示全部楼层

Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请

我觉得没有慢,用点乘的方式判断一个点是不是在六个平面内比直接判断这个点在不在坐标里面要快?请指教。

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2008-5-6 11:16:00 | 显示全部楼层

Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请

晕,怎么没有效率了?
你的方法:求出六个面,然后每一个顶点判断它是否在这六个面里面,也就是点在不在一个面的正方向。
我的方法:点经过视图,投影变换,直接判断在不在X[-1,1],Y[-1,1],Z[0,1]里面

对于一个点,你要经过六次判断,也就是判断这个点在不在面的正方向,还有求出六个面也要计算
而我的,直接乘矩阵就行了,这还可以用汇编优化吧?

13

主题

113

帖子

113

积分

注册会员

Rank: 2

积分
113
发表于 2008-5-7 16:39:00 | 显示全部楼层

Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请

支持楼上的方法

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2008-5-7 23:11:00 | 显示全部楼层

Re: Re:关于定义平截头体剔除场景中一渲染顶点的问题。

敢问2007: Re:关于定义平截头体剔除场景中一渲染顶点的问题。敬请赐教。

晕,怎么没有效率了?
你的方法:求出六个面,然后每一个顶点判断它是否在这六个面里面,也就是点在不在一...

这不是我的方法,是标准的方法,至于效率,你自己可以试试看哪个更快.据我了解,商业非商业引擎几乎都是这种做法,包括 lz 提到的《3D游戏编程》书中也是。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 12:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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