我们有一些媒体处理应用程序,我们需要能够旋转框架。我们使用GPU。HLSL中有Vertex Shader,其代码如下:
struct VS_INPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD;
uint TexIdx : TEXINDEX;
};
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float2 Tex : TEXCOORD;
uint TexIdx : TEXINDEX;
};
VS_OUTPUT VS(VS_INPUT input)
{
VS_OUTPUT output;
float2 pos_rotate = input.Pos.xy;
float rads = radians(45);
float cFlare = cos(rads);
float sFlare = sin(rads);
output.Pos = input.Pos;
output.Pos.xy = mul(pos_rotate, float2x2(cFlare, -sFlare, sFlare, cFlare));
output.Tex = input.Tex;
output.TexIdx = input.TexIdx;
return output;
};
所以,据我所知,sin
和cos
以弧度表示角度。radians
以度为单位获取角度。但是,正如我们所看到的,框架旋转到90°而不是45°。
ОК,C ++代码中的问题,在其他调用堆栈中,框架按预期旋转。但是现在很难提供C ++代码...我想,我将把框架放在正确的调用堆栈中。