- 项目结构
HelloWorld$>
- 从box.gpb加载场景
- 设置场景相机的画面比例
- 从加载的场景中找到有向光节点
- 获取光线对象
- 从加载的场景中获取叫box的一个模型节点
- 获取节点模型对象
- 设置模型的材质为res/box.material
- 设置材质的环境光为场景的环境光
- 设置材质的有向光
- 设置材质的有向光的方向
游戏更新和渲染
void HelloWorld::update(float>
- 让节点随着时间围绕Y轴旋转
- 渲染场景:_scene->visit 会遍历场景中的每个节点,并调用HelloWorld::drawScene去分别绘制节点
- 渲染节点:渲染节点模型
- 场景文件和材质脚本分析
场景文件(box.gpb)
材质文件(box.material)
material>
- 材质名称:box
- 使用一个技术和一个通道
- 顶点着色器程序:res/colored.vert
- 片段着色器程序:res/colored.frag
- 着色器全局顶点变换矩阵设置:绑定系统的顶点变换矩阵
- 着色器全局顶点变换逆向转置矩阵:绑定系统顶点变换逆向转置矩阵
- 着色器漫反射光颜色配置:使用白色光(rgba)
- 渲染器状态属性:采用背面裁剪,开启深度检测
顶点着色器程序
// Inputs attribute>
- 输入:模型空间顶点变量,模型空间法线变量;全局顶点变换矩阵,全局顶点变换逆向转置矩阵
- 输出:视图空间法线
- 计算视图空间位置:全局顶点变换矩阵*模型空间顶点位置
- 计算视图空间法法线:全局顶点变换逆向转置矩阵*模型空间法线
片段着色器程序
// Uniforms uniform>
- 输入:全局漫反射色,环境光色,有向光色,有向光方向
- 输入:顶点法线
- 计算有向光方向和顶点法线的单位向量
- 计算环境光:全局漫反射光*全局环境光
- 计算漫反射光:全局有向光*全局漫反射光*有向光与法线的点乘
- 输出:片段透明度=漫反射色的透明度,片段色=环境光+漫反射光