【问题标题】:DirectX: Vertex Shader using texturesDirectX:使用纹理的顶点着色器
【发布时间】:2013-04-10 07:55:49
【问题描述】:

我是图形编程的初学者。我遇到了一个案例,其中“ResourceView”是用纹理创建的,然后这个资源视图被设置为 VS Resource。总结一下:

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

当我们在什么情况下使用顶点着色器中的纹理?有人可以帮忙吗?

谢谢。

【问题讨论】:

    标签: graphics 3d directx textures vertex-shader


    【解决方案1】:

    这完全取决于您要达到的效果。

    如果您想单独为顶点着色,通常会使用顶点颜色组件。但是没有什么能阻止你从纹理中采样颜色。 (除了它可能更慢。)

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

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

    【讨论】:

    • 其实我看到的例子,大多数情况下他们使用Texture1D。那么你能否就你所说的波函数提供更多的指点。
    • 想想正弦波。无需在着色器中计算float sinX = sin(x),您只需从正弦函数查找纹理中采样值:float sinX = FunctionTexture.Sample(Sampler, x).r。由于该函数在着色器中没有硬编码,因此您可以使用可以打包到 1D 纹理中的任何数据(常数、噪声、渐变等)。 x 在这种情况下是纹理坐标。像素的颜色为函数值f(x)
    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多