当前位置: 首页 > 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
  • 俄官员称乌克兰未遵守停火,乌方暂无回应
  • 朱雨玲:从前世界第一到兼职运动员,30岁后开始“玩”乒乓
  • 85岁眼科专家、武汉大学人民医院原眼科主任喻长泰逝世
  • 因在罗博特科并购项目中执业违规,东方证券、国浩所均遭警示
  • 安徽省合肥市人大常委会原副主任杜平太接受审查调查
  • 金融监管总局:建立保险销售人员违法违规导致经济损失的佣金薪酬追索扣回机制