c++ - 使用顶点着色器进行图像旋转
问题描述
我有一些顶点着色器,我发帖关注。
它接收目标纹理的角度、缩放以及宽度和高度,其中可能包括旋转的源纹理。
问题是,在销售某些角度的图像时,图像会超出目标纹理。
按照我有两次旋转的结果。
10个毕业生和-20个毕业生。
顶点着色器
cbuffer VS_ROTATE : register (b0)
{
float fxAngle;
float fyAngle;
float fzAngle;
float fScale;
float fWidthSrc;
float fHeightSrc;
float offset;
};
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;
output.Pos = input.Pos;
output.Tex = input.Tex;
output.TexIdx = input.TexIdx;
if (fxAngle == 0.0 && fyAngle == 0.0 && fzAngle == 0.0)
return output;
float fxRadAngle = radians(fxAngle);
float fyRadAngle = radians(fyAngle);
float fzRadAngle = radians(fzAngle);
float2 ptPos = input.Pos.xy;
float2 ptOrigin = ptPos;
ptOrigin.x = (ptOrigin.x - 0.5) * fWidthSrc;
ptOrigin.y = (ptOrigin.y - 0.5) * fHeightSrc;
ptPos.x = ptOrigin.x * cos(fzRadAngle) - ptOrigin.y * sin(fzRadAngle);
ptPos.y = ptOrigin.x * sin(fzRadAngle) + ptOrigin.y * cos(fzRadAngle);
ptPos.x = ptPos.x / fWidthSrc;
ptPos.y = ptPos.y / fHeightSrc;
ptPos.x = ptPos.x * fScale + 0.5;
ptPos.y = ptPos.y * fScale + 0.5;
output.Pos.xy = ptPos.xy;
return output;
};
10个毕业生
-20 格
解决方案
推荐阅读
- perl - Interllij IDEA PERL5 sdk 未配置
- python - 如何使用像 len[arry]-1) 这样的 python 在 arry 上获取文本文件中的最后一行作为索引?
- git - 仅将 git 用于已编辑文件而不是完整源代码?
- python - 我的 python 游戏在运行时没有响应
- android - 子元素的材质cardView背景颜色
- git - 从一个存储库中获取历史更改作者信息并推送到另一个存储库
- python - Jupyter notebook 找不到已安装的模块
- linux - ext4 文件系统上的 inode 垃圾收集
- javascript - 如何在邮递员中发送对象
- java - 错误:无法解决:com.github.kinvey:android-sdk:v4.3.2