2013-12-16 134 views
0

因此,今天晚上我一直在努力學習HLSL,但我很難從我在線閱讀的各種指南中獲取內容,因爲它們中的很多都是針對3D項目並涉及矩陣,或者是爲DX11 編寫的,但我相信你們中許多人會說它們都是一樣的。 draw方法中的旋轉參數已被使用,所以我希望使用HLSL旋轉對象。 我不是在這裏要求代碼,但我覺得我的網上資源不足。XNA 2D旋轉HLSL

http://blog.josack.com/2011/07/my-first-2d-pixel-shaders-part-2.html。在閱讀本教程後,我發現我不需要擔心VertexShaderFunction,並且我可能能夠通過tex2D方法完全執行轉換。

sampler s0; 

float4 PixelShaderFunction(float2 coords: TEXCOORD0) : COLOR0 
{ 
    float4 color = tex2D(s0, coords); 
    return color; 
} 

technique Technique1 
{ 
    pass Pass1 
    { 
     PixelShader = compile ps_2_0 PixelShaderFunction(); 
    } 
} 
+0

我不明白你在問什麼。你想完成什麼,什麼不工作?如果您使用內置旋轉參數,則默認頂點着色器應旋轉精靈。如果你想讓它做別的事情,那麼你需要指定其他的東西。 –

回答

0

您在您的案例中獲得名爲'coords'的像素着色器中的原始紋理座標。

此座標包含像素的x和y座標。通過調整這個座標(在你的情況下使用sin,cos來旋轉它),你可以用很多方式編輯渲染圖像。因此,對於你

它會是這樣的:(這只是我的腦海所以不知道是否真的有效與否)

float sin = sin(rotation); 
float cos = cos(rotation); 
float2 newcoords = coords - 0.5; //move to center 
newcoords.x = (coords.x * cos) + (coords.y * (-sin)); 
newcoords.y = (coords.x * sin) + (coords.y * cos); 
float4 color = tex2D(s0, newcoords + 0.5); 

請記住,這只是旋轉圖像的內容所以如果內容不是循環的,它看起來不是你想要的。 ,以使它可以在頂點着色器中與任何圖像一起使用。

祝你好運,開心編碼:)