游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1810|回复: 3

关于透明渲染,以及TextureStageState的几个疑问

[复制链接]

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2005-11-16 16:13:00 | 显示全部楼层 |阅读模式
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
c = src*1+dst*1
以上是为了实现将后面渲染得画面跟前面的画面叠加在一起所采用的代码,那么跟下面的代码有多大区别呢
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR );
pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR );
c = src+dst*(1-src)??这两个等式正确么?


下面这个又是什么意思呢?
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,
                        D3DTOP_SELECTARG2 );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,
                        D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,
                        D3DTOP_SELECTARG2 );
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2,
                        D3DTA_DIFFUSE );

SDK上说D3DTOP_SELECTARG2 是选择纹理的第二个颜色参数或者ALPHA参数作为输出,上面的意思就应该是选择纹理的第二个颜色参数和alpha参数作为输出,可是这是作为什么东西的输出呢,这里的第二个参数就是后面指的顶点颜色吗?我的图形的顶点的颜色是在shader里面算出来的,这里设定有什么意义?

69

主题

450

帖子

473

积分

中级会员

战魂缔造者

Rank: 3Rank: 3

积分
473
QQ
发表于 2005-11-16 20:53:00 | 显示全部楼层

Re:关于透明渲染,以及TextureStageState的几个疑问

看下我的文展吧
http://www.xdu.cn/XDUMAIN/res/CG/200412/541.html

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2005-11-16 21:23:00 | 显示全部楼层

Re:关于透明渲染,以及TextureStageState的几个疑问

我看了上面的文章,但还是不太明白,因为我提出的操作是在一个纹理层(0层)里面的,你的文章所说的似乎是不同的纹理层之间的操作吧。其实也就是不明白这个arg1和arg2到底是从哪里取出的数据

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2005-11-16 21:27:00 | 显示全部楼层

Re:关于透明渲染,以及TextureStageState的几个疑问

//TextureStage0
pd3dDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
pd3dDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_DISABLE);

将纹理的颜色不动的给下一层。

//TextureStage1
pd3dDevice->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_BLENDDIFFUSEALPHA);
pd3dDevice->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_TEXTURE);
pd3dDevice->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_CURRENT);
pd3dDevice->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE);

将纹理的的颜色和上次的颜色进行普通ALPHA渲染


//TextureStage2
pd3dDevice->SetTextureStageState(2,D3DTSS_COLOROP,D3DTOP_ADD);
pd3dDevice->SetTextureStageState(2,D3DTSS_COLORARG1,D3DTA_DIFFUSE);
pd3dDevice->SetTextureStageState(2,D3DTSS_COLORARG2,D3DTA_CURRENT);
pd3dDevice->SetTextureStageState(2,D3DTSS_ALPHAOP,D3DTOP_DISABLE);

将D3D顶点的DIFFUSE颜色和上次的颜色层进行相加。


这里面,1层和2层的操作都带2个参数,第一个参数就是从前面的纹理层得到数据,第二个参数就是从当前的纹理层得到数据是么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 16:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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