OpenGL,WebGL基于HTML5/WebGL的建模及构建3D场景

article/2025/3/2 0:19:37

 一、OpenGL和WebGL

        WebGL基于OpenGL ES,它缺少常规OpenGL具有的许多功能,例如仅支持顶点和片段着色器。OpenGL具有WebGL所不具备的功能,例如几何体着色器,镶嵌细分着色器和计算着色。在PC端web应用中,前端的webgl是通过js语句调用的是OpenGL部分接口,在移动设备是调用OpenGL ES部分接口来实现页面的图形渲染。WebGL只是绑定外面接口的一层。webGL和openGL的区别为:性质不同、插件支持不同、用途不同。WebGL 2.0基于OpenGL ES 3.0,确保了提供许多选择性的WebGL 1.0扩展,并引入新的API。

webgl、OpenGL
Webgl、OpenGL

 

        WebGL和openGL的区别为:性质不同、插件支持不同、用途不同。WebGL 2.0基于OpenGL ES 3.0,确保了提供许多选择性的WebGL 1.0扩展,并引入新的API。


一、性质不同

1、webGL:webGL的为。是一种用于展示各种3D模型和场景的绘图协议,并提供了3D图形的API。

2、openGL:openGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。

二、插件支持不同

1、webGL:webGL利用底层的图形硬件加速功能进行的图形渲染作,无需任何浏览器插件支持。

2、openGL:openGL通过HTML脚本本身实现Web交互式三维动画的制作,需要浏览器插件支持。

三、用途不同

1、webGL:webGL可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。

2、openGL:openGL用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

OpenGL:

        OpenGL(Open Graphics Library),开放图形库/开放式图形库,用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API),这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象,而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D,OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

WebGL:

        WebGL是一种 3D绘图标准,允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。

webgl、OpenGL
webgl、OpenGL

 

二、基于HTML5/WebGL的建模

        WebGL,定义了一套API,能够允许在网页中的canvas标签中使用类似于Open GL,实际上是一套基于OpenGL ES 2.0的3D图形API。

WebGL特点与优势

1、WebGL内嵌在浏览器中,不需要安装插件和库就可以直接使用;

2、由于WebGL基于浏览器,不是基于操作系统。所以可以直接在多种平台运行WebGL程序;

3、WebGL程序由HTML和JavaScript文件组成,可以直接发送给对方在浏览器中展示;

4、不需要搭建开发环境,可以直接通过文本编辑器开发;

5、由于WebGL继承自OpenGL,所以OpenGL相关资料都可以拿来参考。

WebGL的基本图元包括:点、线段、三角形。

一个代码案例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绘制三角形</title><link rel="stylesheet" href="styles/app.css">
</head>
<body><canvas id="canvas"></canvas><script>const random = Math.random;/*** 获取随机颜色* @returns { Object } 颜色对象*/function randomColor () {return {r: random() * 255,g: random() * 255,b: random() * 255,a: random() * 1}}const canvas = document.querySelector('#canvas');canvas.width = window.innerWidth;canvas.height = window.innerHeight;const gl = canvas.getContext('webgl');gl.clearColor(0, 0, 0, 1);gl.clear(gl.COLOR_BUFFER_BIT);// 顶点着色器const vertexShaderSource = `// 设置浮点数据类型为中级精度precision mediump float;// 接收顶点坐标 (x,y)attribute vec2 a_Position;void main () {gl_Position = vec4(a_Position, 0.0, 1.0);}`;const vertexShader = gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader, vertexShaderSource);gl.compileShader(vertexShader);// 片元着色器const fragmentShaderSource = `// 设置浮点数据类型为中级精度precision mediump float;// 接收 JavaScript 传过来的颜色值(rgba)uniform vec4 u_Color;void main(){vec4 color = u_Color / vec4(255, 255, 255, 1);gl_FragColor = color;}`;const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,fragmentShaderSource);gl.compileShader(fragmentShader);// 着色器程序const program = gl.createProgram();gl.attachShader(program, vertexShader);gl.attachShader(program, fragmentShader);gl.linkProgram(program);gl.useProgram(program);// 获取着色器程序中变量的指针位置const a_Position = gl.getAttribLocation(program, 'a_Position')const u_Color = gl.getUniformLocation(program, 'u_Color');// 定义三角形的三个顶点const positions = [0, 0.5,     // 上顶点-0.5, -0.5, // 左顶点0.5, -0.5   // 右顶点];// 创建缓冲区const buffer = gl.createBuffer();// 绑定缓冲区并指定缓冲区的类型gl.bindBuffer(gl.ARRAY_BUFFER, buffer);// 往缓冲区中写入数据gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);// 将属性绑定到缓冲区gl.enableVertexAttribArray(a_Position);// 如何读取缓冲区数据// 指定要修改的顶点属性的索引(允许哪个属性读取当前缓冲区的数据) - a_Position// 指定每个顶点属性的组成数量(一次读取几个数据) - 2// 指定数组中每个元素的数据类型 - gl.FLOAT(32 位 IEEE 标准的浮点数,占用 4 个字节)// 当转换为浮点数时是否应该将整数数值归一化到特定的范围 - false(对于类型 gl.FLOAT 和 gl.HALF_FLOAT,此参数无效)// 步长(即:每个顶点所包含数据的字节数)0 表示一个属性的数据是连续存放的// 偏移量(指定顶点属性数组中第一部分的字节偏移量)(在每个步长的数据里,目标属性需要偏移多少字节开始读取;必须是类型的字节长度的倍数)0 * 4 = 0gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);// 随机颜色const { r, g, b, a } = randomColor();// 向片元着色器传递颜色信息gl.uniform4f(u_Color, r, g, b, a);// 绘制三角形// 指定绘制图元的方式 - gl.TRIANGLES(三角形)// 指定从哪个点开始绘制 - 0// 指定绘制需要使用到多少个点 - 3gl.drawArrays(gl.TRIANGLE_STRIP, 0, 3);</script>
</body>
</html>


http://chatgpt.dhexx.cn/article/krXXg1bF.shtml

相关文章

3d游戏场景建模设计师需要学哪些软件?

一 跳出软件层面理解软件,我们要牵着软件的鼻子走。 关于3D建模软件有哪些,这个问题,我在下面会详细的讲解,一堆,会看的你眼疼,这个问题不着急,淡定。首先我需要讲的是跳出软件这个层面来理解软件,放大我们的格局来学习软件,只有理解了更大的层面,才能更好的去知道怎…

用3Ds Max做三维场景建模

今天的3ds max教程是三维场景建模中关于对场景进行布局和建模,了解如何使用3ds Max和Marmoset创建一个世界末日的立体模型,这是建模技能的完美组合展示。 场景布局和建模. 本教程将指导您完成创建diorama的过程,您将能够在Web浏览器中进行交互。本教程将分为三个部分。我将…

3D 游戏角色建模和场景建模哪个好

建模师&#xff0c;依据原画师的设计稿件进行三维立体模型的创造&#xff0c;对应原画设计中的角色设计、场景设计、道具设计&#xff0c;建模工作也有角色建模、场景建模、道具建模之分。很多人就问了&#xff1a;“游戏角色建模和场景建模哪个好&#xff1f;学哪个赚钱多&…

动画设计与制作——3D Max场景建模《我的家》V-Ray 4.1

《动画设计与制作》 下载源文件资源包&#xff08;文章结尾有说明&#xff09;&#xff1a; https://download.csdn.net/download/weixin_48388330/76484706 所使用的工具软件及环境&#xff1a; 3ds Max 2020、V-Ray 4.1 一、实验目的&#xff1a; 熟练使用3ds Max 2020&a…

3D场景建模,次世代游戏模型怎么被做出来?

与传统游戏相比&#xff0c;次世代游戏以精简的面数表达出高精度模型效果&#xff0c;各种材质和纹理贴图根据写实效果展示&#xff0c;注重质感表现。 次世代游戏模型怎么被做出来&#xff1f; 次世代游戏角色制作通过颜色贴图、高光贴图、法线贴图、自发光贴图多种贴图丰富…

游戏行业中3D设计都有哪些职位?3D场景建模该如何学习?

游戏行业中的3D美术设计呢&#xff0c;分为场景设计&#xff0c;以及角色设计。 3D场景建模师 场景则是游戏中的环境、机械、道具等死物。场景开始对美术的要求没有那么高&#xff0c;只要熟练运用3D软件就行了。 逐步掌握游戏场景元素设计理念&#xff0c;不同风格游戏的制…

有哪些知识是学习3D场景建模必备的?

1.场景建模的知识点 视角范围&#xff1a;视角范围是玩家在游戏中所能看到的游戏场景的范围&#xff0c;视角是随着玩家的移动不停变换的&#xff0c;基于这点才有了场景分块的必要性。 场景分块&#xff1a;在游戏中不管你的视角在哪个位置&#xff0c;可能你的视角方向上只能…

游戏建模:模型场景制作过程分享

创建一个有趣、精细的3D艺术模型本身也是有挑战性的。把它们放在一起,为讲述故事的3D电影组建一个逼真的环境是更困难的工作。 如果目标是这个环境中的一个单独静态图像,那么2D 插画将会是一个更具成本效益、更好效果地替代3D渲染的选择。但是,3D领域的过人之处是通过动画将…

3d场景建模什么水平能找到工作?次世代游戏场景建模需要学多久

3d建模学多久这个问题不是很好回答&#xff0c;谁才知道你的实力怎么样&#xff0c;努力的态度怎么样&#xff0c;如果你三天打鱼两天晒网&#xff0c;我估计一万年也学不会。如果你全力以赴认真的学&#xff0c;五六个月就能很好的玩转3D建模&#xff0c;当然如果你想达到大神…

如何自学3D游戏场景建模和设计?

游戏行业毕竟是靠作品说话的&#xff0c;想做场景美术自然就得把场景“搭”得足够好&#xff0c;当然&#xff0c;这里说的“搭”指的是包括场景建模、材质、特效、渲染等流程在内的整个场景美术制作流程&#xff0c;场景美术这个范畴很宽泛的。 这个**“搭得好”**的标准究竟…

3D场景建模学习必备的基础知识

1.场景建模的知识点 视角范围&#xff1a;视角范围是玩家在游戏中所能看到的游戏场景的范围&#xff0c;视角是随着玩家的移动不停变换的&#xff0c;基于这点才有了场景分块的必要性。 场景分块&#xff1a;在游戏中不管你的视角在哪个位置&#xff0c;可能你的视角方向上只能…

3D建模场景怎么做?

在开始做3d场景之前,我绘制了一些草图。选好需要的草图后(图01),我用3ds max从标准几何体开始制作模型,还使用了像lathe,bevel以及unwrap uvw这类的基本修改器。 用不同的参数值进行复制(图02)。为了完成这个项目,一些额外的模型也是必须的(图03)。 图01 图02 图…

3D场景的制作步骤

2.4 3D场景的制作步骤 1. 场景建模的使用目的 使用地形生成编辑器在模拟自然地形效果上有很大的优势&#xff0c;但是也有局限性。在表现比较规整的地形&#xff0c;比如一现代化城市&#xff0c;初具规模的小镇&#xff0c;地下宫殿等等就存在这样的局限。因为使用地形编辑…

3D游戏建模:3dmax对场景进行布局和建模

今天的3dmax教程是关于对场景进行布局和建模&#xff0c;了解如何使用3ds Max和Marmoset创建一个世界末日的立体模型&#xff0c;这是建模技能的完美组合展示。 第一部分 - 场景布局和建模… 本教程将指导您完成创建diorama的过程&#xff0c;您将能够在Web浏览器中进行交互。…

TPAMI 2022|基于最优传输理论的无监督图像重建学习

作者丨王炜 来源丨上海交通大学类脑智能应用与技术中心 编辑丨极市平台 论文地址&#xff1a;https://ieeexplore.ieee.org/document/9763342 开源地址代码&#xff1a;https://github.com/wangweiSJTU/OTUR 图像重建是底层计算机视觉中的一个基本问题&#xff0c;对于后续的许…

LDCT图像重建论文——Eformer: Edge Enhancement based Transformer for Medical Image Denoising

Eformer是进行低剂量CT图像重建的工作&#xff0c;它第一次将Transformer用在医学图像去噪上&#xff0c;值得一读。 知乎同名账号同步发布。 目录 一、架构和贡献二、主要细节2.1&#xff0c;Sobel Convolution2.2, 下采样和上采样2.3&#xff0c;损失函数 三、实验 一、架构…

图像重建中常用的滤波器的设计

在医学图像重建的过程中&#xff0c;如果不使用滤波器&#xff0c;重建出来的图像与使用滤波器重建出来的图像的质量相差甚远&#xff0c;效果如下图所示&#xff1a; 由上图我们可以看出&#xff0c;使用滤波器能极大的提高重建图像的质量&#xff0c;其中最为常见的就是RL滤波…

【CV】CVPR2021高光谱图像重建论文笔记

论文名称&#xff1a;Deep Gaussian Scale Mixture Prior for Spectral Compressive Imaging 论文下载&#xff1a;link 论文年份&#xff1a;CVPR 2021 论文被引&#xff1a;18&#xff08;2022/04/17&#xff09; 论文代码&#xff1a;https://github.com/TaoHuang95/DGSMP A…

【图像处理】基于ART算法实现图像重建matlab源码

1 简介 ART算法是一个不断迭代的图像重建方法,提高该算法的重建速度一直是研究的重要方面.针对ART算法简化权因子重建模型,提出了一种快速网格遍历算法,通过简单的加减法和比较运算,即可确定射束穿过的网格编号.由于权因子在迭代过程中实时计算,节省了大量的存储空间,大大…

CT图像重建的演变——从滤波反投影到人工智能(Martin J. Willemink和Peter B. Noël)

摘要 在20世纪70年代初&#xff0c;第一台CT扫描仪就已经采用了迭代重建算法&#xff0c;然而由于当时的硬件计算能力不足&#xff0c;并没有实现真正的临场应用。事实上直到2009年&#xff0c;第一代迭代重建算法才真正的实现商业化&#xff0c;并取代了传统的滤波反投影算法…