2013-12-16 5 views
0

Итак, этим вечером я пытался научиться HLSL, но мне сложно заниматься вещами из разных руководств, которые я читал в Интернете, поскольку многие из них нацелены на 3D-проекты и включают в себя матрицы, или написаны для DX11 , хотя я уверен, что многие из вас скажут, что это все равно. Параметр вращения в методе рисования уже используется, поэтому я надеюсь использовать HLSL для поворота объекта. Я не прошу код, но чувствую, что у меня заканчиваются интернет-ресурсы.XNA 2D Rotation 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); 

Имейте в виду, что это только вращает содержимое изображения поэтому он будет выглядеть не так, как вы хотите, если контент не является круговым. , чтобы он работал с любым изображением, которое вам нужно было бы сделать в вершинном шейдере.

удачи и счастливого кодирования :)

Смежные вопросы