熟悉opengl的朋友们,都很清楚opengl编程的大致流程:
1、系统及窗口初始化
2、顶点及其属性数据的准备
3、编译和加载着色器程序
4、绑定或映射数据
5、绘制相关图元
从以上流程可看出,关键在于对顶点数据的处理和渲染。这里提供3种对顶点数据处理的算法思路,相应的得到3种渲染模式。
- 立即渲染模式
这种算法先将所有点计算出来,再存储到一个数组中,最后通过一个函数调用显示所有点。这种模式适用于对交互式性能要求高的图形程序,但再次绘制这些点时,就需要重新计算才能显示,伪代码如下:
init_system_window();
p= init_point()
for(some_number_of_points) {
q = gerate_a_point(p)
display_the_point(q)
p = q
}
cleanup()
- 延迟渲染模式
这种算法将数据存储在数据结构中,不用重新计算就可再次显示这些数据,但若数据总是发生变化——比如制作一个动画,则需要将显示的点反复从CPU发送至GPU,将导致性能瓶颈,伪代码如下:
init_system_window();
p= init_point()
for(number_of_points) {
q = gerate_a_point(p)
store_the_point(q)
p = q
}
display_all_points()
cleanup()
- 现代渲染模式
将生成数据发送并存储至GPU,然后在GPU中显示这些已存储的数据,从而使重新显示这些数据避免额外的数据传输开销,当对象移动时,只需调用一个函数来修改空间位置数据。伪代码如下:
init_system_window();
p= init_point()
for(number_of_points) {
q = gerate_a_point(p)
store_the_point(q)
p = q
}
send_all_points_to_GPU()
display_data_on_GPU()
cleanup()
网友评论