5
我正在尋找一種很好的方式來渲染具有不同頂點佈局的網格對象,而不需要付出很大努力(例如爲每個頂點佈局定義一個渲染器類)。您可以在下面看到一些不同頂點格式的例子。Opengl - 渲染不同的頂點格式
enum EVertexFormat
{
VERTEX_FORMAT_UNDEFINED = -1,
VERTEX_FORMAT_P1 = 0,
VERTEX_FORMAT_P1N1,
VERTEX_FORMAT_P1N1UV,
VERTEX_FORMAT_P1N1C1,
VERTEX_FORMAT_P1N1UVC1,
};
// the simplest possible vertex -- position only
struct SVertexP1
{
math::Vector3D m_position; // position of the vertex
};
struct SVertexP1N1
{
math::Vector3D m_position; // position of the vertex
math::Vector3D m_normal; // normal of the vertex
};
// a typical vertex format with position, vertex normal
// and one set of texture coordinates
struct SVertexP1N1UV
{
math::Vector3D m_position; // position of the vertex
math::Vector3D m_normal; // normal of the vertex
math::Vector2D m_uv; // (u,v) texture coordinate
};
struct SVertexP1N1C1
{
math::Vector3D m_position; // position of the vertex
math::Vector3D m_normal; // normal of the vertex
uint32_t m_color_u32; // color of the vertex
};
struct SVertexP1N1UVC1
{
math::Vector3D m_position; // position of the vertex
math::Vector3D m_normal; // normal of the vertex
math::Vector2D m_uv; // (u,v) texture coordinate
uint32_t m_color_u32; // color of the vertex
};
背景是,我想渲染不同的對象。它們中的一些是不具有紋理座標或法線的基元(例如平面,球體)。另一方面,我想呈現更復雜的對象,其中有法線,紋理座標等。有沒有一種智能的方法或設計可以避免編程多個渲染器類,而是使用單個渲染器類?我知道,這也會影響着色器。
哦,這是一個不錯的主意。謝謝! – bobby