[WebGL入门][001]绘制一个点

着色器

webGL依赖于一种新的称为着色器的绘图机制,

绘制一个点中,用到了顶点着色器和片元着色器
下面是绘制一个点的程序(直接复制无法工作),

// 顶点着色器
var VSHADER_SOURCE = 
  'void main() {\n' +
  '  gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n' + // 设置顶点坐标
  '  gl_PointSize = 10.0;\n' +                    // 设置顶点大小
  '}\n';

// 片元着色器
var FSHADER_SOURCE =
  'void main() {\n' +
  '  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n' + // 设置顶点颜色
  '}\n';

function main() {
  // 获取到canvas元素
  var canvas = document.getElementById('webgl');

  // 获取WebGL上下文
  var gl = getWebGLContext(canvas);
  if (!gl) {
    console.log('Failed to get the rendering context for WebGL');
    return;
  }

  // 初始化shaders!! 这里使用了书中自己编写的初始化程序,屏蔽了底层差异
  if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {
    console.log('Failed to intialize shaders.');
    return;
  }

  // 设置黑色清空,(设置背景色)
  gl.clearColor(0.0, 0.0, 0.0, 1.0);

  // 清空
  gl.clear(gl.COLOR_BUFFER_BIT);

  // 绘制
  gl.drawArrays(gl.POINTS, 0, 1);
}

执行流程
  1. 获取canvas元素
  2. 获取WebGL绘图上下文
  3. 初始化着色器
  4. 设置canvas背景色
  5. 清除canvas
  6. 绘图
顶点着色器

用来描述顶点的特性的程序,
示例程序中 ,以下代码代表了一个顶点着色器
是使用OpenGL ES着色器语言

  'void main() {\n' +
  '  gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n' + // 设置顶点坐标
  '  gl_PointSize = 10.0;\n' +                    // 设置顶点大小
  '}\n';

和C语言一样,必须包含一个main()函数 不能为main()函数指定参数
顶点着色器中 gl_Position和gl_PointSize 是内置在顶点着色器中的,而且有着特殊的含义,分别代表顶点的位置,和顶点的尺寸,
gl_Position必须被赋值,否则无法工作

vec4 vec4(v0,v1,v2,v3)
可以根据值来创建vec4对象,

vec4表示由4个浮点数组成的矢量(x,y,z,w)
w为齐次坐标
(x,y,z,w)等价为(x/w,y/w,z/w)

片元着色器

下面是一个片元着色器

  void main() { 
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // 设置顶点颜色
  };

gl_FragColor 是片元着色器的唯一内置变量,控制像素在屏幕上的颜色
类型也是vec4类型的
代表(R,G,B.A)
详细的片元着色器的内容将会在以后介绍.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值