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

three.js与webgl在buffer上的对应关系

一、three.js的类名

最近开始接触three.js

看到three.js中的一些类名和webgl的很相似

不自觉的就想对比一下

二、three.js中绘制4个点

// 创建点的几何体
const vertices = new Float32Array([0.0, 0.0, 0.0,    // 点11.0, 0.0, 0.0,    // 点20.0, 1.0, 0.0,    // 点30.0, 0.0, 1.0     // 点4
]);
const geometry = new THREE.BufferGeometry();
const attribute = new THREE.BufferAttribute(vertices, 3);
geometry.setAttribute('position', attribute);// 创建点的材质
const material = new THREE.PointsMaterial({color: 0xff0000,   // 红色size: 0.1          // 点的大小
});// 创建点对象
const points = new THREE.Points(geometry, material);
scene.add(points);

三、webgl中绘制4个点

var vertices = new Float32Array([0.0, 0.0, 0.0,    // 点11.0, 0.0, 0.0,    // 点20.0, 1.0, 0.0,    // 点30.0, 0.0, 1.0     // 点4
]);
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
var a_Position = gl.getAttribLocation(program, "a_Position");
gl.vertexAttribPointer(a_Position, 3, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(a_Position);gl.drawArrays(gl.POINTS, 0, 3);

四、代码比较

先声明一下:

three.js本身进行了一定的封装,

下面的对比,只是辅助理解

在代码具体实现上,不是等价的关系

// 创建点的几何体
const vertices = new Float32Array([0.0, 0.0, 0.0,    // 点11.0, 0.0, 0.0,    // 点20.0, 1.0, 0.0,    // 点30.0, 0.0, 1.0     // 点4
]);
//比较1:three.js
const geometry = new THREE.BufferGeometry();
//比较1:webgl
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);//比较2:three.js
const attribute = new THREE.BufferAttribute(vertices, 3);
geometry.setAttribute('position', attribute);
//比较2:webgl
var a_Position = gl.getAttribLocation(program, "a_Position");
gl.vertexAttribPointer(a_Position, 3, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(a_Position);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

相关文章:

  • 【Harmony】文本公共接口EditMenuOptions的使用
  • 第二十七讲:AI+农学导论
  • c++_csp-j算法 (2)
  • 使用vue2技术写了一个纯前端的静态网站商城-鲜花销售商城
  • 信息量、香农熵、交叉熵、KL散度总结
  • HSP代理Robocar POLI申请TRO冻结,涉及商标与版权
  • 深入剖析 HashMap:内部结构与性能优化
  • 6547网:2025年3月 Python编程等级考试一级真题试卷
  • 在RK3588上使用ZLMediaKit
  • 实现窗口函数
  • arkTs:使用setTimeout / setInterval 实现透明度切换的轮播图
  • 纯FPGA实现驱动AD9361配置的思路和实现之一 概述
  • 代码随想录打卡|Day21(复原ip地址、子集、子集2)
  • Unity游戏开发实战:从PlayerPrefs到JSON,精通游戏存档与加载机制
  • Python 跨平台系统资源监控实践
  • RS232实现主单从多通讯
  • 健身会员管理系统(ssh+jsp+mysql8.x)含运行文档
  • Python实现的智能商品推荐系统分享+核心代码
  • 基于SFC的windows修复程序,修复绝大部分系统损坏
  • 通过Xshell上传文件到Linux
  • 屠呦呦当选美国国家科学院外籍院士
  • 海量数据处于“原矿”状态,数据价值释放如何破局?
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使
  • 王毅:携手做世界和平与发展事业的中流砥柱
  • 清华姚班,正走出一支军团
  • 加拿大驾车撞人事件遇难人数升到11人