3D游戏引擎学习二(HelloWorld源码分析)

  1. 项目结构
    HelloWorld$>
    
    • 从box.gpb加载场景
    • 设置场景相机的画面比例
    • 从加载的场景中找到有向光节点
    • 获取光线对象
    • 从加载的场景中获取叫box的一个模型节点
    • 获取节点模型对象
    • 设置模型的材质为res/box.material
    • 设置材质的环境光为场景的环境光
    • 设置材质的有向光
    • 设置材质的有向光的方向

    游戏更新和渲染
    void HelloWorld::update(float>
    
    • 让节点随着时间围绕Y轴旋转
    • 渲染场景:_scene->visit 会遍历场景中的每个节点,并调用HelloWorld::drawScene去分别绘制节点
    • 渲染节点:渲染节点模型
  2. 场景文件和材质脚本分析
    场景文件(box.gpb)
    材质文件(box.material)
    material>
    
    • 材质名称:box
    • 使用一个技术和一个通道
    • 顶点着色器程序:res/colored.vert
    • 片段着色器程序:res/colored.frag
    • 着色器全局顶点变换矩阵设置:绑定系统的顶点变换矩阵
    • 着色器全局顶点变换逆向转置矩阵:绑定系统顶点变换逆向转置矩阵
    • 着色器漫反射光颜色配置:使用白色光(rgba)
    • 渲染器状态属性:采用背面裁剪,开启深度检测

    顶点着色器程序

    // Inputs
    attribute>
    

    • 输入:模型空间顶点变量,模型空间法线变量;全局顶点变换矩阵,全局顶点变换逆向转置矩阵
    • 输出:视图空间法线
    • 计算视图空间位置:全局顶点变换矩阵*模型空间顶点位置
    • 计算视图空间法法线:全局顶点变换逆向转置矩阵*模型空间法线

    片段着色器程序

    // Uniforms
    uniform>
    

    • 输入:全局漫反射色,环境光色,有向光色,有向光方向
    • 输入:顶点法线
    • 计算有向光方向和顶点法线的单位向量
    • 计算环境光:全局漫反射光*全局环境光
    • 计算漫反射光:全局有向光*全局漫反射光*有向光与法线的点乘
    • 输出:片段透明度=漫反射色的透明度,片段色=环境光+漫反射光



你可能感兴趣的:(opengl,移动开发)