游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3496|回复: 11

求教绘制三角形网的问题

[复制链接]

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2010-12-10 19:30:00 | 显示全部楼层 |阅读模式
比如说我要绘制这样一种网格,
如图所示,这只是这种网格的一种层级形式,层级增高时,格网会更多,
我的问题就是在这种用  D3DPT_TRIANGLESTRIP和D3DPT_TRIANGLELIST 都无法一次将全部图形
绘制出来的情况下如何把格网绘出来,很显然要分多次绘图
是定义多个vetexbuffer对象吗?
那样开销大得惊人,无法实现,
我初学DirectX,有很多东西不明白,现在遇到了问题,请指教
如果看不明白,请指明,谢谢

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2010-12-10 22:22:00 | 显示全部楼层

Re: 求教绘制三角形网的问题

低能老鼠: 求教绘制三角形网的问题

我的问题就是在这种用 D3DPT_TRIANGLESTRIP 和 D3DPT_TRIANGLELIST
无法一次将全部图形

TRIANGLELIST也有“一次画不出全部图形”的情况吗?
怎么可能呢?

11

主题

190

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2010-12-10 22:29:00 | 显示全部楼层

Re:求教绘制三角形网的问题

用D3DPT_TRIANGLESTRIP+DrawIndexedPrimitive,不可能一次画不完吧?


-----------------
欢迎光临我的博客 http://www.thecodeway.com

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2010-12-11 10:06:00 | 显示全部楼层

Re: 求教绘制三角形网的问题

如果是一个一个的输入,当然能一次绘完,
但现在格网比较复杂,各个格网点坐标需要依次计算后才能绘制,
我想过先计算出点的坐标,把它们写入到一个文件里,再依次读出
但那样实现起来太复杂,所以就计算出一个区域,绘一个格网,

如图,比如先计算A区4个点1 2 3 4,绘出A区格网,接下来计算B区格网点,然后绘制,格网点为
3 4 5 6 7,这个还有一定连续性,如果到了C区,就成了 2 3 7 8 9,没有什么明显的规律,显然
应该用TRIANGLELIST,
但现在这种情况是需要计算一个格网区(如A),绘一个格网,从而把整个格网绘出来,所以不能用
vertexbuffer一次绘出整个格网,

还有我说过这只是这种格网的一种简单形式,复杂的格网数会上千上万,所以只能计算一个,绘一个,不能
一次绘完

我的绘制方法如下:
   先BeginScene();
   之后计算一个格网区(如A)的各格网点(如1 2 3 4),然后利用vertexbuffer  Lock(),Unlock()获取
各点坐标,之后调用DrawPrimitive()绘出A区格网,
   然后同理依次绘制B,C等区,(此过程位于一循环中)
   最后EndScene();

我初学DrectX,不知道这样行不行,书上写的都是绘一个简单图元(如三角形之类),所以找不到资料,

如果这样可以,那我再问一下,怎样才能将整个网格进行平移,旋转等操作,
因为这是个循环,所以我怕在循环中进行这些变换的话,是不是只会改变当前所绘格网区(如A)的坐标,
而不会改变其它格网区(如B,C)的坐标,(我对坐标变换也不是很理解)

还请各位指教。

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2010-12-11 12:03:00 | 显示全部楼层

Re: 求教绘制三角形网的问题

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2010-12-11 17:16:00 | 显示全部楼层

Re: Re: 求教绘制三角形网的问题

snghun: Re: 求教绘制三角形网的问题




[em9]
我初学DirectX,对复杂绘图操作不了解,因此希望得到帮助,
你不需要这么讽刺我吧,
我只是想知道我上面的方案是否可行

5

主题

42

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2010-12-11 19:54:00 | 显示全部楼层

Re:求教绘制三角形网的问题

就这个图来说各顶点坐标当然有规律 用表达式可计算  lz再想想吧

至于网格旋转  当成茶壶就行了

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2010-12-11 20:54:00 | 显示全部楼层

Re: Re:求教绘制三角形网的问题

lolikon: Re:求教绘制三角形网的问题

就这个图来说各顶点坐标当然有规律 用表达式可计算  lz再想想吧

至于网格旋转  当成茶壶就行了



多谢回答,
你可能没听懂我的意思,各点计算方法我已经想到了,只是不知道语法,我只学过绘简单图元,
我现在想计算一块,绘一块,之前都是一次绘完的,所以就不知道语法该怎么表达
当然,把所有格网点都计算出来,写入一个文件,之后读取文件,可以实现一次绘完,但这样太麻烦,我想计算一块绘一块,你看这样行不行(部分代码省略):
g_D3DDevice->BeginScene();

/***************注意,循环开始**********************/

for(int i=1;i<=格网区(如A,第二张图上标的有)总数;i++){
     计算当前格网区格网,并将格网点坐标写入objData(就是那个储存坐标点数据的struct)中

/*************注意以下代码,我不知道它们能不能这样循环使用************************/

          g_D3DDevice->CreateVertexBuffer(4*sizeof            (objData),0,D3DFVF_VERTEX,D3DPOOL_DEFAULT,&g_VertexBuffer,NULL);
           void *ptr;
          g_VertexBuffer->Lock(0,sizeof(objData),(void**)&ptr,0);
          memcpy(ptr,objData,sizeof(objData));
           g_VertexBuffer->Unlock();
           g_D3DDevice->SetStreamSource(0,g_VertexBuffer,0,sizeof(stD3DVertex));
        g_D3DDevice->SetFVF(D3DFVF_VERTEX);
        g_D3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
}

/************循环在这里结束*****************/

g_D3DDevice->EndScene();

请问能这样循环绘图吗?
我试了,能绘出来,只是会出错,图变形了,我想知道是不是我绘图函数调用错了,
谢谢

5

主题

42

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2010-12-12 12:24:00 | 显示全部楼层

Re:求教绘制三角形网的问题

真不明白你干嘛用for循环  一个vb不就够了?
我也不是啥高手  代码唯一看出来的就是可能会内存泄露

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2010-12-12 15:20:00 | 显示全部楼层

Re: Re:求教绘制三角形网的问题

lolikon: Re:求教绘制三角形网的问题

真不明白你干嘛用for循环  一个vb不就够了?
我也不是啥高手  代码唯一看出来的就是可能会内存泄露

我只能计算出4个或5个点的坐标(刚好构成一个四边网格),然后绘出,
再计算,再绘,
之前我想到一次性绘出要用到文件操作,我操作文件水平太低,所以就想算一个,绘一个,不用保存点坐标
如果把计算出的点坐标直接写入存坐标点那个struct里,是不行的,因为这种图上有三种不同的网格,
有的一个网格绘2个三角形,有的要绘3个,
我是按四边网格绘图的,虽然存储每个三角形的坐标的话,不用分三种情况,但那样要存储的坐标点数目会大大增加
for循环真的不行吗,我绘出图了,不过有交叉,这种方法真的不行吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-30 11:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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