2013-04-10 69 views
2

我是图形编程的初学者。我遇到了一个“纹理视图”创建超出纹理的情况,然后将此资源视图设置为VS资源。总结:DirectX:使用纹理的顶点着色器

CreateTexture2D(D3D10_TEXTURE2D_DESC{ 640, 512, .... **ID3D10Texture2D_0c2c0f30**) 
CreateShaderResourceView(**ID3D10Texture2D_0c2c0f30**, ..., **ID3D10ShaderResourceView_01742c80**) 
VSSetShaderResources(0, 1, [**0x01742c80**]) 

当,什么是当我们使用纹理顶点着色的情况?谁能帮忙?

谢谢。

回答

3

这完全取决于你试图达到的效果。

如果要分别对顶点着色,通常使用顶点颜色分量。但是没有任何东西阻止你对纹理中的颜色进行采样。 (除了它可能更慢)。

另外,不要让名字欺骗你。 纹理可以用于很多不仅仅是着色。它们基本上是预先计算的功能。例如,您可以使用Textue1D提交波动函数来为衣服制作动画或摇动草/ foilage。而且由于它是纹理,因此您可以为绘制的每个对象使用不同的波形,而无需切换着色器。

Direct3D开发人员只是想为您提供最大的灵活性。这包括在所有着色器阶段使用纹理资源。

+0

其实我看到的例子中,他们大多数情况下都使用'Texture1D'。所以你可以给你一些关于你正在谈论的wave函数的指针。 – 2013-04-10 09:20:49

+1

想想正弦波。不用在着色器中计算'float sinX = sin(x)',你只需简单地从你的正弦函数查找纹理中抽取值:'float sinX = FunctionTexture.Sample(Sampler,x).r'。而且由于该函数在着色器中没有进行硬编码,所以可以使用任何可以打包成一维纹理(常量,噪声,渐变等)的数据。在这种情况下'x'将是纹理坐标。像素的颜色是函数值f(x)'。 – Lucius 2013-04-10 11:05:31

相关问题