gpt4 book ai didi

c++ - 网格表示 - 一个顶点(空间位置)= 一个位置,tex 坐标,法线?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:24 27 4
gpt4 key购买 nike

我正在编写用于在我的 DirectX 应用程序中存储、加载和渲染静态网格的类。

我知道 Box 模型可以使用 8 个顶点,但通常它使用 24 或 36 个(因为一个“空间中的顶点”实际上是 3 个具有相同位置和不同纹理坐标/法线的顶点)。

我的问题是:网格如何(例如从 3ds max 或类似应用程序导出的角色网格)?

我现在正在为我的应用程序开发导出器插件。我应该:

  • 对于网格中的每个顶点,将其导出(作为位置、法线、纹理坐标)- 在某些情况下是否总是足够?

或者可能:

  • 对于每个面,导出 3 个顶点(pos、normal、tex 坐标)

?

我不确定 3ds max 中相同“顶点”的纹理坐标/法线是否不同(位置相同但法线/tex 坐标不同?)。

第二个 aprouch 应该可以很好地与 D3DPT_TRIANGLELIST 一起使用,但是对于来自 3ds max 的 5.000 个顶点网格,我将获得 15.000 个“真实”顶点(+/- 每个 3 将具有相同的位置和不同的 tex 坐标/法线)。

此外,在下面的示例中,对象由两部分组成 - 顶部有#1 平滑组,底部有#2 平滑组 - 对于顶点“内部”平滑组和两组之间,我的问题看起来会有所不同吗(例如顶部/底部的连接)?

换句话说:黑色圆圈“顶点”是一个具有相同 pos/tex 坐标/法线的“真实”顶点,还是只有 4 个具有相同位置的顶点(4 个具有相同一切的顶点有意义吗?)?

那红色的呢?

我正在使用索引缓冲区。

enter image description here

最佳答案

为每个三角形导出三个顶点总是足够的,但可能涉及不必要的重复数据。如果相邻的三角形具有不相交的纹理坐标或其他属性,您必须复制以产生正确的渲染结果。如果需要,您可以在后处理步骤中合并重复的顶点。

关于您的引用图像,表面上似乎没有应用任何纹理,因此红色圆圈顶点必须是缓冲区中的两个不同顶点才能创建颜色不连续性,这是应该的。黑色圆圈顶点不需要,但它仍然可以重复。通常,您应该在平滑组内共享顶点,而不用担心跨组重复数据删除。如果顶点吞吐量最终成为一个问题,您可以考虑对其进行优化,但对于大多数工作负载,您将受到像素或填充率的限制。

关于c++ - 网格表示 - 一个顶点(空间位置)= 一个位置,tex 坐标,法线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22669228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com