游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7342|回复: 16

请问在d3d9中如何进行2d绘制?

[复制链接]

28

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2005-7-17 11:48:00 | 显示全部楼层 |阅读模式
我知道三角形可以使用转换后的顶点流,及DrawUserPrimitives来绘制出2D图形,请问如何绘制出曲线,椭圆,Image等呢?就如GDI+中实现的2D绘制一样?

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2005-7-17 14:09:00 | 显示全部楼层

Re:请问在d3d9中如何进行2d绘制?

关注中。。。

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-7-18 09:37:00 | 显示全部楼层

Re:请问在d3d9中如何进行2d绘制?

如果不使用第三方的图形库,那么根据我的经验最简单的方法是使用pixel shader

用标准的3D加速2D绘制方法,用一个与屏幕对齐的矩形mesh,在其绘制过程中,在其pixel shader中通过过滤纹理坐标可以控制椭圆、抛物线等2D图形的生成,以椭圆为例,将其长径a、短径b以常量传入ps中,并在输入流中包含标准的矩形纹理坐标
首先将纹理坐标的原点变换至你需要绘制的椭圆的参考系原点,然后对当前绘制像素的位置进行过滤可判断其是位于椭圆内、椭圆上或椭圆外,如当前纹理坐标为 x, y,则 x^2/a^2 + y^2/b^2 = 1 则表示当前像素点在椭圆上,> 1表示在椭圆外,< 1表示在椭圆内,根据不同的值在ps中返回不同的颜色和alpha值即可生成指定长短径的填充的或是线框的椭圆

其它曲线也可类似实现,你可以拿RenderMonkey先进行试验

24

主题

94

帖子

96

积分

注册会员

Rank: 2

积分
96
发表于 2005-7-18 12:07:00 | 显示全部楼层

Re:请问在d3d9中如何进行2d绘制?

我都是按照D3D 2D的那本书慢慢实现的,所有的sprite结构都是四个顶点的边,速度勉强还凑合的,不过目前因为边缘柔和问题烦恼中,目前正想请教楼上的告诉一些,PS:那个是GL的,不是很懂,不过还是会参照一下。请问D3D纹理柔和的方法是什么呢?

2

主题

48

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2005-7-18 15:55:00 | 显示全部楼层

Re: 请问在d3d9中如何进行2d绘制?

建个纹理,lock之后就可以随便对像素操作了;
如果不会操作单个像素就用surface的getdc,象gdi一样使用;
不填充的简单多边形,就用line_list也行

28

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2005-7-18 17:44:00 | 显示全部楼层

Re:请问在d3d9中如何进行2d绘制?

非常感谢各位的回答.
dancercl讲到的pixel shader我没接触过,先找些资料看看
不知道dx9sdk中的customUI示例中的绘制方法是dancercl讲的方法呢还是faredu的方法?

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-7-19 10:09:00 | 显示全部楼层

Re: Re: 请问在d3d9中如何进行2d绘制?

faredu: Re: 请问在d3d9中如何进行2d绘制?

建个纹理,lock之后就可以随便对像素操作了;
如果不会操作单个像素就用surface的getdc,象gdi一样使用;
不填充的简单多边形,就用line_list也行


呵呵……lock和gdi都是慢的要死的方法,用CPU计算很方便,但上传到显存的速度肯定会让你抓狂滴
小纹理也许能接受,换个大纹理试试吧  :)

我还是建议在fillrate比较低的情况下只用GPU来完成计算,fillrate高的情况下要么自已写一个排序和剔除器,要么就先加一个 z-buffer pass,然后在下一pass中用GPU计算

总之除非迫不得已,不要轻易使用lock,要lock也在程序开始时lock一次把所需要的数据填进去,如果需要每帧做改变并且只能用CPU计算的话,那就尽量用小纹理

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-7-19 10:15:00 | 显示全部楼层

Re: Re:请问在d3d9中如何进行2d绘制?

LuRenJia: Re:请问在d3d9中如何进行2d绘制?

非常感谢各位的回答.
dancercl讲到的pixel shader我没接触过,先找些资料看看
不知道dx9sdk中的customUI示...


CustomUI 示例里的按钮之类都是直接用的画好的纹理,在SDK目录下的\Samples\Media\UI\dxutcontrols.dds 文件里

24

主题

94

帖子

96

积分

注册会员

Rank: 2

积分
96
发表于 2005-7-19 11:40:00 | 显示全部楼层

Re:请问在d3d9中如何进行2d绘制?

目前仍然处于函数级别的人飘过^^

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2005-7-19 17:43:00 | 显示全部楼层

Re: Re: Re: 请问在d3d9中如何进行2d绘制?

dancercl: Re: Re: 请问在d3d9中如何进行2d绘制?



呵呵……lock和gdi都是慢的要死的方法,用CPU计算很方便,但上传到显存的速度肯定会让你抓狂滴
小纹理...

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

本版积分规则

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

GMT+8, 2025-12-26 15:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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