当前位置: 首页 > 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);

http://www.dtcms.com/a/144088.html

相关文章:

  • 【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
  • OrbisGIS:基于Java开发的开源GIS软件
  • 大型旋转机械声信号分析处理与故障诊断模块SoundAgent
  • 软件架构分层策略对比及Go项目实践
  • 历史文化探险,梧州旅游景点推荐
  • DNS主从同步
  • 【人工智能】控制专业的职业发展方向
  • 指针----------C语言经典题目(2)
  • STM32单片机入门学习——第43节: [12-3] 读写备份寄存器实时时钟
  • 无需训练的具身导航探索!TRAVEL:零样本视觉语言导航中的检索与对齐
  • 山东科技大学人工智能原理考试回忆复习资料