游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2023|回复: 7

小弟想问点关于纹理混合方面的问题(困惑啊~~~)

[复制链接]

12

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
发表于 2007-1-31 16:40:00 | 显示全部楼层 |阅读模式
     一,关于渲染状态设置函数SetRenderState();打开alpha后,  然后就可以设置源和目的颜色
就是这两个函数
g_pMyd3dDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA);
g_pMyd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
但小弟一直没有搞懂,源和目的到底是只的什么,做了一些实验也没有弄得太明白.
    二.因为D3D是硬件ALPHA混合,不像DDRAW自己计算,所以怎么让两张图片,进行ALPHA混合,并且还可以设置ALPHA等级(比如说某张图的像素要多点...)
    三,PS做出来的像DDS,等格式的图片都可以带ALPHA通道,这也可以用到程序中,但是我们有没有办法让一张没有ALPHA通道的图片读到程序里来设置它的ALPHA等级呢?  就想一个模型的材质那样,可以手动设置,这样我感觉就方便许多了,如果只能用工具来设置就太死了
    以上三个问题实在让小弟困惑,还要感谢坛子里的高手们为小弟解惑

12

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2007-1-31 18:16:00 | 显示全部楼层

Re:小弟想问点关于纹理混合方面的问题(困惑啊~~~)

30

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2007-2-1 00:27:00 | 显示全部楼层

Re:小弟想问点关于纹理混合方面的问题(困惑啊~~~)

这个问题很简单...

6

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2007-2-1 00:35:00 | 显示全部楼层

Re:小弟想问点关于纹理混合方面的问题(困惑啊~~~)

顶点的Diffuse Color可以如你所愿

30

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2007-2-1 01:12:00 | 显示全部楼层

Re:小弟想问点关于纹理混合方面的问题(困惑啊~~~)

OutputPixel=SourcePixel*SourceBlendFactor+DestPixel*DestBlendFactor也就是:
Color = TexelColor x SourceBlend + CurrentPixelColor x DestBlend
这个公式的意思是:源像素*源混合因子+目的像素*目的混合因子
其中目的像素(DestPixel)指的是帧缓冲中的数据,源像素(SourcePixel)指的是你将要向帧缓冲中贴的数据
可以理解为用两个混合因子分别指定源像素颜色的深度(SourceBlendFactor)、和目的像素颜色的深度(DestBlendFactor),通过D3DRS_SRCBLEND、D3DRS_DESTBLEND渲染参数来设。OutputPixel就是最终看到的像素
即:
Color = TexelColor x SourceBlend + CurrentPixelColor x DestBlend


alpha混合就是通过上述公式进行的,for example:
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO );   
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE);
是怎么计算的呢:
Color = TexelColor x (0,0,0,0) + CurrentPixelColor x (1,1,1,1)
又for example:
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );   
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
是这么计算的
Color = TexelColor x (A,A,A,A) + CurrentPixelColor x (1-A,1-A,1-A,1-A)
至于这个A是什具体是个什么数呢?想想alpha通道吧。。。alpha通道里每个象素都有一个透明度值,值域为0-1。应该不难想通吧。
再三for example:
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO );   
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_SRCCOLOR);
这个有点复杂哦,请容我说明一下:
Color = TexelColor x (0,0,0,0) + CurrentPixelColor x (R,G,B,A)
使劲看一下,看出来这是做什么吗?这是源颜色与目的色相乘,呵呵,不必我细说下去了吧。
如果我理解有误的地方还请高手赐教一下.

30

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2007-2-1 01:14:00 | 显示全部楼层

Re:小弟想问点关于纹理混合方面的问题(困惑啊~~~)

至于其它的问题,呵呵,阅力不够,无法解答.

30

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2007-2-1 01:15:00 | 显示全部楼层

Re:小弟想问点关于纹理混合方面的问题(困惑啊~~~)

写了这么多我辛苦了半个小时啊,楼主得补尝我...

12

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2007-2-1 10:03:00 | 显示全部楼层

Re:小弟想问点关于纹理混合方面的问题(困惑啊~~~)

握手握手,小弟有点明白了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 09:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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