【问题标题】:OpenGL: Drawing multiply triangles without shaders [closed]OpenGL:在没有着色器的情况下绘制乘法三角形[关闭]
【发布时间】:2020-11-10 02:22:09
【问题描述】:

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

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

【问题讨论】:

  • 为什么不想使用着色器?
  • 因为我在大学被要求做这样的任务

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


【解决方案1】:

如果您不想使用着色器,则必须创建兼容性配置文件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 定义。

【讨论】:

  • 谢谢,你帮了我。我会尽力做到这一点。 (如果我突然在英语上犯错误,那么对不起,我不是该语言的母语)
  • @Stepan_Radchenko 我认为我犯的错误比你多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多