游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: sudongao

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

[复制链接]

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2008-5-8 08:49:00 | 显示全部楼层

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

说不过,又拿出书,什么引擎来说,我也有理论基础啊《3D游戏与计算机图形学的数学方法》还有一本也是讲数学的,一下子想不起来。
这么说,所有的商业引擎你全看过?佩服啊,看过这么多,也不会自己思考下,就会照搬!

2

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2008-5-8 12:41:00 | 显示全部楼层

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

不要拿什么书来比较,书上的内容不一定都是好的,自己看看计算量就可以知道速度,我觉得直接判断比用平面来求要快,除非是显卡对平面做了很特殊的优化,不然实在是没有理由计算量大的反而快.

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

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

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

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

说不过,又拿出书,什么引擎来说,我也有理论基础啊《3D游戏与计算机图形学的数学方法》还有一本也是讲数学的,...

这本书里关于这部分恰好也是这种方法.

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2008-5-9 09:08:00 | 显示全部楼层

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

看来GAMERES只会出照搬书本和源代码的呆子!

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

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

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

总比自以为聪明的傻子好.

22

主题

63

帖子

63

积分

注册会员

Rank: 2

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

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

回过头来看了一看这个问题,再看看你们的提示,已经搞明白了,含泪多谢各位的提示。
创建六个面的过程如下:
1.定义一个(-1,-1,0) ~ (1,1,1)之间的裁剪空间立方体,顶点坐标信息如下:
        m_vtx[0].x = -1.0f;        m_vtx[0].y = -1.0f;        m_vtx[0].z = 0.0f;
        m_vtx[1].x =  1.0f;        m_vtx[1].y = -1.0f;        m_vtx[1].z = 0.0f;
        m_vtx[2].x =  1.0f;        m_vtx[2].y = -1.0f;        m_vtx[2].z = 1.0f;
        m_vtx[3].x = -1.0f;        m_vtx[3].y = -1.0f;        m_vtx[3].z = 1.0f;
        m_vtx[4].x = -1.0f;        m_vtx[4].y =  1.0f;        m_vtx[4].z = 0.0f;
        m_vtx[5].x =  1.0f;        m_vtx[5].y =  1.0f;        m_vtx[5].z = 0.0f;
        m_vtx[6].x =  1.0f;        m_vtx[6].y =  1.0f;        m_vtx[6].z = 1.0f;
        m_vtx[7].x = -1.0f;        m_vtx[7].y =  1.0f;        m_vtx[7].z = 1.0f;
2.将(-1,-1,0) ~ (1,1,1)之间的裁剪空间立方体顶点转换成世界坐标。代码如下
// 求得view * proj的逆矩阵.
D3DXMatrixInverse(&matInv, NULL, pmatViewProj );
//坐标转换
for( i = 0; i < 8; i++ )
D3DXVec3TransformCoord( &m_vtx, &m_vtx, &matInv );
3.求出基于世界坐标系的裁剪平面:
D3DXPlaneFromPoints(&m_plane[0], m_vtx+4, m_vtx+7, m_vtx+6);        // 上平面(top)
D3DXPlaneFromPoints(&m_plane[1], m_vtx  , m_vtx+1, m_vtx+2);        // 下平面(bottom)
D3DXPlaneFromPoints(&m_plane[2], m_vtx  , m_vtx+4, m_vtx+5);        // 近平面(near)
D3DXPlaneFromPoints(&m_plane[3], m_vtx+2, m_vtx+6, m_vtx+7);        // 远平面(far)
D3DXPlaneFromPoints(&m_plane[4], m_vtx  , m_vtx+3, m_vtx+7);        // 左平面(left)
D3DXPlaneFromPoints(&m_plane[5], m_vtx+1, m_vtx+5, m_vtx+6);        // 右平面(right)

我提问时提到的《3D游戏编程》一书中创建裁减面的过程大概如上。
至于敢问2007提出的方法,我继续研究一下。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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