当前位置: 首页 > news >正文

WebGL: 几个入门小例子

本文罗列几个WebGL入门例子,用于帮助WebGL学习。

一、概述

WebGL (Web Graphics Library)是一组基于Open ES、在Web内渲染3D图形的Javascript APIs。

Ref. from Khronos Group: WebGL

WebGL™ is a cross-platform, royalty-free open web standard for a low-level 3D graphics API based on OpenGL ES, exposed to ECMAScript via the HTML5 Canvas element. 

二、配置WebGL开发环境

三、例子1:绘制三角形

<!DOCTYPE HTML>
<html lang="en"><head><title>Draw a triangle</title><meta charset="utf-8"><script type="text/javascript">var gl;var canvas;var shaderProgram;var vertexBuffer;function createGLContext(canvas){var names = ["webgl", "experimental-webgl"];var context = null;for(var i = 0; i < names.length; i++){try{context = canvas.getContext(names[i]);}catch(e){if (context){break;}}}if(context){context.viewportWidth = canvas.width;context.viewportHeight = canvas.height;}else{alert("Failed to create WebGL context!");}return context;}function loadShader(type, shaderSource){var shader = gl.createShader(type);gl.shaderSource(shader, shaderSource);gl.compileShader(shader);if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)){alert("Error compiling shader" + gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null}return shader;}function setupShaders(){var vertexShaderSource = "attribute vec3 aVertexPosition;				\n" +"void main()									\n" + "{												\n" +"	gl_Position = vec4(aVertexPosition, 1.0);	\n" + "}									            \n";var fragmentShaderSource = "precision mediump float;						\n" +"void main()									\n" + "{												\n" +"	gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);	\n" + "}									            \n";var vertexShader = loadShader(gl.VERTEX_SHADER, vertexShaderSource);var fragmentShader = loadShader(gl.FRAGMENT_SHADER, fragmentShaderSource);shaderProgram = gl.createProgram();gl.attachShader(shaderProgram, vertexShader);gl.attachShader(shaderProgram, fragmentShader);gl.linkProgram(shaderProgram);if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)){alert("Failed to setup shaders!");}gl.useProgram(shaderProgram);shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");}function setupBuffers(){vertexBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);var triangleVertices = [0.0, 0.5, 0.0,-0.5, -0.5, 0.0,0.5, -0.5, 0.0];gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertices), gl.STATIC_DRAW);vertexBuffer.itemSize = 3;vertexBuffer.numberOfItems = 3;}function draw(){gl.viewport(0,0, gl.viewportWidth, gl.viewportHeight);gl.clear(gl.COLOR_BUFFER_BIT);gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, vertexBuffer.itemSize, gl.FLOAT, false, 0, 0);gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);gl.drawArrays(gl.TRIANGLES, 0, vertexBuffer.numberOfItems);}function startup(){canvas = document.getElementById("myGLCanvas");gl = createGLContext(canvas);setupShaders();setupBuffers();gl.clearColor(0.0,0.0,0.0,1.0);draw();}</script></head><body onload="startup();"><canvas id="myGLCanvas" width="500" height="500"></canvas></body>
</html>

参考资料

Andreas Anyuru. Professional WebGL Programming: Developing 3D Graphics for the Web.

Kouichi Matsuda, Rodger Lea. WebGL Programming Guide: Interactive 3D Graphics Programming with WebGL.

网络资料

WebGLhttps://www.khronos.org/webgl/

WebGL 2.0 Specificationhttps://registry.khronos.org/webgl/specs/latest/2.0/

Three.jshttps://threejs.org/

BabylonJShttps://www.babylonjs.com/

http://www.lryc.cn/news/110020.html

相关文章:

  • PAT(Advanced Level)刷题指南 —— 第一弹
  • 【BASH】回顾与知识点梳理(九)
  • Android 版本 对应的 API版本
  • Django 异常信息 E302 expected 2 blank lines, found 1
  • 2019年09月《全国青少年软件编程等级考试》Python一级真题解析
  • mybatis如何防止SQL注入
  • DoIP学习笔记系列:(三)用CAPL脚本过“安全认证”,$27服务实现
  • 【Linux】多路转接 -- select函数
  • ospf于mgre中应用(直连与星型拓扑)
  • Web压测工具http_load原理分析
  • flask------消息闪现 flash
  • 【C++】数据结构与算法:常用查找算法
  • 【Spring Cloud 六】Hystrix熔断
  • FTP使用教程
  • 网络安全(黑客技术)自学
  • 使用公式与格式控制Excel快速实现计划甘特图
  • ChatGPT即将取代程序员
  • opencv-33 图像平滑处理-中值滤波cv2.medianBlur()
  • 跟CZY一起深入理解C++(1)-一些基础知识
  • bash变量和参数介绍
  • Qt 信号与槽
  • 目标检测与跟踪 (1)- 机器人视觉与YOLO V8
  • mlr3verse vs KM曲线:谁能更精准地预测生存率?
  • TechTool Pro for mac(硬件监测和系统维护工具)
  • 排序算法(九大)- C++实现
  • lettuce连接池的源代码(link)
  • 小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)
  • 37.利用linprog解 有约束条件多元变量函数最小值(matlab程序)
  • 分页Demo
  • ChatGPT超详细介绍与功能与免费网页版(超全面!)