首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从three.js中的3个顶点渲染平面

在Three.js中,从一个简单的三角形开始,你可以创建一个平面(即四边形)。虽然Three.js没有直接的平面几何体,但你可以通过创建两个三角形来组成一个四边形。下面是一个示例,展示如何使用三个顶点(实际上会使用六个顶点来组成两个三角形)来渲染一个平面。

步骤概述

  1. 初始化场景、相机和渲染器
  2. 定义平面的几何形状
  3. 创建材质
  4. 组合几何体和材质为网格
  5. 将网格添加到场景中
  6. 渲染循环

示例代码

代码语言:javascript
复制
html<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Three.js 平面示例</title>
    <style>
        body { margin: 0; }
        canvas { display: block; }
    </style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r152/three.min.js"></script>
<script>
    // 1. 初始化场景、相机和渲染器
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
    const renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    // 2. 定义平面的几何形状
    // 使用BufferGeometry自定义顶点
    const geometry = new THREE.BufferGeometry();

    // 定义四个顶点(一个平面由两个三角形组成)
    const vertices = new Float32Array([
        // 第一个三角形
        -1, -1,  0, // 左下
         1, -1,  0, // 右下
         0,  1,  0, // 顶部

        // 第二个三角形
        -1, -1,  0, // 左下
         0,  1,  0, // 顶部
         1, -1,  0  // 右下(与第一个三角形共享)
    ]);

    // 将顶点数据添加到几何体
    geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));

    // 3. 创建材质
    const material = new THREE.MeshBasicMaterial({ color: 0x00ff00, wireframe: true }); // 绿色线框

    // 如果想要填充颜色,可以使用 MeshLambertMaterial 或其他材质
    // const material = new THREE.MeshLambertMaterial({ color: 0x00ff00 });

    // 4. 组合几何体和材质为网格
    const plane = new THREE.Mesh(geometry, material);

    // 5. 将网格添加到场景中
    scene.add(plane);

    // 调整相机位置
    camera.position.z = 5;

    // 6. 渲染循环
    function animate() {
        requestAnimationFrame(animate);
        // 可以在这里添加动画代码,例如旋转平面
        // plane.rotation.x += 0.01;
        // plane.rotation.y += 0.01;
        renderer.render(scene, camera);
    }

    animate();

    // 处理窗口大小变化
    window.addEventListener('resize', () => {
        const width = window.innerWidth;
        const height = window.innerHeight;
        renderer.setSize(width, height);
        camera.aspect = width / height;
        camera.updateProjectionMatrix();
    });
</script>
</body>
</html>

解释

  1. 初始化场景、相机和渲染器
    • Scene:所有3D对象的容器。
    • PerspectiveCamera:透视相机,模拟人眼视角。
    • WebGLRenderer:基于WebGL的渲染器,用于将场景渲染到网页上。
  2. 定义平面的几何形状
    • 使用BufferGeometryBufferAttribute来定义顶点位置。
    • 一个平面通常由两个三角形组成,因此需要定义六个顶点(尽管有些顶点是共享的)。
    • 在上面的示例中,为了简化,实际上只定义了四个唯一的顶点,并重复使用了部分顶点。这可能需要根据具体需求调整索引。

    注意:更高效的方法是使用索引缓冲区(IndexBuffer),这样可以避免重复顶点。下面是一个优化后的版本: javascript// 使用索引优化顶点定义 const geometry = new THREE.BufferGeometry(); const vertices = new Float32Array([ -1, -1, 0, // 0 1, -1, 0, // 1 0, 1, 0 // 2 ]); geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3)); const indices = new Uint16Array([ 0, 1, 2, // 第一个三角形 0, 2, 1 // 第二个三角形(如果需要不同的拓扑结构) ]); // 实际上,对于平面,只需要两个三角形共享边 // 正确的索引应该是 0,1,2 和 0,2,1 是相同的平面,因此通常只需要定义一次 // 更常见的是使用如下索引定义两个三角形: const indices = new Uint16Array([ 0, 1, 2, // 第一个三角形 0, 2, 3 // 第二个三角形(需要四个顶点) ]); // 因此,更准确的做法是使用四个顶点和适当的索引。 为了简化,建议使用Three.js提供的PlaneGeometry,它已经为你处理好了所有几何细节: javascriptconst geometry = new THREE.PlaneGeometry(2, 2); // 宽度和高度均为2 const material = new THREE.MeshBasicMaterial({ color: 0x00ff00, wireframe: true }); const plane = new THREE.Mesh(geometry, material); scene.add(plane);

  3. 创建材质
    • MeshBasicMaterial:不受光照影响的材质,适合简单的展示。
    • MeshLambertMaterialMeshPhongMaterial:受光照影响的材质,适合更真实的渲染效果。
  4. 组合几何体和材质为网格
    • Mesh对象将几何体和材质结合在一起,形成一个可以在场景中渲染的对象。
  5. 将网格添加到场景中
    • 使用scene.add(plane)将平面添加到场景中。
  6. 渲染循环
    • 使用requestAnimationFrame创建一个渲染循环,持续更新和渲染场景。

使用 PlaneGeometry 的简化示例

如果你不需要自定义顶点,使用Three.js内置的PlaneGeometry会更加简便:

代码语言:javascript
复制
html<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Three.js PlaneGeometry 示例</title>
    <style>
        body { margin: 0; }
        canvas { display: block; }
    </style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r152/three.min.js"></script>
<script>
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
    const renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    // 使用 PlaneGeometry 创建平面
    const geometry = new THREE.PlaneGeometry(2, 2); // 宽度和高度均为2
    const material = new THREE.MeshBasicMaterial({ color: 0x00ff00, wireframe: true });
    const plane = new THREE.Mesh(geometry, material);
    scene.add(plane);

    camera.position.z = 5;

    function animate() {
        requestAnimationFrame(animate);
        renderer.render(scene, camera);
    }

    animate();
</script>
</body>
</html>

这个示例创建了一个简单的绿色线框平面,位于坐标原点,大小为2x2单位。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从iView中Select的渲染了解vue的渲染机制

难道data中的数据的渲染比mounted还晚? 实际上不是的,mounted是在data或props之后再执行的,那为什么会出现这个问题呢?...组件中mounted中赋值是延迟执行的。...这就知道原因了,因为是延迟执行,所以在data渲染的时候,以为渲染过了,mounted回调就开始调用了。...对于两次传入的值,第一次在mounted中触发,后续的都在watch中触发,但是mounted中添加了异步执行,而watch中没有异步调用,所以后续更改的值反倒被之前的值覆盖。...等延迟执行后返回的是之前data的值,mounted设置的值就不生效了。 解决方式 解决方式有以下几种: 使用created created在渲染之前就覆盖了之前的默认值,这样渲染的时候就是新值了。

17710

WebGL开发3D模型的流程

使用 WebGL 开发 3D 模型涉及到一系列步骤,从模型创建、导入到最终的渲染和交互,都需要仔细规划。以下是一个详细的流程,希望能帮助你更好地理解 WebGL 3D 模型开发。...模型制作: 在建模软件中进行模型的创建,包括:几何体创建: 使用基本几何体(例如立方体、球体、圆柱体等)进行组合和修改,创建复杂的模型。多边形建模: 通过编辑多边形的顶点、边和面来创建模型。...雕刻建模: 使用类似雕刻工具的方式对模型进行细节刻画。UV 展开: 将 3D 模型的表面展开成 2D 平面,用于贴图的制作。贴图制作: 为模型添加纹理和材质,使其更加逼真。...模型加载和渲染 (以 Three.js 为例):引入 Three.js: 在 HTML 文件中引入 Three.js 库。...总结:以上是一个使用 WebGL 开发 3D 模型的基本流程。实际开发中,可能需要根据具体需求进行调整和扩展。

11010
  • Three.js世界中的三要素:场景、相机、渲染器

    (Camera)在Three.js中决定了我们从哪里以及如何观察场景。...远裁剪平面(far):控制相机能看到的最远距离。四、渲染器:将虚拟变为现实渲染器(Renderer)负责将场景中的3D对象通过相机视角渲染到屏幕上。...通过一个具体的示例,展示从创建场景、设置相机到使用渲染器进行渲染的完整过程。...例如,使用Three.js创建的3D柱状图、3D散点图等,可以直观地展示数据的变化趋势和关系。总结场景、相机和渲染器是Three.js中的三大核心要素,它们共同构成了一个完整的3D图形系统。...场景作为所有3D对象的容器,管理着所有的物体、光源和相机;相机决定了我们从哪个角度观察场景;渲染器则负责将场景中的内容渲染到屏幕上。

    10310

    three.js 材质

    今天郭先生说一说three.js的材质。材质描述了对象objects的外观。它们的定义方式与渲染器无关, 因此,如果您决定使用不同的渲染器,不必重写材质。...空间中与平面的有符号距离为负的点被剪裁(未渲染)。 这需要WebGLRenderer.localClippingEnabled为true。....clipShadows : Boolean 定义是否根据此材质上指定的剪裁平面剪切阴影。默认值为 false。 .colorWrite : Boolean 是否渲染材质的颜色。...以键值对形式的对象传递,{ MY_CUSTOM_DEFINE: '' , PI2: Math.PI * 2 }。 这些键值对在顶点和片元着色器中定义。默认值为undefined。....copy ( material : material ) : Material 将被传入材质中的参数复制到此材质中。 .dispose () : null 处理材质。材质的纹理不会被处理。

    10K50

    用Three.js建模

    在Three.js中,一个可见的物体是由几何体和材料构成的。在这个教程中,我们将学习如何从头开始创建新的网格几何体,研究Three.js为处理几何对象和材质所提供的相关支持。...Three.js网格对象类型为THREE.Geometry,包含一系列的顶点(其类型为THREE.Vector3)。...Face3包含了一个顶点法线数组,我们可以手动设置,three.js也可以通过计算三角面的法线的平均值来得到光滑表面的顶点法线的合理估值。...LatheGeometry不是从曲线上构建的,而是从曲线上的一系列点构建的。点是Vector2型的对象,曲线位于xy平面中。表面是通过围绕y轴旋转曲线生成的。...由于我们谈论的是网页,因此three.js纹理的图像通常从 Web 地址加载。图像纹理通常使用THREE.TextureLoader对象中的load方法创建。

    7.5K02

    谁还没有冰墩墩?速来领→

    3、场景初始化 初始化渲染容器、场景、相机。 4、添加光源 示例中主要添加了两种光源:DirectionalLight 用于产生阴影,调节页面亮度、AmbientLight 用于渲染环境氛围。...6、创建地面 本示例中凹凸起伏的地面是使用 Blender 构建模型,然后导出 glb 格式加载创建的。当然也可以直接使用 Three.js 自带平面网格加凹凸贴图也可以实现类似的效果。...,从圆环的中心到管道(横截面)的中心。...9、创建旗帜 旗面模型是从 sketchfab 下载的,还需要一个旗杆,可以在 Blender中添加了一个柱状立方体,并调整好合适的长宽高和旗面结合起来。...Three.js 中,雨、雪、云、星辰 等生活中常见的粒子都可以使用 Points 来模拟实现。

    4.5K10

    Three.js外包开发的技术难点

    性能优化Three.js 提供强大的功能,但在渲染复杂的 3D 场景时,性能问题可能成为瓶颈。难点:大量几何体或高多边形模型导致帧率下降。动态光源和阴影渲染对 GPU 要求高。...手动调整相机的 near 和 far 平面,避免深度问题。8. 物理引擎集成Three.js 自身不包含物理引擎,需要手动集成第三方库(如 Cannon.js 或 Ammo.js)。...动态场景更新动态更新场景中的对象状态(如实时数据渲染或交互响应)可能引发性能问题。难点:动态更新几何体或材质时的开销较大。数据驱动的渲染需要频繁操作对象。...总结Three.js 功能强大,但由于涉及 3D 渲染、动画、交互和性能优化等多个领域,需要开发者具备扎实的图形学知识和经验。...通过不断实践、利用社区资源(如官方文档、示例代码)以及学习底层 WebGL 原理,可以有效解决开发中的难点。

    10810

    Three.js - 走进3D的奇妙世界

    三、主要组件 在Three.js中,有了场景(scene)、相机(camera)和渲染器(renderer) 这3个组建才能将物体渲染到网页中去。...在JS中可以使用requestAnimationFrame实现高效的连续渲染。...Three.JS使用右手坐标系,这源于OpenGL默认情况下,也是右手坐标系。从初中、高中到大学的课堂上,教材中所涉及的几何基本都是右手坐标系。...以创建一个简单的立方体为例,创建简单的立方体需要添加8个顶点和12个三角形的面,创建顶点时需要指定顶点在坐标系中的位置,添加面的时候需要指定构成面的三个顶点的序号,第一个添加的顶点序号为0,第二个添加的顶点序号为...七、纹理 在生活中纯色的物体还是比较少的,更多的是有凹凸不平的纹路或图案的物体,要用Three.JS实现这些物体的效果,就需要使用到纹理贴图。

    8.4K20

    Three.js - 走进3D的奇妙世界

    三、主要组件 在Three.js中,有了场景(scene)、相机(camera)和渲染器(renderer) 这3个组建才能将物体渲染到网页中去。...在JS中可以使用requestAnimationFrame实现高效的连续渲染。 3.1 常用相机 ?...Three.JS使用右手坐标系,这源于OpenGL默认情况下,也是右手坐标系。从初中、高中到大学的课堂上,教材中所涉及的几何基本都是右手坐标系。 ?...以创建一个简单的立方体为例,创建简单的立方体需要添加8个顶点和12个三角形的面,创建顶点时需要指定顶点在坐标系中的位置,添加面的时候需要指定构成面的三个顶点的序号,第一个添加的顶点序号为0,第二个添加的顶点序号为...七、纹理 在生活中纯色的物体还是比较少的,更多的是有凹凸不平的纹路或图案的物体,要用Three.JS实现这些物体的效果,就需要使用到纹理贴图。

    10K41

    解剖 WebGL & Three.js 工作原理

    那这个过程是自动完成的吗?答案是并非完全如此。 为了使我们有更高的可控性,即自由控制顶点位置,WebGL把这个权力交给了我们,这就是可编程渲染管线(不用理解)。...5、光栅化 能过片元着色器,我们确定好了每个片元的颜色,以及根据深度缓存区判断哪些片元被挡住了,不需要渲染,最终将片元信息存储到颜色缓存区,最终完成整个渲染。 五、three.js究竟做了什么?...我们知道,three.js帮我们完成了很多事情,但是它具体做了什么呢,他在整个流程中,扮演了什么角色呢?...5.1、three.js顶点处理流程 从WebGL工作原理的章节中,我们已经知道了顶点着色器会将三维世界坐标转换成屏幕坐标,但实际上,坐标转换不限于投影矩阵。...5.3、three.js完整的运行流程 当我们选择材质后,three.js会根据我们所选的材质,选择对应的顶点着色器和片元着色器。 three.js中已经内置了我们常用着色器。

    9.8K21

    探索VtKLoader源码中THREE.BufferGeometry的奥秘

    3.2 BufferGeometry在VtKLoader中的角色在VtKLoader中,BufferGeometry扮演着重要的角色,用于表示和存储从VTK文件中解析出的几何数据。...一般来说,VTK文件中包含了诸如顶点坐标、法线、颜色、UV等属性数据,而BufferGeometry则负责将这些数据转换为THREE.js所支持的格式,并提供给渲染器进行绘制。...数据转换:将VTK文件中的数据格式转换为THREE.js所支持的格式,以便在Web浏览器中进行渲染和展示。数据提供:向渲染器提供所需的几何数据,以便进行绘制和渲染。...通过以上步骤,VtKLoader能够将VTK文件中的几何数据转换为THREE.js所支持的格式,并提供给渲染器进行绘制,实现科学数据的可视化呈现。...总结BufferGeometry作为THREE.js中用于表示和存储几何数据的重要对象,在三维图形渲染中扮演着关键的角色,为用户带来更加真实和生动的可视化体验。

    19310

    WebGL 概念和基础入门

    WebGL 中的基本概念 WebGL 运行在电脑的 GPU 中,因此需要使用能在 GPU 上运行的代码,这样的代码需要提供成对的方法,每对方法中的一个叫顶点着色器而另外一个叫做片元着色器,并且使用 GLSL...假如我们需要绘制一个三角形,此时 GPU 上进行的工作便是先调用三次顶点着色器计算出三角形的 3 个顶点在裁剪空间坐标系中的对应位置,并通过变量 gl_Position 保存在 GPU 中,然后调用片元着色器完成每个顶点颜色值的计算...gl.vertexAttribPointer( // 告诉 OpenGL 如何从 Buffer 中获取数据 position, // 顶点属性的索引 2, // 组成数量,必须是 1...尽管从功能上而言原生 WebGL API 可以满足我们任意场景的开发需要但是,其开发和学习的成本极其昂贵。...// 创建 renderer 变量用于存储渲染器对象 var renderer; // initThree 函数用来初始化 Three.js 运行所需的环境 function initThree() {

    4.2K31

    Three.js 粒子系统学习小记:礼花效果实现

    Three.js提供了各种的粒子系统创建方式。从官网例子的demo来看,可以总结分为两类,分别是Points和Sprite。...也就是说,points必须要通过WebGLRenderer渲染方式来创建(重点强调这个是因为官网的demo中粒子的创建一般通过两种方式WebGLRenderer和CanvasRenderer renderer...geometry.vertices创建粒子(即 将网格转化为粒子),每个顶点将代表粒子系统中的每个粒子。...texture applied. threejs官网如是说,sprite是一直面向camera的平面,并且我们可以用其创建基于屏幕坐标移动、定位和缩放的对象,而不影响三维场景中的其他物体(做到互不影响必须单独创建一个用于...当粒子量级非常大时,可以用BufferGeometry来代替Geometry的顶点,因为它可以将数据存储在缓冲区中,减少数据传递到GPU的成本,同时因为在缓冲区,所以更适合静态的物体。

    20.3K43

    如何实现一个3d场景中的阴影效果(threejs)?

    跟OpenGL不同,在threejs中实现一个阴影效果很简单,只需要简单的几个设置。...在Three.js中,物体可以形成阴影投影效果,但是由于渲染阴影需要消耗计算机大量资源,所以Three.js在默认情况下是不会渲染阴影的,所以需要我手工设置开启阴影效果。...模拟手电筒,台灯等光源 平行光( DirectinalLight ):平行的一束光,模拟从很远处照射的太阳光 环境光可以说是场景的整体基调,需要注意的是,由于环境光无处不在,也就是说它是没有方向的,当然不能产生阴影...兰伯特网孔材料(MeshLambertMaterial) 一种非发光材料(兰伯特)的表面,计算每个顶点。 法向量网孔材料(MeshNormalMaterial) 一种把法向量映射到RGB颜色的材料。...最后,添加一个接收阴影的平面,通过receiveShadow属性设置平面接收阴影。

    2.8K40

    3D to H5工作流应用手册

    前言 设计师需求中3D视觉平移到互动H5中的项目越来越多,three.js和PBR工作流的结合却一直没有被系统化地整理。 和各位前端神仙一起做项目,也一起磕磕碰碰出了爱与痛的领悟。...像素/片元着色器与顶点着色器(Vertex Shader)在webGL处理过程中都有使用,顶点着色器先将模型中每个顶点的位置、纹理坐标、颜色等信息进行转换装配,再由片元着色器对3D信息光栅化并转换成2D...(关于着色器差异,感兴趣的同学可以直接跳到附录查看。) 着色器是怎么把顶点中所带有光照、纹理等信息转换并重建在二维图像的像素中呢?GPU中是透过不同的着色算法来实现的。...Unity中模拟次表面散射光照模型效果 [ F8, ©️Alan Zucconi ] 2、非真实感渲染 Non-Photorealistic Rendering-NPR 也就是我们常说的3渲2,非写实渲染风格也是从人们对...在Unity中,基于真实感渲染的贴图效果与NPR水墨风格化着色效果对比 [ F11, ©️邓佳迪] 三、Three.js 材质着色对比 说完真实感与非真实感渲染差异后,我们再来看看Three.js中的材质

    2.6K42

    Three.js 的 3D 粒子动画:群星送福

    粒子是指原子、分子等组成物体的最小单位。在 2D 中,这种最小单位是像素,在 3D 中,最小单位是顶点。 粒子动画不是指物体本身的动画,而是指这些基本单位的动画。...在“群星送福”效果中,我们由群星打碎重组成了福字,实际上就是群星的顶点运动到了福字的顶点,由一个 3D 物体变成了另一个 3D 物体。 那么群星的顶点从哪里来的?福字的顶点又怎么来呢?...因为顶点在被 GPU 渲染之前是放在缓冲区 buffer 中的,所以这种指定一堆顶点的几何体就被叫做 BufferGeometry。...福字模型的顶点肯定不能随机,自己画也不现实,这种一般都是在建模软件里画好,然后导入到 Three.js 来渲染, 我找了这样一个福字的 3D 模型: 模型是 fbx 格式的,使用 FBXLoader...我们要实现“群星送福”的粒子动画,也就是从群星的顶点运动到福字的顶点。 群星的顶点可以随机生成,使用 BufferGeometry 创建对应的几何体。

    4.6K01

    如何1人5天开发完3D数据可视化大屏

    相信从事过数据可视化开发的你对大屏并不陌生,那么开发一个酷炫的大屏一定是很多数据可视化开发者想要做的事情。 我们使用three.js,大约一周的时间开发出了一个酷炫的数据可视化大屏: ?...:着色器在各3D对象中的应用 THREE.ShaderMaterial:three.js与着色器的复合应用 THREE.Texture:贴图与着色器的复合应用 THREE.CubicBezierCurve3...这样在片元着色器运行时我们可以区分国家、海洋和被选中的国家来进行不同的渲染计算。...并且你无法通过监听mousemove中来真正的响应鼠标滑动事件,因为mousemove一秒钟内触发的次数甚至会超过动画帧率。造成一秒渲染120+帧的明显卡顿。...到1的percent供顶点着色器使用 顶点着色器 顶点着色器是实现飞线的核心。

    3.5K41

    【前端er入门Shader系列】01—从渲染管线了解Shader

    在这几个模块的学习中,对个人影响最大的是 Three.js,跟随着《Three.js Journey》课程学习完成后,会从宏观上对整个 3D 世界有较为清晰的认识。...事实上大多数前端er的 web 3D 学习路径也都是从 Three.js 开始的,可以轻松在浏览器中渲染一些3D场景并实现一些简单交互,如看房网页中的3D全景图、车企网页中的3D车模展示等等。...但也不用担心,在实际的开发中,大多数的场景渲染都可以直接复用现成的 Shader 处理顶点的位置、光照、阴影、材质和纹理等,甚至是序列帧、蒙皮、骨骼等动效,开发者只需要调节一些参数即可。...渲染管线整体流程如上图所示,几个阶段的核心功能分别为: 顶点数据:在数据准备阶段,JavaScript等外部程序可以从 CPU 向 GPU 缓存区传入数据,以便后面的顶点着色器和片段着色器读取并处理,送入到渲染管线的数据包括顶点的坐标...顶点着色器:顶点着色器主要实现顶点坐标从本地空间到屏幕空间的转换,如下图所示: 图元装配:该阶段将顶点着色器输出的所有顶点作为输入,根据绘制方式将所有的点装配成指定的图元形状,以及执行 Face Culling

    29511

    快速入门 WebGL

    《从 0 实现 3D 渲染引擎》系列教程将从最基本知识开始,渐进的讲解 WebGL 使用和 WebGL 背后原理还有必不可少的数学知识,真正的从 0 开始,只要了解 JS 就行,不需要要任何图形学或者数学基础...学完之后除了能够自己从 0 实现自己的 3D 渲染引擎还能熟悉 three.js 的源码,因为本系列文章实现的 3D 渲染引擎和 three.js 很相似。 什么是 WebGL?...因为三角形有很多的优势,比如三角形一定在一个平面上,任何多边形都可以使用三角形组成等性值。 渲染一个三角形 了解了这么多背景知识,现在让我们来实际使用 WebGL 来渲染一个最简单的三角形吧。...( // 告诉 OpenGL 如何从 Buffer 中获取数据 positionLocation, // 顶点属性的索引 2, // 组成数量,必须是1,2,3或4。...( // 从数组中绘制图元 gl.TRIANGLES, // 渲染三角形 0, // 从数组中哪个点开始渲染 3 // 需要用到多少个点,三角形的三个顶点) 渲染结果如下所示

    2.8K11
    领券