本帖最后由 523066680 于 2017-6-6 11:22 编辑
这个机制是降低了门槛,但是新的GL很快淘汰了所有 begin 和 end 系列的函数,是因为性能瓶颈的缘故。
有大量的图像优化、像素操作可以交给 GPU。
特别是像Julia 集合图像,程序这边只需要给出画布范围大小,比如 800 * 600
把公式交给 GPU,GPU着色器在渲染图形的每一个像素点时候,通过你给定的公式计算该点的颜色值。

原图是 800x600 的(拉至全屏也不影响渲染效率,工作电脑的显卡是 GT430)
性能和易用性、自由度,往往很难兼得。
简单的脚本绘图可以脱离C语言,但是到了Shader层次,仍然是在 C/C++ 的语法上进行扩充
片元着色器/代码来自蓝皮书 | | | | | | | | | #version 150 core | | in vec2 initial_z; | | out vec4 color; | | uniform sampler1D tex_gradient; | | uniform vec2 C; | | | | void main(void) | | { | | vec2 Z = initial_z; | | int iterations = 0; | | float rate; | | const float threshold_squared = 16.0; | | const int max_iterations = 256; | | while (iterations < max_iterations && dot(Z, Z) < threshold_squared) | | { | | vec2 Z_squared; | | Z_squared.x = Z.x * Z.x - Z.y * Z.y + C.y; | | Z_squared.y = Z.x * Z.y * 2.0 + C.x; | | Z = Z_squared; | | iterations++; | | } | | | | if (iterations == max_iterations) | | color = vec4(0.0, 0.0, 0.0, 1.0); | | else | | rate = float(iterations) / 10.0; | | color = vec4( sin(rate), cos(1.0-rate), exp(rate), 1.0); | | }COPY |
|