在3D图形库中建模I剖面

问题描述 投票:2回答:4

我使用Direct3D来显示钢结构中使用的许多I形截面。我的场景中可能有数百个I-section的实例。

我可以这两种方式:

使用方法A,我有更少的表面。但是,打开背面剔除后,只能从一侧看到表面。如果关闭背面剔除,则可能以错误的顺序渲染凸缘(水平板)和腹板(垂直板)。

方法B似乎是正确的(我可以保持背面剔除),但在我的模型中,I部分中的板厚度并不重要,我想避免为每一侧创建一个单独的三角形条带。板。

有更好的解决方案吗?有没有办法只关闭DrawIndexedPrimitives的某些调用背面剔除?如果有的话,我也想要一个平台中立的答案。

graphics directx direct3d 3d
4个回答
1
投票

首先,背面剔除与呈现对象的顺序无关。除此之外,除了它可能看起来更好之外,我会选择B而没有特别的原因。此物也可能不过是一个装满三角形的手;在场景中有数百个应该不是问题。如果是,请尝试查看硬件实例。


1
投票

在OpenGL中,您可以为您绘制的每个三角形切换背面剔除:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

我认为在Direct3D中也可能有类似的东西


1
投票

如果您的I-sections不经常更改,请将所有部分加载到一个大的顶点/索引缓冲区中,并通过一次调用绘制它们。这是最有效的绘制方式,即使你将50万个三角形推向显卡,显卡也能快速完成。

是的,这要求您复制所有部分的顶点数据,但这就是D3D9的使用方式。


1
投票

我会选择A,因为你看到B的距离会浪费处理能力来绘制所有那些退化的三角形。

此外,我只需在z缓冲区中触发它们,并允许它将它全部排序。

如果它变得太慢,那么我会开始考虑优化,但即使是消费者的显卡也可以每秒绘制数百万个多边形。

© www.soinside.com 2019 - 2024. All rights reserved.