游戏开发论坛

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

OGL里怎么在一个pass里做带单独alpha map的多层纹理混合?

[复制链接]

3

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2006-1-10 10:36:00 | 显示全部楼层 |阅读模式
有三个纹理:tile0(RGB), tile1(RGB), alphamap(A)
目的是用alphamap对前两层纹理做混合。结果=  tile0 * (1-A) + tile1 * A

一般是在两个pass做:
pass0:
stage0:
color op: replace
color src: tile0

pass1:
stage0:
color op: replace
color src: tile1
stage1:
color op: modulate
color src0: previous
color src1: alphamap


不知道能不能在一个pass里做: 用openGL实现, 不用fragment program。
谢谢各位!
我有一种做法但是结果不对,不知道为什么:
stage0:
color op: replace
color src: tile0
stage1:
alpha op: replace
alpha src0: alphamap
color op: replace
color src0: prevous
stage2:
color op: interpolate
color src0: previous rgb
color src1: tile1
color src2: previous alpha
在不加stage2时,渲染结果和预料一样,既有tile0的RGB又有alphamap的alpha,加上stage2之后tile1完全覆盖tile0,而没有按照alpha融合,感觉alpha全为1.0似的。
这个GL_INTERPOLATE用得对吗?
请各位老大帮帮忙,小的给你们作揖了。  [em6]

8

主题

182

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
发表于 2006-1-11 18:33:00 | 显示全部楼层

Re:OGL里怎么在一个pass里做带单独alpha map的多层纹理混合?

pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
   pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
   pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
   pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );

   pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_CURRENT );
   pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
   pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
   pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );

   pd3dDevice->SetTextureStageState( 2, D3DTSS_COLORARG1, D3DTA_TEXTURE );
   pd3dDevice->SetTextureStageState( 2, D3DTSS_COLOROP,   D3DTOP_BLENDCURRENTALPHA );
   pd3dDevice->SetTextureStageState( 2, D3DTSS_COLORARG2, D3DTA_CURRENT );
   pd3dDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );

俺只对dx熟悉点。这个是dx的实现,看对你有帮助否。(注意,alpha纹理在1阶)

1

主题

50

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2006-1-11 18:39:00 | 显示全部楼层

Re:OGL里怎么在一个pass里做带单独alpha map的多层纹理混合?

这样真的能行么?看起来不像是正确的样子。

3

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-1-12 13:04:00 | 显示全部楼层

Re:OGL里怎么在一个pass里做带单独alpha map的多层纹理混合?

谢谢hugp1973, 你的做法应该是对的,实现和我openGL的实现是一样的,我哪天用的一块GF MX440,他妈的居然只支持两个texture stage,所以不行,我晕。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 05:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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