2013-04-10 78 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

相關問題