美文网首页
webgl 着色器

webgl 着色器

作者: Viewwei | 来源:发表于2021-05-04 11:54 被阅读0次

GUI 渲染能够让我们看到界面,主要是靠着色器进行渲染的.着色器一般分为顶点着色器,片元着色器.

  • 顶点着色器
    顶点着色器主要负责位置和大小

  • 片元着色器
    片元着色器只要负责片元的渲染,包括颜色.片元在 js 上面表示像素的意思

  • 注意
    片元着色器和顶点着色器都是 GLS ES 语言进行编写的,因此需要对 js 语言进行转换.因此我们需要在 js中创建一个 program. 他主要是对我们的 js 文件进行翻译.

function initShaders(gl, vsSource, fsSource) {
  //创建程序对象
  const program = gl.createProgram();
  //建立着色对象
  const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource);
  const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource);
  //把顶点着色对象装进程序对象中
  gl.attachShader(program, vertexShader);
  //把片元着色对象装进程序对象中
  gl.attachShader(program, fragmentShader);
  //连接webgl上下文对象和程序对象
  gl.linkProgram(program);
  //启动程序对象
  gl.useProgram(program);
  //将程序对象挂到上下文对象上
  gl.program = program;
  return true;
}

function loadShader(gl, type, source) {
  //根据着色类型,建立着色器对象
  const shader = gl.createShader(type);
  //将着色器源文件传入着色器对象中
  gl.shaderSource(shader, source);
  //编译着色器对象
  gl.compileShader(shader);
  //返回着色器对象
  return shader;
}

export { initShaders };

  • 注意
    在着色器中必须使用分号结尾.在顶点着色器中有什么 GLLS ES 语言特有定义的变量,比如 gl_Position:表示 顶点着色器的位置,gl_PointSize:表示着色器的大小,必须使用浮点数. gl_FragColor在片元着色器中表示填充的颜色
  • 完成实例代码如下
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <style>
        #canvas {
            /* width: 100px; */
            /* height: 100px; */
            /* background: red; */
        }
    </style>
    <body>
        <canvas id="canvas"></canvas>
    </body>
    <!-- 顶点着色器 -->
    <script id="vertexShader" type="x-shader/x-vertex">
        void main(){
            gl_Position = vec4(0.5, 0, 0.5, 1);
            //  必须使用浮点数
            gl_PointSize = 50.0;
        }
    </script>
    <!-- 片元着色器 -->
    <script id="fragmentShader" type="x-shader/x-fragment">
        void main(){
            gl_FragColor = vec4(1, 1, 0, 1);
        }
    </script>
    <script type="module">
    import { initShaders } from "./jsm/util.js";
    const canvas = document.getElementById('canvas')
    canvas.width = window.innerWidth
    canvas.height = window.innerHeight
    // 获取着色器文本
    const vsSource = document.querySelector("#vertexShader").innerText;
    const fsSource = document.querySelector("#fragmentShader").innerText;
    console.log(vsSource,fsSource)
    const gl = canvas.getContext('webgl')
    initShaders(gl, vsSource, fsSource)
    //声明颜色 rgba
    gl.clearColor(0, 0, 0, 1);
    //刷底色
    gl.clear(gl.COLOR_BUFFER_BIT);
    gl.drawArrays(gl.POINTS, 0, 1)
    </script>
</html>

相关文章

  • webgl 入门(二)

    webgl 参数传递 webgl是基于着色器进行绘制的.着色器本身无法与 JavaScript 进行通讯以及数据的...

  • webGL学习第一天(下)

    webGL,主要通过 vertex shader (顶点着色器),fragment shader (片元着色器)来...

  • WebGL简易教程 地理地形绘制

    WebGL简易教程(一):第一个简单示例 WebGL简易教程(二):向着色器传输数据 WebGL简易教程(三):绘...

  • WebGLShader

    WebGLShader对象是webgl中的着色器,它分为顶点着色器(vertex shader)和片元着色器(fr...

  • WebGL编程指南入门基础篇

    WebGL编程指南入门基础篇 着色器介绍 着色器分为顶点着色器 跟 片元着色器 顶点着色器描述顶点特性,包括位置,...

  • Webgl学习笔记 1 初始化shader

    编译GLSL ES代码,创建和初始化着色器供WebGL使用. 1,创建着色器对象 (gl.createShader...

  • webgl 学习笔记

    webgl 介绍 webgl 是在传统的html文件的系统上,添加了 GLSLes(主要是编写着色器的配置) we...

  • WebGL光照阴影映射

      原文地址:WebGL光照阴影映射  经过前面的学习,webgl的基本功能都已经掌握了,我们不仅掌握了着色器的编...

  • webgl 着色器

    GUI 渲染能够让我们看到界面,主要是靠着色器进行渲染的.着色器一般分为顶点着色器,片元着色器. 顶点着色器顶点着...

  • Threejs in autonomous driving -(

    在openGL或者webGL用要想实现多彩绚丽的效果,必须要使用到shader着色器。着色器需要使用GLSL语言来...

网友评论

      本文标题:webgl 着色器

      本文链接:https://www.haomeiwen.com/subject/dhecdltx.html