CGFX着色器从alpha通道提取数据

时间:2012-06-25 05:49:46

标签: c colors shader vertex cg

我也在Nvidia Developer讨论中发布了这个。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

我正在学习编写我的第一个cgfx着色器 - 一个地形着色器。 所以我只能使用1个顶点通道(alpha通道),我希望它能存储3个蒙版。我在3d App Maya中编写了一个脚本没问题,我可以在十分位置存储1个掩码,在hundreths中存储1个,在千分之一处存储1个。

每个原始绘制的面具被夹在0 - .9(以防止用fmod清零) 所以如果一个顶点有:

面具1 = .857

面具2 = .345

面具3 -.948

此顶点的组合Alpha通道为= .839

我遇到的问题是我无法在我的着色器中将这些蒙版正确地提取到单独的蒙版中。

如果我输出Mask1,我会得到正确的混合蒙版。 我是这样做的:

float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;

如果我输出Mask2,我会得到所有这些奇怪的文物。即使我只输出Mask2,看起来mask1正在自我推动。我很肯定数学运算,我在Maya中运行相同的东西来存储值开始。谁能告诉我为什么会这样?

偶:

float Mask2 = frac(Mcolor *10);

应该将掩模2推到十分之一处并擦除掩模1会产生相同的伪像。

float Mcolor = In.VertColor.a;
float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;
float Mask2 = (fmod((Mcolor * 100f ), 10f)) *.111f;

我在Nvidia论坛上发布了一些问题的图片,但我不能在这里发布,因为垃圾邮件预防。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

非常感谢帮助 - 谢谢阅读!如果您有时间,请解释您的回复,我是编程的新手,所以描述性越好越好!

1 个答案:

答案 0 :(得分:0)

只需在顶点着色器中添加一个输出值即可。给它一个' texcoord'语义,例如float4 Masks:TEXCOORD1;

然后只需分配' OUT.Masks.x'而不是' Mask1,' ' OUT.Masks.y'而不是' Mask2'等

在片段/像素着色器中,只需在输入中包含相同的值(使用连接器结构使其易于管理),然后只需阅读“IN.Masks.x'等