DX10/11/12、OpenGL4.0、Vulkan开启Flat shading着色模式

在现代图形引擎中图形管线经历了由固定管线到可编程管线的发展,所以DX、OpenGL早期版本可以在固定管线下直接调用相关API设置着色模式为Flat shading。

  • 以DirectX9中开启Flat shading为例:
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
  • 以OpenGL旧版本中开启Flat shading为例:
glShadeModel(GL_FLAT);

但是目前这些图形引擎(DX10/11/12、OpenGL 4.0、Vulkan)发展出了可编程管线,所以直接调API设置的传统方式废除了,转变成了在变量前添加限定符nointerpolation(hlsl)或flat(glsl)来取消插值,从而开启Flat shading。

  • 以hlsl写的着色器举例:
// 在vertex shader中:
struct VS_TO_PS 
{ 
    float4 Pos:SV_Position; 
    nointerpolation float3 normal:NORMAL; 
    float2 TexCoord:TEXCOORD0; 
};

// 在pixel shader中
struct VS_TO_PS 
{ 
    float4 Pos:SV_Position; 
    nointerpolation float3 normal:NORMAL; 
    float2 TexCoord:TEXCOORD0; 
};

glsl写的着色器类似,只不过是在变量前加flat修饰。

你可能感兴趣的:(渲染,龙书,图形API,DirectX12,OpenGL,Vulkan)