【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2707|回复: 8

sprite->draw如何将带alpha通道的图片显示出来?

[复制链接]
发表于 2006-4-19 19:32:01 | 显示全部楼层 |阅读模式
sprite->draw如何将带alpha通道的图片显示出来?
就是显示出来的图片只是做alpha通道是想要显示出来的部分?
在三角形上 纹理混合可以弄出来 那么sprite可以弄吗?




///////////////////////////////////////////////////////////////////////////////////////////////////
鼯鼠
Exp:225

爱心战士
发表于: 2006-4-19 17:35:00博客 | 档案 | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用   


Re:sprite->draw如何将带alpha通道的图片显示出来?

d3d设置里面把alpha通道激活
http://forum.exceedu.com/forum/index.asp?boardid=46
这里有很多讨论sprite的东西



嘿嘿  发现你这里的确很不错

不过我的问题还没有得到解决

g_pD3DDevice->SetRenderState (D3DRS_CULLMODE , D3DCULL_CCW);
g_pD3DDevice->SetRenderState (D3DRS_LIGHTING,FALSE);
g_pD3DDevice->SetRenderState (D3DRS_ZENABLE,D3DZB_TRUE);
//alpha blend
g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
g_pD3DDevice->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);

g_pD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);
g_pD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC);
g_pD3DDevice->SetSamplerState(0,D3DSAMP_MAXANISOTROPY,16);


我开了D3DRS_ALPHABLENDENABLE
pSprite->Begin( D3DXSPRITE_ALPHABLEND );
   pSprite->Draw( g_pTexture,
                        &srcRect,
                        &vCenter,
                        &vPosition,
                        D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,1.0f) );
pSprite->End ();

可是却什么也没有显示 出来 这是为什么?
 楼主| 发表于 2006-4-19 19:34:36 | 显示全部楼层

D3DXIMAGE_INFO d3dxImageInfo;

SafeRelease(g_pTexture);
D3DXCreateTextureFromFileEx( g_pD3DDevice,
lpBkFilename,
150, // I had to set width manually. D3DPOOL_DEFAULT works for textures but causes problems for D3DXSPRITE.
256, // I had to set height manually. D3DPOOL_DEFAULT works for textures but causes problems for D3DXSPRITE.
1, // Don't create mip-maps when you plan on using D3DXSPRITE. It throws off the pixel math for sprite animation.
D3DPOOL_DEFAULT,
D3DFMT_UNKNOWN,
D3DPOOL_DEFAULT,
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,1.0f),
&d3dxImageInfo,
NULL,
&pTexture );

g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

发表于 2006-4-19 20:19:57 | 显示全部楼层

看程序是对的

但是我一般不这么做,你用的图片是什么格式的?

 楼主| 发表于 2006-4-20 08:14:59 | 显示全部楼层

是对的吗? 为什么没显示出来呢?

图片是tga带通道格式的 做通道时 黑色部分为不想要的区域

使用顶点缓冲可以正确渲染 使用sprite就什么也没有了 麻烦大哥帮帮忙,急

发表于 2006-4-20 10:04:00 | 显示全部楼层

程序上没有看出来~因为我很少这么用。

如果你真的很着急的话,把图片改成PNG格式(透明背景)的图片,很快就解决这个问题了.

 楼主| 发表于 2006-4-20 11:29:02 | 显示全部楼层

请问 鼯鼠 大哥 如何把图片改成PNG格式(透明背景)的图片?

我的图片资源是 一张原始图片 和一张掩码图片 我将掩码图片做成了他的管道

来正确的显示图片 因为原始图在游戏中看到很多的毛边 与场景不搭配

ps怎么才可以使用这张掩码图 得到想要的区域然后做成PNG格式(透明背景)的图片?

发表于 2006-4-20 11:34:07 | 显示全部楼层

其实也很简单啦~

在通道里,选择白色部分,这样不是就可以得到你要的那部分图片了吗?然后复制粘贴到新建的文件里,再去掉背景,保存成PNG格式的就好啦~

pSprite->Draw( g_pTexture,
&srcRect,
&vCenter,
&vPosition,
D3DCOLOR_COLORvalue(1.0f,1.0f,1.0f,1.0f) );

刚才发现你这个是有问题的~~最后一个参数你这样设置是不是代表是白色呢?因为我没有用过D3DCOLOR_COLORvalue这个函数,不过一般这里的用法是0Xffffffff,前面的0Xff的这两个ff表示绘制图片的时候不透明100%,也就是不透明的,其余的fffffff表示白色混合,也就是不改变原来的图片颜色。如果采用D3DCOLOR_COLORvalue会不会默认的不透明度是0,那样那就是说这张图片是透明的。
[此贴子已经被作者于2006-4-20 12:18:14编辑过]
 楼主| 发表于 2006-4-20 13:44:12 | 显示全部楼层

实在是太感谢 鼯鼠兄了 0Xffffffff是对的

没想到从此以后出了gameres 我们还有选择~

这里一定会有更多的支持者!

[em06]
发表于 2006-4-20 14:05:14 | 显示全部楼层

呵呵,不客气~

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

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-19 01:42

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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