为了生成 BabylonJS 场景,需要用 Javascript 编写代码,BabylonJS 引擎会处理该代码并将结果显示在屏幕上。 场景可以通过改变网格、灯光或摄像机位置来改变。 为了及时显示可能的变化,屏幕显示(帧)以每秒 60 帧的速度重新绘制。
推荐:用 NSDT设计器 快速搭建可编程3D场景。
简化一下,流程就是
例如 BabylonJS 引擎采用此代码:
var box = BABYLON.MeshBuilder.CreateBox("box", {}, scene);
并将其转换为顶点数据,包括位置、颜色和法线
BabylonJS 引擎为此数据创建着色器代码并传递到 GPU。
不仅仅是这个以及场景代码,你还可以编写自己的用户着色器代码,该过程变得
着色器是用图形库着色器语言 (GLSL) 编写的,分为两部分。
片段着色器有时称为像素着色器。
2、传递变量位置、法线和 uv 坐标的顶点数据作为类别属性的变量传递给顶点着色器。 用户数据可以作为uniform类别的变量传递给顶点着色器和片段着色器。 数据可以从顶点着色器传递到片段着色器,其中变量类别不同。
在顶点着色器中声明的一个重要的统一变量是 worldViewProjection,因为 BabylonJS 引擎使用它来将场景 3D - 2D 投影数据传递到顶点着色器。
3、变量类型两个着色器中使用的所有变量都必须指定一个类型,并且分配给该变量的任何数字都必须与其类型一致。
例如
int n = 2;
float r = 2.0;
下面的例子抛出一个错误
float r = 2;
类型的一些示例如下:
由于顶点位置需要尽可能准确,因此所有浮点数都应设置为具有高精度。 这是在每个着色器的代码开头使用 -
precision highp float
GLSL 语言有许多内置变量。 两个对于两个着色器的操作至关重要并且始终是必要的是:
函数需要像其参数一样键入并具有以下形式
float NAME(typed parameters) {
*code*
}
5、运行着色器代码
顶点着色器和片段着色器都从一个必须称为 main 且类型为 void 的函数运行,因为它不返回结果。 它还必须将空参数列表键入为 void。
void main(void) {
*code*
}
以下是将着色器代码放入场景的四种方法:
原文链接:http://www.bimant.com/blog/babylonjs-shader-intro/
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved