C语言 CGFX 着色器从 alpha 通道中提取数据



我也在Nvidia开发人员讨论中发布了这个。

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

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

每个原始涂漆的掩模都夹在 0 - .9(以防止使用 fmod 归零)因此,如果 Vert 具有:

掩码 1 =.857

掩码 2 =.345

掩码 3 -.948

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

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

如果我输出 Mask1,我会得到正确的混合良好的蒙版。我通过以下方式做到这一点:

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

如果我输出 Mask2,我会得到所有这些奇怪的伪影。看起来面具 1 正在将自己推到顶部,即使我只输出 Mask2。我很肯定数学有效,我在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

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

只需向顶点着色器添加一个额外的输出值。给它一个"texcoord"语义,例如 float4 掩码:TEXCOORD1;

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

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

相关内容

  • 没有找到相关文章

最新更新