游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3164|回复: 9

请问这种效果应该如何实现?

[复制链接]

8

主题

46

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2006-6-13 14:01:00 | 显示全部楼层 |阅读模式
e.g. :

我把一张泥土的贴图贴到一个地形上,然后又有一张草地的带alpha通道的贴图...

我想要的结果是草地的可以部分覆盖泥土的,但是通过草地的alpha贴图的透明部分还可以看到

泥土...  请问这种效果应该如何实现?

如果调用DX的函数库的化应该怎么写?

还有能不能自己写一个函数 来实现这种功能?

谢谢大家!! [em5] [em5]

8

主题

46

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2006-6-13 16:40:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

难道说DX只支持单通道贴图?不支持双通道或者多通道贴图?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-6-14 10:07:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

SetTexture SetTextureStageState

33

主题

118

帖子

173

积分

注册会员

Rank: 2

积分
173
发表于 2006-6-14 10:56:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

一般情况下细节贴图需要用单独一个pass渲染,而且细节贴图不需要使用alpha通道,而是通过一个单独的mask map来调节覆盖的范围和程度,自己看一下crytek的sandbox就明白如何作了.

2

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2006-6-14 11:59:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

支持最多8层纹理吧。。。看下SDK里面的MFCtex就可以了。

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-15 12:48:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

首先把泥土和草地分别设置到0、1层纹理
SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);

SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_BLENDTEXTUREALPHA);
SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_CURRENT);
SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_TEXTURE);

SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);

SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE);
SetTextureStageState(2, D3DTSS_ALPHAOP, D3DTOP_DISABLE);

因为你是全透或者全遮,所以草地层的alpha必须为0和1

8

主题

46

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2006-6-15 19:09:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

谢谢楼上的几位拉....

那我还想知道,dx最多支持几层alpha贴图啊?

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-15 21:39:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

DX支持8层普通Texture,1层Displacement Map和4层Vertex Textures

9

主题

104

帖子

104

积分

注册会员

Rank: 2

积分
104
QQ
发表于 2006-6-15 21:50:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

用象素SHADER就可实现,先用POHOSHOP之类的工具做一张底图,就是简单的区分出草地以及土地和石头小路的色块,但注意中间的过度,否则出来很死板,然后在FX中写入简单的ALPHA的处理就行,给你提供参考一下,这是核心部分
        float4 Color0 = tex2D( Sampler0, In.Tex0 * 15.0f );
        float4 Color1 = tex2D( Sampler1, In.Tex0 * 15.0f );
        float4 Color2 = tex2D( Sampler2, In.Tex0 * 15.0f );
        float4 Alpha = tex2D( SamplerAlpha, In.Tex0 );
        float4 ColorOut = Color0 * Alpha.x + Color1 * Alpha.y + Color2 * Alpha.z;
这是我以前的做一个小例子中的,感觉过度的很自然,

3

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-6-15 22:19:00 | 显示全部楼层

Re:请问这种效果应该如何实现?

你的草地贴图(图片文件)的alpha通道数值必须为0(没有草的地方)或者1(有草的地方)。
这点东西做多个PASS感觉有点不划算,当然也是可以的。用Shader做最直接了当,效果也肯定更好。楼上貌似专门专门用了一张Alpha图,利用RGB通道保存了每个层的透明度,不过这个办法可能需要专门写个生成Alpha图的编辑器,最终效果和Alpha图关系可能很大。以上纯属猜测,说错了表打偶。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 18:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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