按照惯例,我们编写了一个简单的 Hello World 程序。另外,蓝紫还有一系列的向导程序,每一个渲染引擎下均可以通过向导程序来了解该引擎的一些使用方法。接下来,让我们和蓝紫的图形图像世界打声招呼吧。
与大部分 Hello World 程序比较起来,我们这里的 Hello World 看起来稍显复杂。本来可以做一个更简单的例子,比如渲染一个平面的效果而不是立体的,或者最简单的情况下,输出纯色。但图形图像的世界总是离不开三维,掌握三维光线追踪基本技术是很有必要的。渲染经典的立方体,差不多就是图形图像领域的 Hello World 了。
$js
const canvas = await Lan.canvasfs({
preludes : 'base,rays,int3',
textures : 'C1,T2',
});
Lan.loop(canvas.render);
$fs
@run @target(screen) render directly to screen {
// camera
vec3 ro = vec3(2.5, 1, 0), rd = rayDir(vec3(UVx2, 1.5), ro);
// intersection
mat3 mt = rot3(vec3(uTime * .15, uTime * .1, 0));
vec4 it = intBox(ro, rd, vec3(.4), mt);
// shading
if (it.x > 0.) {
vec3 n = texBump(texture1, ro + rd * it.x, it.yzw, 3e-4);
rd = reflect(rd, n);
}
FLUSH(texture(texture0, rd));
}
作为一个 Hello World 程序,我们已经尽量让代码简单一点了,但还是有二十来行。其中包含了一点点 JavaScript 以及大部分的 GLSL 着色器代码。整体来说还算比较简单,至少是很容易学会的。
蓝紫目前总共有六种渲染引擎,它们分别使用各自独有的编程模型。比如,canvasfs 引擎是基于 WebGL 的像素渲染引擎。我们为每一个渲染引擎提供了一些向导程序,使用向导程序可以部分了解该渲染引擎的特性,或者作为一个模版开始我们自己的渲染程序开发。
蓝紫的能力远不止这些向导程序所能展示,我们可以使用蓝紫进行各类图形图像相关的处理计算以及创意渲染。要真正做出有趣的作品,首先需要一个好的创意,然后才是选择合适的渲染引擎。蓝紫作为一个基础平台,目标是尽量为渲染提供基础功能支持,让渲染程序更加稳健,让渲染开发尽量简单。