Store Vertices DirectX C++

Store Vertices DirectX C++

本文关键字:C++ DirectX Vertices Store      更新时间:2023-10-16

我目前正在为我的学士论文项目实施一个Octe。我的八叉树采用 std::vector 作为参数:

octree::Octree::Octree(std::vector<const D3DXVECTOR3*> vec) : 
    m_vertices(std::vector<D3DXVECTOR3*>()),
    m_size(m_vertices.size())
{
    int i=0;
    for(;i<m_size;++i) {
        m_vertices.push_back(new D3DXVECTOR3(*vec.at(i)));
    }
}

我询问在渲染顶点并对它们进行任何剔除测试等之前通常用于存储顶点的内容。

我现在保持非常简单,我所拥有的只是一个渲染网格的函数。一些片段:

#define GRIDFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)
struct GridVertex {
    D3DXVECTOR3 position; 
    DWORD color;
};

g_dev->SetTransform(D3DTS_WORLD, &matIdentity);
g_dev->SetStreamSource(0, g_buffer, 0, sizeof(GridVertex));
g_dev->SetTexture(0, NULL);
g_dev->DrawPrimitive(D3DPT_LINELIST, 0, GridSize * 4 + 2);

现在,在渲染它时,我使用我的自定义结构 GridVertex,它为 pos 保存了一个D3DXVECTOR9和一个用于颜色值的 DWORD,并通过将灵活的顶点格式设置为 GRIDFVF 来告诉 GPU。但是在我的八叉树中,我只想存储位置以执行测试,如果某些顶点在我的八叉树内的节点内等等。因此,我想创建另一个名为 SceneManager 的类,并将所有值存储在 std::vector 中,最后将其传递给我的 Octree 类,该类进行测试,然后将检查的顶点传递给 GPU。这是一个可靠的解决方案还是实现这样的东西的共同点?提前致谢

通常,不会将实际的渲染几何顶点本身放在八叉树或使用的任何空间分区结构中。该粒度级别没有用,因为如果构成模型的一组顶点跨越分区节点,以便剔除这些顶点的某些子集,则无法正确绘制模型。

您通常想要做的是让一个对象表示实体及其在世界内的边界(例如,面向轴的边界框或边界球体是简单有效的边界体积(。每个实体还与渲染几何体相关联(或可能由其他子系统关联(。实体本身在八叉树中排序。

然后,使用八叉树确定哪些实体可见,并将其所有关联的渲染几何体提交到卡片。