【问题标题】:XNA 2D Rotation HLSLXNA 2D 旋转 HLSL
【发布时间】:2013-12-16 04:01:25
【问题描述】:

所以今晚我一直在尝试学习 HLSL,但我很难从网上阅读的各种指南中吸取教训,因为其中许多都是针对 3D 项目并涉及矩阵,或者是为DX11 虽然我相信你们中的许多人会说它都是一样的。 draw 方法中的旋转参数已经被使用,所以我希望使用 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();
    }
}

【问题讨论】:

  • 我不明白你在问什么。你想完成什么,什么不起作用?如果您使用内置旋转参数,则默认顶点着色器应旋转精灵。如果你想让它做其他事情,那么你需要指定其他事情是什么。

标签: c# xna transformation hlsl


【解决方案1】:

在您的情况下,您会在名为“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);

请记住,这只会旋转图像的内容,因此如果内容不是圆形的,它将看起来不是您想要的样子。 要使其适用于任何图像,您需要在顶点着色器中执行相同操作。

祝你好运,编码愉快:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2010-11-16
    相关资源
    最近更新 更多