游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2829|回复: 7

[请教] 在D3D中的外景地形算法

[复制链接]

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-10-5 22:10:00 | 显示全部楼层 |阅读模式
RT: 由于D3D的DP函数调用效率很低,导致最方便的扇面渲染法变的不实际,用条带渲染好象很复杂的样子,不知各位高手都是用什么方法实现地形的,小弟真是焦头烂额了,拿不定主意呀!
如果是用条带,有什么著名的算法可以借鉴的吗?其他方法也行啊,多介绍介绍吧,不胜感激啊! [em6] [em6] [em6]

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2006-10-6 12:47:00 | 显示全部楼层

Re:[请教] 在D3D中的外景地形算法

普通一个一个triangle画就ok 主要是用  LOD或者ROAM算法减少多边形数量。

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-10-6 13:08:00 | 显示全部楼层

Re:[请教] 在D3D中的外景地形算法

明白了!原来如此!OTZ
多谢楼上的给了个方法!

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-10-6 23:08:00 | 显示全部楼层

Re:[请教] 在D3D中的外景地形算法

还有别的方法了吗?

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2006-10-7 00:24:00 | 显示全部楼层

Re:[请教] 在D3D中的外景地形算法

PVS 使用提前计算的静态数据减少polygon数,类似BSP tree
或者你自己做一些faceculling的计算. 一般来说,如果100*100地图,有20000个triangle,可以用这些算法减少到3000左右.  512 * 512的地图,用这些算法的混用,可以达到200 FPS没有问题. 当然你也可以只用一种技术.

3

主题

27

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2006-10-8 10:38:00 | 显示全部楼层

Re:[请教] 在D3D中的外景地形算法

就用三角形条带,这是最节省资源最快的办法,用一个IndexBuffer来指定条带,索引Buffer可以手工硬编码在程序里,有些涉及到条带连接的地方要用些小技巧,比如重复某个顶点生成退化的三角形作为过渡。下面是一个17*17顶点的三角形条带例子,为第一级Lod,四边连接的也是第一级LOD的情况

WORD wIndexBufferStrip[] =
{
          0,  17,   1,  18,   2,  19,   3,  20,   4,  21,   5,  22,   6,  23,   7,  24,   8,  25,   9,  26,  10,  27,  11,  28,  12,  29,  13,  30,  14,  31,  15,  32,  16,  33,  33,  33,  50,
         33,  49,  32,  48,  31,  47,  30,  46,  29,  45,  28,  44,  27,  43,  26,  42,  25,  41,  24,  40,  23,  39,  22,  38,  21,  37,  20,  36,  19,  35,  18,  34,  17,  34,  34,
         34,  51,  35,  52,  36,  53,  37,  54,  38,  55,  39,  56,  40,  57,  41,  58,  42,  59,  43,  60,  44,  61,  45,  62,  46,  63,  47,  64,  48,  65,  49,  66,  50,  67,  67,  67,  84,
         67,  83,  66,  82,  65,  81,  64,  80,  63,  79,  62,  78,  61,  77,  60,  76,  59,  75,  58,  74,  57,  73,  56,  72,  55,  71,  54,  70,  53,  69,  52,  68,  51,  68,  68,
         68,  85,  69,  86,  70,  87,  71,  88,  72,  89,  73,  90,  74,  91,  75,  92,  76,  93,  77,  94,  78,  95,  79,  96,  80,  97,  81,  98,  82,  99,  83, 100,  84, 101, 101, 101, 118,
        101, 117, 100, 116,  99, 115,  98, 114,  97, 113,  96, 112,  95, 111,  94, 110,  93, 109,  92, 108,  91, 107,  90, 106,  89, 105,  88, 104,  87, 103,  86, 102,  85,  102, 102,
        102, 119, 103, 120, 104, 121, 105, 122, 106, 123, 107, 124, 108, 125, 109, 126, 110, 127, 111, 128, 112, 129, 113, 130, 114, 131, 115, 132, 116, 133, 117, 134, 118, 135, 135, 135, 152,
        135, 151, 134, 150, 133, 149, 132, 148, 131, 147, 130, 146, 129, 145, 128, 144, 127, 143, 126, 142, 125, 141, 124, 140, 123, 139, 122, 138, 121, 137, 120, 136, 119, 136, 136,
        136, 153, 137, 154, 138, 155, 139, 156, 140, 157, 141, 158, 142, 159, 143, 160, 144, 161, 145, 162, 146, 163, 147, 164, 148, 165, 149, 166, 150, 167, 151, 168, 152, 169, 169, 169, 186,
        169, 185, 168, 184, 167, 183, 166, 182, 165, 181, 164, 180, 163, 179, 162, 178, 161, 177, 160, 176, 159, 175, 158, 174, 157, 173, 156, 172, 155, 171, 154, 170, 153, 170, 170,
        170, 187, 171, 188, 172, 189, 173, 190, 174, 191, 175, 192, 176, 193, 177, 194, 178, 195, 179, 196, 180, 197, 181, 198, 182, 199, 183, 200, 184, 201, 185, 202, 186, 203, 203, 203, 220,
        203, 219, 202, 218, 201, 217, 200, 216, 199, 215, 198, 214, 197, 213, 196, 212, 195, 211, 194, 210, 193, 209, 192, 208, 191, 207, 190, 206, 189, 205, 188, 204, 187, 204, 204,
        204, 221, 205, 222, 206, 223, 207, 224, 208, 225, 209, 226, 210, 227, 211, 228, 212, 229, 213, 230, 214, 231, 215, 232, 216, 233, 217, 234, 218, 235, 219, 236, 220, 237, 237, 237, 254,
        237, 253, 236, 252, 235, 251, 234, 250, 233, 249, 232, 248, 231, 247, 230, 246, 229, 245, 228, 244, 227, 243, 226, 242, 225, 241, 224, 240, 223, 239, 222, 238, 221, 238, 238,
        238, 255, 239, 256, 240, 257, 241, 258, 242, 259, 243, 260, 244, 261, 245, 262, 246, 263, 247, 264, 248, 265, 249, 266, 250, 267, 251, 268, 252, 269, 253, 270, 254, 271, 271, 271, 288,
        271, 287, 270, 286, 269, 285, 268, 284, 267, 283, 266, 282, 265, 281, 264, 280, 263, 279, 262, 278, 261, 277, 260, 276, 259, 275, 258, 274, 257, 273, 256, 272, 255,

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-10-8 11:53:00 | 显示全部楼层

Re:[请教] 在D3D中的外景地形算法

回楼上,我也这么想的呵呵,不过不是用硬编码,是可以调节Patch大小的。如果你这样做索引的话,那么每个Patch都需要一个顶点缓冲是吧?否则索引不能对号入座。我设计了一个方法,传入参数是全地图的边长和本Patch的LOD级别。全地图边长是用来计算正确的相对索引的。不知道四条边与不同LOD级别的Patch合并时你是怎么做的呢?

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-10-8 22:53:00 | 显示全部楼层

Re:[请教] 在D3D中的外景地形算法

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

本版积分规则

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

GMT+8, 2026-1-25 14:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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