关于一次数据渲染 WebGLRenderer renderBufferDirect

关于threejs

threejs是webgl的封装库,提供了方便用户调用调用的接口和函数,涉及几何模型生产,用户交互操作,渲染特效,数学库及渲染优化等,与webgl相比,threejs更易懂易学。

threejs数据流向

虽然threejs非常好的帮助我们封装了各种接口和函数,但是当我们想去学习threejs实现方式,简化实现过程,或者修改调整特效的时候,我们就需要了解threejs渲染步骤和数据流向问题,这篇文章就是做下简单数据流向介绍。

  1. renderBufferDirect{
    1. 创建program对象
      var program = setProgram( camera, fog, material, object ); {
      • var materialProperties = properties.get( material );
        这里有个技巧,就是properties内部是个weakMap,而key就是material,由于properties是全局对象,所以不论在那个方法中,只要确定material,就能获取到对应的 materialProperties

      • 创建threejs WebglProgram;
        initMaterial( material, fog, object );{

        • 创建浏览器内部 WebglProgram
          if ( programChange )....//根据材质名称生成初级片元着色器字符串,主要是main函数核心区域着色器代码
          program = programCache.acquireProgram( material, materialProperties.shader, parameters, programCacheKey );//根据上下文整理好的着色代码整合并创建webgl内部交互的program
          }
      • 对uniform变量传值
        p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix )
        WebGLUniforms.upload

        • uniform 数值变量传值
        • 纹理变量值通过WebGLState传入到gpu中
      • p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );

      • p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );

      • p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );
        }

    2. 创建buffer
      setupVertexAttributes

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,589评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 9,763评论 1 3
  • 没事就多看看书,因为腹有诗书气自华,读书万卷始通神。没事就多出去旅游,别因为没钱而找借口,因为只要你省吃俭用,来...
    向阳之心阅读 10,248评论 3 11
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 127,271评论 2 7