如何在 X 轴上镜像 3D 网格
Posted
技术标签:
【中文标题】如何在 X 轴上镜像 3D 网格【英文标题】:How to mirror a 3D mesh on the X axis 【发布时间】:2021-11-22 22:12:22 【问题描述】:我正在开发一个 C++ 3D 游戏,当我从屏幕上的 glTF 文件加载网格时,我遇到了问题。 This 是我要加载的 3D 模型。
我正在使用 DirectX 11。
如您所见,网格在 X 轴上翻转,我不知道如何才能翻转看起来正常。
这就是我想要的样子。
struct VS_INPUT
float4 position: POSITION0;
float2 texcoord: TEXCOORD0;
float3 normal: NORMAL0;
;
struct VS_OUTPUT
float4 position: SV_POSITION;
float2 texcoord: TEXCOORD0;
float3 normal: NORMAL0;
float3 direction_to_camera: TEXCOORD1;
;
cbuffer constant: register(b0)
row_major float4x4 m_world;
row_major float4x4 m_view;
row_major float4x4 m_proj;
float4 m_light_direction;
float4 m_camera_position;
float4 m_light_position;
float m_light_radius;
;
VS_OUTPUT vsmain(VS_INPUT input)
VS_OUTPUT output = (VS_OUTPUT)0;
// WORLD SPACE
output.position = mul(input.position, m_world);
output.direction_to_camera = normalize(output.position - m_camera_position.xyz);
// VIEW SPACE
output.position = mul(output.position, m_view);
// SCREEN SPACE
output.position = mul(output.position, m_proj);
output.texcoord = input.texcoord;
output.normal = normalize(mul(input.normal, m_world));
return output;
这是我正在使用的顶点着色器。
【问题讨论】:
【参考方案1】:output.position.x = -output.position.x; in vertex shader
或者在加载网格和解析顶点时反转顶点的 x 坐标。
v.x = -v.x;
或在 x 轴上缩放 -1 应该可以解决问题。
SetScale( -1.0f, 1.0f, 1.0f );
【讨论】:
我在解析顶点时反转了 x 轴,但网格似乎从里向外翻了 imgur.com/a/HtjoVV9 imgur.com/a/aOR040k 试试顶点着色器然后告诉我... 顶点着色器的结果完全相同:( 尝试在 x 轴上缩放 -1 我已经在 x 轴上反转了刻度,但结果似乎是一样的imgur.com/a/dLk2GB9以上是关于如何在 X 轴上镜像 3D 网格的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Actionscript 3 为在 z 轴上弹跳的球设置动画?