OpenGL:绘制不带着色器的乘法三角形

时间:2020-07-20 18:54:34

标签: c++ opengl vector render opengl-compat

如何在不使用着色器的情况下绘制三角形? 我有这样的功能:

void GLRenderSystem::renderTriangleSoup(const std::vector<Vertex>& vertices)
{
    /????
}

1 个答案:

答案 0 :(得分:4)

如果您不想使用着色器,则必须创建一个兼容性配置文件OpenGL Context。通过兼容性配置文件,您可以使用立即模式glBegin / glEnd序列。您必须使用OpenGL triangle primitive类型之一。例如:

struct Vertex
{ 
    float x, y, z;
};
glBegin(GL_TRIANGLES);
for (auto &vertex : vertices)
{
    glVertex3f(vertex.x, vertex.y, vertex.z);
}
glEnd();

或者,您使用固定函数属性并定义一个顶点数据数组。在这种情况下,您必须通过glDrawArrays绘制三角形。例如:

glVertexPointer(3, GL_FLOAT, 0, vertices.data());
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, vertices.size());
glDisableClientState(GL_VERTEX_ARRAY);

无论如何,您都必须指定适当的投影和模型视图矩阵。参见glMatrixMode。矩阵取决于顶点坐标的比例。当前矩阵由Identity matrix初始化。因此,如果不设置矩阵,则顶点坐标必须在归一化的设备空间中。 NDC是从(-1,-1,-1)的左,底部,附近和(1、1、1)的右,顶部,远的唯一立方体。 NDC坐标系是左手系。在视口上的投影中,x轴指向右侧,y轴指向上方,z轴指向视图,因此深度由z定义。