最少的 openGL 初始化

Minimum openGL initializations

我正在尝试学习 OpenGL,目前正在尝试将其与 Qt 一起使用。我想做的是将视频文件中的帧加载到纹理中,然后将其显示在屏幕上。我稍后可能会尝试做的唯一一件事就是启用缩放功能。牢记这一点,我需要使用什么来最大化性能的最小 OpenGL 初始化。更具体地说,我是否需要禁用某些功能,以便我可以最大限度地提高性能以满足我目前非常有限的需求。

例如OpenGL上的Qt教程初始化为:

 glEnable(GL_DEPTH_TEST);
 glEnable(GL_CULL_FACE);
 glShadeModel(GL_SMOOTH);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 glEnable(GL_MULTISAMPLE);
 static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
 glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

我认为我应该能够安全地禁用其中的大部分功能,但我不确定,因为我仍在尝试弄清楚其中的大部分功能实际上会做什么。

glEnable(GL_DEPTH_TEST);

启用深度测试,防止三角形在应该隐藏在其他三角形后面时覆盖其他三角形。保持启用状态以避免伪影。

glEnable(GL_CULL_FACE);

防止绘制背对着你的三角形。启用以获得更好的性能。

 glShadeModel(GL_SMOOTH);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
 glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

所有这些都是已弃用的固定功能管道的一部分,可以删除并使用着色器进行模拟。

如果您刚刚开始学习,这里有更多信息:

glEnable(GL_DEPTH_TEST) 

仅当您计划绘制 3D 形状时保留它

glEnable(GL_CULL_FACE)

删除它,直到你习惯顺时针和逆时针绘制点的重要性的概念。否则您可能看不到您的第一个渲染形状,因为它们可能会被剔除。首先在没有这个的情况下绘制它们,然后启用它并尝试顺时针和逆时针绘制。

glShadeModel(GL_SMOOTH) 

留下那个。它只是指示渲染器混合不同的颜色并沿着形状平滑它们。如果你把不同的颜色放在不同的点上,它们会被平滑地插值。

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_MULTISAMPLE);
static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

如果您已经过了渲染简单形状的阶段,请使用这些来试验光照。您还应该提供几何体的法线,以便查看效果。如果您真的是初学者,请将这些注释掉,直到您更加熟悉绘图形状。

祝你好运!