2013-12-16 90 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); 

请记住,这只是旋转图像的内容所以如果内容不是循环的,它看起来不是你想要的。 ,以使它可以在顶点着色器中与任何图像一起使用。

祝你好运,开心编码:)