GLFW入门教程02.03:三角形

目的

基于GLFW3使用固定管线方法画一个三角形。

核心模式与立即渲染模式

早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便。

OpenGL的大多数功能都被库隐藏起来,开发者很少能控制OpenGL如何进行计算的自由。而开发者迫切希望能有更多的灵活性。随着时间推移,规范越来越灵活,开发者对绘图细节有了更多的掌控。立即渲染模式确实容易使用和理解,但是效率太低。因此从OpenGL3.2开始,规范文档开始废弃立即渲染模式,并鼓励开发者在OpenGL的核心模式(Core-profile)下进行开发,这个分支的规范完全移除了旧的特性。

当使用OpenGL的核心模式时,OpenGL迫使我们使用现代的函数。当我们试图使用一个已废弃的函数时,OpenGL会抛出一个错误并终止绘图。现代函数的优势是更高的灵活性和效率,然而也更难于学习。立即渲染模式从OpenGL实际运作中抽象掉了很多细节,因此它在易于学习的同时,也很难让人去把握OpenGL具体是如何运作的。现代函数要求使用者真正理解OpenGL和图形编程,它有一些难度,然而提供了更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程。

现在的很多教程依旧使用的是早期OpenGL的立即渲染(固定渲染管线)模式,你可能见过,它就是通过gl_Begin(图元),glVertex3D(…)…来绘制一些基本图形。

而现代openGL使用的是核心模式,它是通过VAO,VBO…等,使用drawElements(…),或者drawArray(…)来绘制基本图形。

为什么要使用核心模式?

  • 性能方面,固定渲染管线的渲染比较慢,它在绘制图形的时候,由于顶点数据是存在CPU中,一次只能通过glVertex3D来发送一个顶点数据到GPU中,而核心模式是可以使用顶点数组来一次传输大量的顶点数据。
  • 应用方面,核心模式可以直接编写着色器程序,扩展性有了很大提升,很多特效的制作,依赖于着色器程序。

代码

在上一篇显示空白界面的基础上,添加功能

1
2
3
4
5
6
7
//display func
glColor3f(1.0f,0,0);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0);
glVertex3f(0.5,-0.5,0);
glVertex3f(0,0.5,0);
glEnd();

效果

编译运行代码

三角形


GLFW入门教程02.03:三角形
https://blog.jackeylea.com/glfw/how-to-display-triangle/
作者
JackeyLea
发布于
2024年8月11日
许可协议