Three.js学习2:页面引入 Three.js

一、关于 Three.js 的版本

随着页面3D化应用越来越多,近两年 Three.js 处于飞速发展之中。现在 Three.js 几乎每个月都会发布一个新的版本,会增加新的 API,废掉一些旧的功能之类的。

可以从 Three.js 官网 Three.js – JavaScript 3D Library  下载最新版本,官网的文档一般也是当前最新版本。

因为 Three.js 每月更新的时候,API会有变化。所以:

  1. 实际开发时的  Three.js API 应该以项目 Three.js 版本对应的文档为准。只要能实现功能,不用追求最新版。当然,这是我的个人观点。
  2. 学习 Three.js 的时候,注意看教程的发布时间,以及教程的版本。不同版本,可能代码不兼容--虽然绝大部分代码变化不大,但是不排除个别方法做了调整。

我用的是目前 Three.js 最新版,r161

二、页面引入 Three.js

不知道什么时候起,Three.js 官方不再支持类似 jQuery 的引入方式,全面转向了ES6 module 方式引入 Three.js 或者 common JS 的方式。从 build 文件夹里的三个 three.js 文件就可以看出来。

three.cjs 是 common JS 文件,用在 node 里,可以通过 require 导入。

three.module.js 是按照 ES6 module 导入方式,通过 import 命令导入。three.module.min.js 是前面文件的压缩版。

这里以 three.module 为例,说明如何在页面引入 Three.js。

因为版本更新较快,所以网上一些引入 Three.js  的方式不再适用。这个大家在学习的时候,一定要注意 Three.js  的版本

方式一:页面嵌入式

在 HTML 页面里:

<script  type="module">import * as THREE from "./js/three.module.min.js";// Our JS code goes here
</script>

方式二:引入外部 JS

在 three.module.min.js 同级,添加自己的 js 文件 myjs.js。

HTML 页面:

<script src="js/myjs.js" type="module"></script>

my.js 代码:

import * as THREE from "./three.module.min.js";
console.info( THREE );

注意:

无论哪种引入 Three.js ,请注意 script 标签的 type="module",不可少。

成功的标志:

如果能看到以下内容输出,就说明 Three.js 引入页面成功。恭喜你,打开了 Three.js 的大门!

三、Chrome 下一个扯淡的报错

明明页面跑起来,但是 Chrome 却一直在报一个错。

three.module.js:27681 THREE.WebGLRenderer: A WebGL context could not be created. Reason: Could not create a WebGL context, VENDOR = 0x8086, DEVICE = 0x4909, GL_VENDOR = Google Inc. (Intel), GL_RENDERER = ANGLE (Intel, Intel(R) Iris(R) Xe MAX 100 Graphics Direct3D9Ex vs_3_0 ps_3_0, igdumdim64.dll -30.0.101.1934), GL_VERSION = 30.0.101.1934, Sandboxed = yes, Optimus = no, AMD switchable = no, Reset notification strategy = 0x8252, ErrorMessage = BindToCurrentSequence failed: .

THREE.WebGLRenderer: A WebGL context could not be created. Reason: Failed to create a WebGL2 context.

搞得我一度怀疑是我的代码问题,或者 Three.js 版本有问题。

经多方查阅,发现这个是 Chrome  的问题, Firefox 就没有这个报错,一切正常。

解决方案1:

  1. 在浏览器地址栏输入 chrome://flags/

  2. Override software rendering list 选项设为Enabled

  3. WebGL Draft Extentions 选项改为 Enbale.

  4. Chrome 73之后的版本, 确保 Choose ANGLE graphics backendOpenGL

解决方案2:

 反正不影响代码运行,无视这个错误。否则换个浏览器,比如 firefox。

四、关于 VSCode 下 Three.js 的代码提示

我用的方法是安装 three.js 的typescript语法(.d.ts)的依赖:

要用到 Node 环境。

npm install --save-dev @types/three 

不过这个代码提示,就我用的 r161 的版本来看,感觉挺鸡肋的,只能说聊胜于无。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL进阶之锁(全局锁以及备份报错解决)

锁 全局锁 全局锁就是对整个数据库实例加锁&#xff0c;加锁后整个实例就处于只读状态&#xff0c;后续的DML的写语句&#xff0c;DDL语 句&#xff0c;已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份&#xff0c;对所有的表进行锁定&#xff…

HTML用户充值页面充值中心模板

HTML用户充值页面充值中心模板,HTMLCSSJS&#xff0c;记事本修改index.html里面的内容即可&#xff0c;本地双击可以运行&#xff0c;也可以上传到服务器 蓝奏云&#xff1a;https://wfr.lanzout.com/izdQ41n4hqbi

C++学习Day01之using声明以及using编译指令

目录 一、程序1.1 using声明1.2 using声明与就近原则1.3 using编译指令与就近原则1.4 多个using编译指令 二、分析与总结 一、程序 1.1 using声明 #include<iostream> using namespace std;namespace KingGlory {int sunwukongId 1; } void test01() {//1、using声明u…

基于SpringBoot Vue单位考勤管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

机器学习 | 如何构建自己的决策树算法?

决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 目录 初识决策树 决策树原理 cart剪枝 特征提取 泰坦尼克号乘客生存预测(实操) 回归决策树 初识决策树 决策树是一种…

2024年【A特种设备相关管理(电梯)】考试总结及A特种设备相关管理(电梯)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;电梯&#xff09;考试总结是安全生产模拟考试一点通生成的&#xff0c;A特种设备相关管理&#xff08;电梯&#xff09;证模拟考试题库是根据A特种设备相关管理&#xff08;电梯&#x…

Pytest框架测试

Pytest 是什么? pytest 能够支持简单的单元测试和复杂的功能测试;pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试;使用 pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。pytest 支持 315 种以上的插件;为什么要选择 Pytest 丰…

【Android新版本兼容】onBackPressed()方法被弃用的解决方案

提示&#xff1a;此文章仅作为本人记录日常学习使用&#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、使用 AndroidX API 实现预测性返回手势1.1 添加依赖1.2 启用返回手势1.3 注册OnBackPressedCallback()方法来处理返回手势 一、使用 AndroidX API 实现预测…

【Java程序设计】【C00239】基于Springboot的漫画之家管理系统(有论文)

基于Springboot的漫画之家管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的漫画之家系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页&a…

jsp自助点餐管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 自助点餐管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

Dockerfile构建Nginx访问说明

Dockerfile使用情况 20210903 Dockerfile ,Nginx 参考地址&#xff1a;https://yeasy.gitbook.io/docker_practice/image/build 编写简单Dockerfile 在一个空白目录中&#xff0c;建立一个文本文件&#xff0c;并命名为 Dockerfile&#xff1a; $ mkdir mynginx $ cd myngin…

LLM之Agent(十一)| 多智能体框架CrewAI与AutoGen相比

基于LLM构建的Agent中有一个明显的现象就是多智能体体系结构的表现要超越单智能体&#xff0c;即使单智能体使用无可挑剔的提示策略。本文将探索另一个有趣的多智能体框架——CrewAI。 一、CrewAI整体优势 CrewAI可以应用在生成环境中。它在发言人的反应和编排上牺牲了一点灵活…