[英]How to mirror a 3D mesh on the X axis
我正在開發 C++ 3D 游戲,當我從屏幕上的 glTF 文件加載網格時,我遇到了網格外觀問題。 這是我正在嘗試加載的 3D model。
我正在使用 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;
}
這是我正在使用的頂點着色器。
output.position.x = -output.position.x; in vertex shader
或者在加載網格和解析頂點時反轉頂點的 x 坐標。
v.x = -v.x;
或在 x 軸上縮放 -1 應該可以解決問題。
SetScale( -1.0f, 1.0f, 1.0f );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.