游戏开发论坛

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

LOD地形网格顶点间距怎样设定具体的“米”。

[复制链接]

2

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2010-7-24 21:19:00 | 显示全部楼层 |阅读模式
各位专家:我现在正看LOD地形方面的资料及生成地形的软件“Terragen”。有一些基础问题我弄不清楚,上网搜索也未找到答案,请给予指教,谢谢。其中一个问题是:比如地形网格为256*256,要设定地形顶点间距为50米,来生成256*50米=12800米见方的面积,是把两个顶点距离缩放50倍,还是怎么样,照相机是否需要跟着设置,总之不知道怎么做。要是设定间距为1米又怎么样。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-7-24 21:53:00 | 显示全部楼层

Re:LOD地形网格顶点间距怎样设定具体的“米”。

我是设定一个单元格两米的距离,差不多一个格子能站两三个人吧,关键是比例,至于精度自己去规定就好了

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2010-7-24 22:10:00 | 显示全部楼层

Re:LOD地形网格顶点间距怎样设定具体的“米”。

我先说下我的见解。
有2种方法。
1:创建MESH数据的时候。首先,我们知道MESH的顶点格式肯定包括position部分。你要创建256*256大小的网格,肯定需要填充256*256个顶点的position信息。
for( int i; i<256; i++ )
{
    for( int j; j<256; j++ )
    {
          D3DXVECTOR3 pos = D3DXVECTOR3( i, 0, j );
          vertex[j] = VERTEX( pos ); //VERTEX是MESH的顶点格式,这里假设只有坐标信息。
     }
}
上面这个方法创建的MESH顶点之间的间隔为单位1.
看下面的代码:
for( int i; i<256; i++ )
{
    for( int j; j<256; j++ )
    {
          D3DXVECTOR3 pos = D3DXVECTOR3( i*50, 0, j*50 );
          vertex[j] = VERTEX( pos ); //VERTEX是MESH的顶点格式,这里假设只有坐标信息。
     }
}
这样MESH的顶点之间的间隔为50,当我们用一个只有移动因素(不包缩放因素)的WorldMatrix把它从模型坐标系变换到世界坐标系里的时候,MESH在世界坐标系里顶点的间隔就是50个单位。
当然,这个单位是由你来定义的,你可以把他定义为米,也可以定义为厘米。

第二种方法是:
for( int i; i<256; i++ )
{
    for( int j; j<256; j++ )
    {
          D3DXVECTOR3 pos = D3DXVECTOR3( i, 0, j );
          vertex[j] = VERTEX( pos ); //VERTEX是MESH的顶点格式,这里假设只有坐标信息。
     }
}

创建完毕后,用一个WorldMatrix把它放大50倍到世界坐标系里。
===========================================================

可能有疏漏和错误的地方,还请指正。

2

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2010-7-25 14:02:00 | 显示全部楼层

Re:LOD地形网格顶点间距怎样设定具体的“米”。

谢谢楼上两位专家的答复,您说的有道理。是不是不论怎样设计游戏,关键是场景中物体的比例一致,与现实相符就可以了?至于地形网格顶点间距1米还是50米只是可以场景人物活动的范围大小吧,不知这样理解对不对。恳请专家继续关注。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2010-7-29 22:23:00 | 显示全部楼层

Re: Re:LOD地形网格顶点间距怎样设定具体的“米”。

t68133160: ReOD地形网格顶点间距怎样设定具体的“米”。

谢谢楼上两位专家的答复,您说的有道理。是不是不论怎样设计游戏,关键是场景中物体的比例一致,与现实相符...


当然是这样啦!

这实际上是小学数学的一些细节,不过很多人包括我在内都曾经淡忘。

首先,你程序中的长度值,只是一个实数,而不是长度这个物理量本身。
然后,什么是实数呢,实数就是两个量的比。比如长度数值,就是两个线段的长短之比。

游戏中的物体是没法和现实相比较的,不能说一个游戏人物的身高是"多少现实米",这没有意义。
只能是做内部对象的比较,比如说拿游戏中的房屋和游戏中的米尺相比,可以得到"多少游戏米"。
(不过对象在屏幕上的大小是具有现实长度的)

并且,C++语言里通常没有单位,所以长度值甚至也不代表游戏世界里的长度,
而只不过是游戏世界里某对象长度和标准长度的比值。

另外,像F#这样的语言里支持带单位运算。你也可以用C++封装单位,如米。
但是,那仅仅表示游戏世界里的"米",和我们的世界无关。

2

主题

41

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2010-7-30 17:19:00 | 显示全部楼层

Re:LOD地形网格顶点间距怎样设定具体的“米”。

一般的LOD地形精度为 1格=1米。为什么呢?为了地表多层纹理混合的精度。
试想,如果你的1格=50米,要用两层纹理混合出一条路,你的这条路的宽度最窄是多少呢?对了,最窄是50米。
如果1格=1米,则可以混合出复杂多样的地表。
以上………………
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-22 16:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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