2

在 DirectX 9 中它是 g_d3dDevice->SetRenderState( D3DRS_SHADEMODE , D3DSHADE_FLAT); dx11 的 API 怎么样

谢谢

////////更新1///////

顶点/像素更碎,光线根本不会产生效果。例如。3 vectex 有红色、绿色、蓝色。如果打开 FLAT ode ,它将用第一种颜色填充所有三角形,如果 SMOOTH 模式 ,您将使用 Gouraud Shading 获得一个彩色三角形。

在顶点分片中,我得到了顶点颜色。

在像素分片中,我得到了像素颜色,但已经插值了。

没有灯光没有正常信息,这是一个二维程序。

而且我不要求用相同颜色填充三角形的方法。我只找到了使用 FLAT SHADEMODE 的方法。

////////更新2///////

struct VertexShaderInput
{
    float2 pos : POSITION;
    float4 color : COLOR0;
};

struct VertexShaderOutput
{
    float4 pos : SV_POSITION;
    nointerpolation float4 color : COLOR0;
};

但它也使用 Gouraud 着色。

////////更新3///////

我找到一个话题

http://www.gamedev.net/topic/621313-directx11-and-smooth-shading 作者说“我没有在 Blender 中激活平滑阴影”但我在 Blender 中找不到关键字

4

2 回答 2

3

您可以通过在顶点数据上使用nointerpolation修改器来做到这一点。

struct VS_OUTPUT_AND_PS_INPUT
{
    float4 f4Position : SV_POSITION;    
    nointerpolation float3 f3WorldNormal : NORMAL;
};

您还可以对任何顶点数据使用非插值以获得有趣的结果。

于 2013-04-15T04:50:54.110 回答
0

如果我没记错的话,您要的是固定功能管道。在 DirectX 11 中,所有即时模式渲染、固定功能管道的东西都被彻底抛弃了(你仍然可以在旧版本的 OpenGL 和非常旧的 DirectX 版本中获得它,但你想要闪亮的新 DirectX 11)。你现在的绘制方式是编写HLSL 着色器,然后通过ID3D11Buffer*相关 API将其存储在 Vertex Buffers 中。然后调用设备上下文的DrawIndexedDraw函数。

与旧 OpenGL 和旧 DirectX 的固定管道和硬状态机相比,这是一个非常大的变化。

如果您遵循本教程可能会有所帮助。它将为您提供一个很好的起点,如果您了解 C++ 11,您甚至可以使用std::unique_ptr.

编辑: 我提到固定功能管道的原因是因为 SHADEMODE 用于由 GPU 上的固定功能管道执行的照明计算。因为您正在编写自己的 HLSL 着色器来绘制事物,所以您无需设置“阴影模式”。相反,您可以通过编写自己的 HLSL 着色器来定义自己的着色模式。我不确定你是否还在考虑使用 DX11 进行固定功能管道编程,所以我确保在这个答案中尽可能地包容。

简短版:不存在,不要打扰。平坦/平滑着色可以通过编写您自己的遵循光和物理定律的着色器来实现,其中许多之前已经完成,并为您的使用进行了简化和解释。祝你好运!

于 2013-04-14T18:28:51.907 回答