无论出于何种原因,这都令人惊讶地难以诊断,但我认为这里的某个人将能够很快说出问题所在。
对我来说,当多边形应该是顺时针缠绕时,看起来多边形是用逆时针缠绕绘制的,也就是说,它们是朝内而不是朝外的。我想知道是否有另一种方法(除了创建冗余多边形)在两侧(正面和背面)制作 directx 填充多边形。
以下是渲染模型的多张截图(这是一个麋鹿玩具):
为了比较,另一个模型正确渲染,如下所示:
谢谢你看
无论出于何种原因,这都令人惊讶地难以诊断,但我认为这里的某个人将能够很快说出问题所在。
对我来说,当多边形应该是顺时针缠绕时,看起来多边形是用逆时针缠绕绘制的,也就是说,它们是朝内而不是朝外的。我想知道是否有另一种方法(除了创建冗余多边形)在两侧(正面和背面)制作 directx 填充多边形。
以下是渲染模型的多张截图(这是一个麋鹿玩具):
为了比较,另一个模型正确渲染,如下所示:
谢谢你看
就像亚当迈尔斯所说的那样,很可能是缺乏深度测试。以下是Fixed-Function流水线深度测试的链接:Z Buffer
根据您使用的 DirectX 版本,您必须进行不同的设置。最终,您可以像这样在 HLSL 中启用深度测试:
ZEnable = true;
如果您使用的是固定功能管道,则必须设置设备渲染状态:
dev->SetRenderState(D3DRS_ZENABLE, TRUE);
但是,如果是因为三角形“缠绕”又名剔除模式,您可以在 HLSL 着色器中更改它,如下所示:
CullMode = none; // Where Cullmode can be none, ccw, or cw
同样,如果您使用的是固定功能管道,您可以设置设备渲染状态,如下所示:
dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
//D3DCULL_NONE, D3DCULL_CCW or D3DCULL_CW
将cullmode设置为 none 将导致两边都被绘制。我很确定这两个问题之一就是您从这些屏幕截图中遇到的问题。祝你好运!