游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3180|回复: 6

问下3d中的sprite接口的问题

[复制链接]

4

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2005-4-11 21:31:00 | 显示全部楼层 |阅读模式
现在大家有在用3d了,我想用3d的东西来实现以前2d的功能。
我听大家说的,用sprite接口,我实验了下,显示尺寸有问题啊,
比如我的纹理大小是800x600我画到同大窗口的时候,矩形设置都是null
sdk写的null就代表整个纹理。但是我画上去的却比窗口大了很多,我缩小窗口的时候
发现纹理贴图又变了,所以我想可能是因为和窗口的大小有关系,有哪位高手解释下好吗?

如果我用sprite接口来做2d的显示,那么实现alpha通道的混合就很容易,但是要实现任意级数的alpha混合怎么做,还有色饱和运算怎么弄呢?好象sprite接口不支持这样的混合方法。


以前想用4个顶点来创建一个面,显示2d图象,那么比如屏幕上的顶点很多时候,是不是要创建一个全局的顶点缓冲,画的时候先锁定这个缓冲,把所有的顶点放进去,一块画。但是新的问题就是不能设置相应的纹理。这样的方法也不能实现任意级数的alpha混合,色饱和混合的对吗?如果要实现这样的效果是不是就需要ps呢?一种特效就写一个psh shader,对吗?


还有最笨的方法是很接近ddraw的,直接从file创建LPD3DSURFACE9接口,直接向后备表面拷贝数据,那样好象和ddraw没有区别哈。

高手请指教!

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2005-4-11 22:56:00 | 显示全部楼层

Re:问下3d中的sprite接口的问题

是这样的,你的图形的大小不是2的N次方,而且你可能是用D3DX的库中函数D3DXCreateTextureFromFile或者D3DXCreateTextureFromFileEx读取的纹理文件,那么就会存在一个问题,这些函数会对你的纹理进行缩放,你说你的纹理是800*600的,可能会缩成1024*512,所以肯定会显示不了,我的建议是将纹理控制在2的N次方范围,最好是正方行的。
第二个问题,你可以看看Sprite->Draw()函数的最后一个函数,它是一个D3DCOLOR类型的变量,你可以用D3DCOLOR_RGBA宏设置其Alpha值呀!这样就可以实现Alpha运算了呀!
第三个问题,就是色饱和,考虑ing...

69

主题

450

帖子

473

积分

中级会员

战魂缔造者

Rank: 3Rank: 3

积分
473
QQ
发表于 2005-4-12 09:33:00 | 显示全部楼层

Re:问下3d中的sprite接口的问题

色饱和是2D里的概念,到了3d里类似的效果需要用Alpha混合实现,ISprite接口默认下是普通的Alpha混合,需要修改Alpha混合类型只需要在isprite->Begin以后设置渲染状态为BlendOne即可得到色饱和类似的效果

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-4-12 12:07:00 | 显示全部楼层

Re:问下3d中的sprite接口的问题

这些问题小弟也在迷惑中,多谢各位解释!

11

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2005-4-14 22:35:00 | 显示全部楼层

Re:问下3d中的sprite接口的问题

我怎么没有看见sprite接口阿,有什么书是介绍2D编程的阿,我很需要

6

主题

20

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2006-4-19 10:32:00 | 显示全部楼层

Re: Re:问下3d中的sprite接口的问题

sunicdavy: Re:问下3d中的sprite接口的问题

色饱和是2D里的概念,到了3d里类似的效果需要用Alpha混合实现,ISprite接口默认下是普通的Alpha混合,需要修改...



..非常感谢,我初学DX,一个渐变色图形显示问题我想用色饱和处理,一直不知道用sprite+texture怎么弄,原来这样SetRenderState就行啊,再一次感谢,再请问有什么相关方面的书推荐一下吗?

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2006-4-19 17:41:00 | 显示全部楼层

Re:问下3d?prite接口的问题

首先说一下,这里面有很多的sprite的东西
http://www.dingge.com/forum/index.asp?boardid=46

1.你的纹理出了问题是因为你的纹理不是2的N次幂(不是2的N次幂上面那个论坛里也有解决办法),才会出现纹理变形了。
2.sprite窗口模式绘制是和窗口长宽关联的,所以你放大窗口当然图片也变大了
3.sprite实现alpha通道用法和D3D的一致,因为本来就是把它当一个纹理来处理,d3d支持多少纹理混合,也同样适合sprite,上面有个朋友说得色彩D3DCOLOR那里的混合不是纹理混合,而是绘制图片透明度;后面一个朋友说得对,sprite->Begin()中参数设置sprite的混合模式,你要开启alpha透明,这里必需要设置为alpha混合。
4.没有看明白你谈到的4个点的那个问题,主要是不明白目的是干什么。

------------------------------------------------------------
D3D做2D游戏好论坛
http://www.spacetch.com/forum/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 07:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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