游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5032|回复: 10

请教 三角形带如何一次画出一个 n*n的网格?

[复制链接]

21

主题

54

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2007-2-28 21:25:00 | 显示全部楼层 |阅读模式
在 网上看到一篇文章是这么说的

   
1---2---3---4---5
|     |     |     |     |
6---7---8---9--10
|     |     |     |     |
11-12-13-14-15
|     |     |     |     |
16-17-18-19-20
|     |     |     |     |
21-22-23-24-25

Your vertex buffer: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25

D3DPT_TRIANGLESTRIP index buffer
1,6,2,7,3,8,4,9,5,10
6,11,7,12,8,13,9,14,10,15
11,16,12,17,13,18,14,19,15,20
16,21,17,22,18,23,19,24,20,25
为什么我按照这种索引画出来却不能形成一个网格? 变成如下样子了
1---2---3---4---5
|     |     |     |     |
6---7---8---9--10
|     |     |     |     |
11-12-13-14-15
|     |     |     |     |
16-17-18-19-20
|     |     |     |     |
21-22

   
  

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
发表于 2007-2-28 23:54:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

你可以 在 任意的平面 最简单的 一个双循环生成 顶点, 并根据一个公式生成 索引。
具体的看 《翁云兵 翻译的 DirectX93D游戏编程指南》里有介绍。

21

主题

54

帖子

54

积分

注册会员

Rank: 2

积分
54
 楼主| 发表于 2007-3-1 08:29:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

索引我生成的没错,   只是我发现三角形数有点奇怪   6个三角形的时候没有什么问题
按理论 25个顶点应该只有32个三角形  可是却要画40个三角形才画满
网格画的越大  越出现不明的东西

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-3-1 10:16:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

行与行之间没用退化三角形进行连接,结果可能不对吧

15

主题

363

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-3-1 10:33:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

结果肯定不对,5,10,6,  10,15,11  等几个三角形全都是错三角形。网上文章的意思是需要生成四个TS索引缓冲。而不是一个。

15

主题

363

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-3-1 10:38:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

左上角点开始,则必须使用退化三角形以连接不同行的。

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-3-1 11:15:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

请使用nvTriStrip,具体请google。。。。


Features:
-generates strips from arbitrary geometry.
-flexibly optimizes for post TnL vertex caches (16 on GeForce1/2, 24 on GeForce3).
-can stitch together strips using degenerate triangles, or not.
-can output lists instead of strips.
-can optionally throw excessively small strips into a list instead.
-can remap indices to improve spatial locality in your vertex buffers.

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-3-1 13:42:00 | 显示全部楼层

Re: 请教 三角形带如何一次画出一个 n*n的网格?

xingxingren: 请教 三角形带如何一次画出一个 n*n的网格?
D3DPT_TRIANGLESTRIP index buffer
1,6,2,7,3,8,4,9,5,10
6,11,7,12,8,13,9,14,10,15
11,16,12,17,13,18,14,19,15,20
16,21,17,22,18,23,19,24,20,25

5,10之后应该重新再来才可以吧?
D3DPT_TRIANGLESTRIP index buffer
1,6,2,7,3,8,4,9,5,10
D3DPT_TRIANGLESTRIP index buffer
6,11,7,12,8,13,9,14,10,15
D3DPT_TRIANGLESTRIP index buffer
11,16,12,17,13,18,14,19,15,20
D3DPT_TRIANGLESTRIP index buffer
16,21,17,22,18,23,19,24,20,25

要不然 9,5,10 形成一个三角形后, “5,10,6”又要生成一个三角形。
出问题了吧?
这个“5,10,6”是不应该画的。还有“10,6,11”也是。
有很多这样的“不该画”的三角形被画出来了。
所以本来只要画32个,你却画了40个。

至于为什么只画到22为止,,,
好象是这样:
DX的“画三角形”都是“先指定要画多少个”三角形,然后再画。
你上面已经多画了8个了,所以后面就少了8个三角形。

OpenGL 是肯定不会出现这种情况的。因为OpenGL是不指定画多少个,直接
BEGIN开始,END结束的。

呵呵,祝楼主好运。
[em2]

21

主题

54

帖子

54

积分

注册会员

Rank: 2

积分
54
 楼主| 发表于 2007-3-1 18:59:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

恩  要多研究了  谢谢各位了

楼上的讲的有道理, 可是按照下面这样我必须画4次才能画完 我想一笔搞定这样就
少调用几次api,



5,10之后应该重新再来才可以吧?
D3DPT_TRIANGLESTRIP index buffer
1,6,2,7,3,8,4,9,5,10
D3DPT_TRIANGLESTRIP index buffer
6,11,7,12,8,13,9,14,10,15
D3DPT_TRIANGLESTRIP index buffer
11,16,12,17,13,18,14,19,15,20
D3DPT_TRIANGLESTRIP index buffer
16,21,17,22,18,23,19,24,20,25



还有 NVTRISTRIP 这东西为什么给我生成的是一个list?? 而且比我自己定义的list还慢9帧左右

                unsigned short numSections;
                PrimitiveGroup* g_pPrimitiveGroups = NULL;
                SetCacheSize(CACHESIZE_GEFORCE3);
                SetStitchStrips(true);
                SetMinStripSize(0);
                SetListsOnly(true);
                GenerateStrips( &xxx,xxx.Size(),
                &g_pPrimitiveGroups , &numSections);

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-3-2 10:25:00 | 显示全部楼层

Re:请教 三角形带如何一次画出一个 n*n的网格?

可以一笔搞定,用退化三角形进行连接,前面已经说过了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-13 12:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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