Three 之 three.js (webgl)基础 3D 辅助对象 Helper 开发的工具简单介绍
Three 之 three.js (webgl)基础 3D 辅助对象 Helper 开发的工具简单介绍
目录
一、简单介绍
开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。
本节介绍, three.js ()为了辅助开发,常常会用到一些辅助对象了帮助开发的工具,如果有不足之处,欢迎指出,或者你有更好的方法,欢迎留言。
二、辅助对象 Helper
1、ArrowHelper 箭头辅助对象
用于模拟方向的3维箭头对象。
const dir = new THREE.Vector3( 1, 2, 0 );
//normalize the direction vector (convert to vector of length 1)
dir.normalize();
const origin = new THREE.Vector3( 0, 0, 0 );
const length = 1;
const hex = 0xffff00;
const arrowHelper = new THREE.ArrowHelper( dir, origin, length, hex );
scene.add( arrowHelper );
1)构造函数
ArrowHelper(dir :Vector3, origin :Vector3, length :Number, hex :Number, headLength :Number, headWidth :Number)
dir-- 基于箭头原点的方向. 必须为单位向量.
origin-- 箭头的原点.
length-- 箭头的长度. 默认为1.
hex-- 定义的16进制颜色值. 默认为 0xffff00.
headLength-- 箭头头部(锥体)的长度. 默认为箭头长度的0.2倍(0.2 * length).
headWidth-- The width of the head of the arrow. Default is 0.2 * headLength.
2)属性
请到基类Object3D页面查看公共属性.
.:Line
包含箭头辅助对象的线段部分.
.:Mesh
包含箭头辅助对象的锥体部分.
3)方法
请到基类Object3D页面查看公共方法.
.(color :Color) :undefined
color -- 所需的颜色。
设置箭头辅助对象的颜色.
.(length :Number, headLength :Number, headWidth :Number) :undefined
length -- 要设置的长度.
headLength -- 要设置的箭头头部(锥体)的长度.
headWidth -- The width of the head of the arrow.
设置箭头辅助对象的长度.
.(dir :Vector3) :undefined
dir -- 要设置的方向. 必须为单位向量.
设置箭头辅助对象的方向.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.z = 5;
//来自原点的方向。必须是单位向量
var dir = new THREE.Vector3(10, 10, 0);
// 规格化方向向量(转换为长度为1的向量)
dir.normalize();
// 箭头开始的点
var origin = new THREE.Vector3(0, 0, 0);
// 箭头的长度。默认值为1
var length = 3;
// 用于定义颜色的十六进制值。默认值为0xffff00
var hex = 0xff0000;
// 箭头的长度。默认值为0.2 *length
var headLength = 0.5;
// 箭头宽度的长度。默认值为0.2 * headLength。
var headWidth = 0.2;
var arrowHelper = new THREE.ArrowHelper(dir, origin, length, hex,headLength,headWidth);
scene.add(arrowHelper);
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
2、AxesHelper 轴坐标系辅助对象
用于简单模拟3个坐标轴的对象,红色代表 X 轴. 绿色代表 Y 轴. 蓝色代表 Z 轴
const axesHelper = new THREE.AxesHelper( 5 );
scene.add( axesHelper );
1)构造函数
AxesHelper( size :Number)
size-- (可选的) 表示代表轴的线段长度. 默认为1.
2)属性
请到基类LineSegments页面查看公共属性.
3)方法
请到基类LineSegments页面查看公共方法.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const axesHelper = new THREE.AxesHelper( 5 );
scene.add( axesHelper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
3、BoxHelper 包围盒辅助对象
用于图形化地展示对象世界轴心对齐的包围盒的辅助对象。The actual bounding box is handled withBox3, this is just a visual helper for debugging. It can be automatically resized with theBoxHelper.updatemethod when the object it's created from is transformed. 注意:要想能正常运行,目标对象必须包含BufferGeometry, 所以当目标对象是精灵Sprites时将不能正常运行.
const sphere = new THREE.SphereGeometry();
const object = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( 0xff0000 ) );
const box = new THREE.BoxHelper( object, 0xffff00 );
scene.add( box );
1)构造函数
BoxHelper( object :Object3D, color :Color)
object-- (可选的) 被展示世界轴心对齐的包围盒的对象.
color-- (可选的) 线框盒子的16进制颜色值. 默认为 0xffff00.
创建一个新的线框盒子包围指定的对象. 内部使用Box3.setFromObject方法来计算尺寸. 注意:此线框盒子将包围对象的所有子对象.
2)属性
请到基类LineSegments页面查看公共属性.
3)方法
请到基类LineSegments页面查看公共方法.
.() :undefined
更新辅助对象的几何体,与目标对象尺寸 保持一致, 包围目标对象所有子对象. 请查看Box3.setFromObject.
.( object :Object3D) :this
object- 用于创建辅助对象的目标Object3D对象.
更新指定对象的线框盒子.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const sphere = new THREE.SphereGeometry(5,60,60);
const object = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( {color:0xff0000} ) );
const box = new THREE.BoxHelper( object, 0xffff00 );
scene.add( object );
scene.add( box );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
4、Box3Helper 模拟3维包围盒辅助对象
模拟3维包围盒Box3的辅助对象
const box = new THREE.Box3();
box.setFromCenterAndSize( new THREE.Vector3( 1, 1, 1 ), new THREE.Vector3( 2, 1, 3 ) );
const helper = new THREE.Box3Helper( box, 0xffff00 );
scene.add( helper );
1)构造函数
Box3Helper( box :Box3, color :Color)
box-- 被模拟的3维包围盒.
color-- (可选的) 线框盒子的颜色. 默认为 0xffff00.
创建一个新的线框盒子用以表示指定的3维包围盒.
2)属性
请到基类LineSegments页面查看公共属性.
.:Box3
被模拟的3维包围盒.
3)方法
请到基类LineSegments页面查看公共方法.
.( force :Boolean) :undefined
重写基类Object3D的该方法以便于 同时更新线框辅助对象与.box属性保持一致.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const box = new THREE.Box3();
box.setFromCenterAndSize( new THREE.Vector3( 1, 1, 1 ), new THREE.Vector3( 4, 2, 8 ) );
const helper = new THREE.Box3Helper( box, 0xffff00 );
scene.add( helper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
5、 CameraHelper 相机视锥体辅助对象
用于模拟相机视锥体的辅助对象,它使用LineSegments来模拟相机视锥体。
const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
const helper = new THREE.CameraHelper( camera );
scene.add( helper );
1)构造函数
CameraHelper( camera :Camera)
camera-- 被模拟的相机.
为指定相机创建一个新的相机辅助对象 CameraHelper .
2)属性
请到基类LineSegments页面查看公共属性.
.:Camera
被模拟的相机.
.:Object
包含用于模拟相机的点.
.:Object
请参考相机的世界矩阵camera.matrixWorld.
.:Object
请查看Object3D.matrixAutoUpdate. 这里设置为false表示辅助对象 使用相机的matrixWorld.
3)方法
请到基类LineSegments页面查看公共方法.
.update() :undefined
基于相机的投影矩阵更新辅助对象.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 80;
camera.position.y = 80;
camera.position.z = 80;
camera.lookAt(scene.position)
const helper = new THREE.CameraHelper( camera );
scene.add( helper );
const camera1 = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1, 100 );
camera1.rotation.y = Math.PI / 2
const helper1 = new THREE.CameraHelper( camera1 );
scene.add( helper1 );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
6、DirectionalLightHelper 平行光的辅助对象
用于模拟场景中平行光DirectionalLight的辅助对象. 其中包含了表示光位置的平面和表示光方向的线段.
const light = new THREE.DirectionalLight( 0xFFFFFF );
const helper = new THREE.DirectionalLightHelper( light, 5 );
scene.add( helper );
1)构造函数
DirectionalLightHelper( light :DirectionalLight, size :Number, color :Hex)
light-- 被模拟的光源.
size-- (可选的) 平面的尺寸. 默认为1.
color-- (可选的) 如果没有设置颜色将使用光源的颜色.
2)属性
请到基类Object3D页面查看公共属性.
.:Line
包含表示平行光方向的线网格.
.:DirectionalLight
被模拟的光源. 请参考directionalLight.
.matrix:Object
请参考光源的世界矩阵matrixWorld.
.matrixAutoUpdate:Object
请查看Object3D.matrixAutoUpdate页面. 这里设置为false表示辅助对象 使用光源的matrixWorld.
.:hex
构造函数中传入的颜色值. 默认为undefined. 如果改变该值, 辅助对象的颜色将在下一次update被调用时更新.
3)方法
请到基类Object3D页面查看公共方法.
.() :undefined
销毁该平行光辅助对象.
.update() :undefined
更新辅助对象,与模拟的directionalLight光源的位置和方向保持一致.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const light = new THREE.DirectionalLight( 0xFFFF00 );
const helper = new THREE.DirectionalLightHelper( light, 5 );
scene.add( helper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
7、GridHelper 坐标网格辅助对象
坐标格辅助对象. 坐标格实际上是2维线数组
const size = 10;
const divisions = 10;
const gridHelper = new THREE.GridHelper( size, divisions );
scene.add( gridHelper );
1)构造函数
GridHelper( size :number, divisions :Number, colorCenterLine :Color, colorGrid :Color)
size -- 坐标格尺寸. 默认为 10.
divisions -- 坐标格细分次数. 默认为 10.
colorCenterLine -- 中线颜色. 值可以为Color类型, 16进制 和 CSS 颜色名. 默认为 0x444444
colorGrid -- 坐标格网格线颜色. 值可以为Color类型, 16进制 和 CSS 颜色名. 默认为 0x888888
创建一个尺寸为 'size' 和 每个维度细分 'divisions' 次的坐标格. 颜色可选.
2)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const size = 10;
const divisions = 10;
const gridHelper = new THREE.GridHelper( size, divisions );
scene.add( gridHelper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
8、PolarGridHelper 极坐标格辅助对象
极坐标格辅助对象. 坐标格实际上是2维线数组
const radius = 10;
const radials = 16;
const circles = 8;
const divisions = 64;
const helper = new THREE.PolarGridHelper( radius, radials, circles, divisions );
scene.add( helper );
1)构造函数
PolarGridHelper( radius :Number, radials :Number, circles :Number, divisions :Number, color1 :Color, color2 :Color)
radius -- 极坐标格半径. 可以为任何正数. 默认为 10.
radials -- 径向辐射线数量. 可以为任何正整数. 默认为 16.
circles -- 圆圈的数量. 可以为任何正整数. 默认为 8.
divisions -- 圆圈细分段数. 可以为任何大于或等于3的正整数. 默认为 64.
color1 -- 极坐标格使用的第一个颜色. 值可以为Color类型, 16进制 和 CSS 颜色名. 默认为 0x444444
color2 -- 极坐标格使用的第二个颜色. 值可以为Color类型, 16进制 和 CSS 颜色名. 默认为 0x888888
创建一个半径为'radius' 包含 'radials' 条径向辐射线 和 'circles' 个细分成 'divisions' 段的圆圈的极坐标格辅助对象. 颜色可选.
2)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const radius = 8;
const radials = 16;
const circles = 8;
const divisions = 64;
const helper = new THREE.PolarGridHelper( radius, radials, circles, divisions );
scene.add( helper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
9、HemisphereLightHelper 半球形光源网格辅助对象
创建一个虚拟的球形网格Mesh的辅助对象来模拟 半球形光源HemisphereLight.
const light = new THREE.HemisphereLight( 0xffffbb, 0x080820, 1 );
const helper = new THREE.HemisphereLightHelper( light, 5 );
scene.add( helper );
1)构造函数
HemisphereLightHelper( light :HemisphereLight, sphereSize :Number, color :Hex)
light-- 被模拟的光源.
size-- 用于模拟光源的网格尺寸.
color-- (可选的) 如果没有赋值辅助对象将使用光源的颜色.
2)属性
请到基类Object3D页面查看公共属性.
.light:HemisphereLight
被模拟的半球形光源.
.matrix:Object
请参考半球形光源的世界矩阵matrixWorld.
.matrixAutoUpdate:Object
请查看Object3D.matrixAutoUpdate. 这里设置为false表示辅助对象 使用半球形光源的matrixWorld.
.color:hex
构造函数中传入的颜色值. 默认为undefined. 如果改变该值, 辅助对象的颜色将在下一次update被调用时更新.
3)方法
请到基类Object3D页面查看公共方法.
.dispose() :undefined
销毁该半球形光源辅助对象.
.update() :undefined
更新辅助对象,与.light属性的位置和方向保持一致.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const light = new THREE.HemisphereLight( 0xffffbb, 0x080820, 1 );
const helper = new THREE.HemisphereLightHelper( light, 5 );
scene.add( helper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
10、PlaneHelper 平面辅助对象
用于模拟平面Plane的辅助对象
const plane = new THREE.Plane( new THREE.Vector3( 1, 1, 0.2 ), 3 );
const helper = new THREE.PlaneHelper( plane, 1, 0xffff00 );
scene.add( helper );
1)构造函数
PlaneHelper( plane :Plane, size :Float, hex :Color)
plane-- 被模拟的平面.
size-- (可选的) 辅助对象的单边长度. 默认为 1.
color-- (可选的) 辅助对象的颜色. 默认为 0xffff00.
创建一个线框辅助对象来表示指定平面.
2)属性
请到基类LineSegments页面查看公共属性.
.:Plane
被模拟的平面plane.
.:Float
辅助对象的单边长度.
3)方法
请到基类LineSegments页面查看公共方法.
.updateMatrixWorld( force :Boolean) :undefined
重写基类Object3D的该方法以便于 同时更新线框辅助对象与.plane和.size属性保持一致.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const plane = new THREE.Plane( new THREE.Vector3( 1, 1, 0.2 ), 3 );
const helper = new THREE.PlaneHelper( plane, 5, 0xffff00 );
scene.add( helper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
11、PointLightHelper 点光源菱形网格辅助对象
创建一个虚拟的球形网格Mesh的辅助对象来模拟 点光源PointLight.
const pointLight = new THREE.PointLight( 0xff0000, 1, 100 );
pointLight.position.set( 10, 10, 10 );
scene.add( pointLight );
const sphereSize = 1;
const pointLightHelper = new THREE.PointLightHelper( pointLight, sphereSize );
scene.add( pointLightHelper );
1)构造函数
PointLightHelper( light :PointLight, sphereSize :Float, color :Hex)
light-- 要模拟的光源.
sphereSize-- (可选的) 球形辅助对象的尺寸. 默认为1.
color-- (可选的) 如果没有赋值辅助对象将使用光源的颜色.
2)属性
请到基类Mesh页面查看公共属性.
.light:PointLight
被模拟的点光源PointLight.
.matrix:Object
请参考点光源的世界矩阵matrixWorld.
.matrixAutoUpdate:Object
请查看Object3D.matrixAutoUpdate. 这里设置为false表示辅助对象 使用点光源的matrixWorld.
.color:hex
构造函数中传入的颜色值. 默认为undefined. 如果改变该值, 辅助对象的颜色将在下一次update被调用时更新.
3)方法
请到基类Mesh页面查看公共方法.
.dispose() :undefined
销毁该点光源辅助对象.
.update() :undefined
更新辅助对象,与.light属性的位置保持一致.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const pointLight = new THREE.PointLight( 0xff0000, 1, 100 );
pointLight.position.set( 1, 1, 1 );
scene.add( pointLight );
const sphereSize = 5;
const pointLightHelper = new THREE.PointLightHelper( pointLight, sphereSize );
scene.add( pointLightHelper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
12、SpotLightHelper 聚光灯锥形辅助对象
用于模拟聚光灯SpotLight的锥形辅助对象.
const spotLight = new THREE.SpotLight( 0xffffff );
spotLight.position.set( 10, 10, 10 );
scene.add( spotLight );
const spotLightHelper = new THREE.SpotLightHelper( spotLight );
scene.add( spotLightHelper );
1)构造函数
SpotLightHelper( light :SpotLight, color :Hex)
light-- 被模拟的聚光灯SpotLight.
color-- (可选的) 如果没有赋值辅助对象将使用光源的颜色.
2)属性
请到基类Object3D页面查看公共属性.
.cone:LineSegments
用于模拟光源的LineSegments类型对象.
.light:SpotLight
被模拟的聚光灯SpotLight.
.matrix:Object
请参考聚光灯的世界矩阵matrixWorld.
.matrixAutoUpdate:Object
请查看Object3D.matrixAutoUpdate. 这里设置为false表示辅助对象 使用聚光灯的matrixWorld.
.color:hex
构造函数中传入的颜色值. 默认为undefined. 如果改变该值, 辅助对象的颜色将在下一次update被调用时更新.
3)方法
请到基类Object3D页面查看公共属性.
.dispose() :undefined
销毁该聚光灯辅助对象.
.update() :undefined
更新聚光灯辅助对象.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script >
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const spotLight = new THREE.SpotLight( 0xffffff );
spotLight.position.set( 8,0,-3 );
scene.add( spotLight );
const spotLightHelper = new THREE.SpotLightHelper( spotLight );
scene.add( spotLightHelper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
13、RectAreaLightHelper 矩形光辅助对象
创建一个表示RectAreaLight的辅助对象.
const light = new THREE.RectAreaLight( 0xffffbb, 1.0, 5, 5 );
const helper = new RectAreaLightHelper( light );
scene.add( helper );
1)构造函数
RectAreaLightHelper( light :RectAreaLight, color :Hex)
light-- 被模拟的光源.
color-- (可选) 如果没有赋值辅助对象将使用光源的颜色.
2)属性
请到基类Object3D页面查看公共属性.
.light:RectAreaLight
被模拟的区域光源.
.color:hex
构造函数中传入的颜色值. 默认为undefined. 如果改变该值, 辅助对象的颜色将在下一次update被调用时更新.
3)方法
请到基类Object3D页面查看公共方法.
.dispose() :undefined
销毁该区域光源辅助对象.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script>
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const light = new THREE.RectAreaLight( 0xffffbb, 1.0, 5, 5 );
const helper = new THREE.RectAreaLightHelper( light );
scene.add( helper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
14、SkeletonHelper 骨骼辅助对象
用来模拟骨骼Skeleton的辅助对象. 该辅助对象使用LineBasicMaterial材质.
const helper = new THREE.SkeletonHelper( skinnedMesh );
scene.add( helper );
1)构造函数
SkeletonHelper( object :Object3D)
object -- Usually an instance ofSkinnedMesh. However, any instance ofObject3Dcan be used if it represents a hierarchy ofBones (viaObject3D.children).
2)属性
.:Array
辅助对象使用Lines渲染的骨数组.
.:Boolean
Read-only flag to check if a given object is of type SkeletonHelper.
.:Object3D
构造函数传入的对象.
3)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script type="importmap">
{
"imports": {
"three": "./js/three.module.js"
}
}
</script>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from './js/GLTFLoader.js';
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 3;
camera.position.y = 3;
camera.position.z = 3;
camera.lookAt(scene.position)
const loader = new GLTFLoader();
loader.load( './models/Soldier.glb', function ( gltf ) {
let model = gltf.scene;
scene.add( model );
let skeleton = new THREE.SkeletonHelper( model );
scene.add( skeleton );
animate();
} );
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
15、VertexNormalsHelper 顶点的法线辅助对象
渲染箭头辅助对象arrows来模拟顶点的法线. 需要定义了法线缓存属性custom attribute或 使用了computeVertexNormals方法计算了顶点法线.
1)构造函数
VertexNormalsHelper( object :Object3D, size :Number, color :Hex, linewidth :Number)
object-- 要渲染顶点法线辅助的对象.
size-- (可选的) 箭头的长度. 默认为 1.
color-- 16进制颜色值. 默认为 0xff0000.
linewidth-- (可选的) 箭头线段的宽度. 默认为 1.
2)属性
请到基类LineSegments页面查看公共属性.
.matrixAutoUpdate:Object
请查看Object3D.matrixAutoUpdate. 这里设置为false表示辅助对象 使用对象的世界矩阵matrixWorld.
.:Object3D
被渲染顶点法线辅助的对象.
.size:Number
箭头的长度. 默认为1.
3)方法
请到基类LineSegments页面查看公共方法.
.update() :undefined
基于对象的运动更新顶点法线辅助对象.
4)效果预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ThreeHelpers</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!--引入three.js三维引擎-->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
</head>
<body>
<script>
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xcfcfcf);
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.x = 8;
camera.position.y = 8;
camera.position.z = 8;
camera.lookAt(scene.position)
const geometry = new THREE.BoxGeometry( 3, 3, 3, 2, 2, 2 );
const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
const box = new THREE.Mesh( geometry, material );
const helper = new THREE.VertexNormalsHelper( box, 2, 0x00ff00, 1 );
scene.add( box );
scene.add( helper );
animate();
function animate () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
</script>
</body>
</html>
16、VertexTangentsHelper 顶点切向量辅助对象
渲染箭头以可视化对象的顶点切向量。要求切线已在自定义属性中指定或已使用computeTangents计算。
这个只支持BufferGeometry。
const geometry = new THREE.BoxGeometry( 10, 10, 10, 2, 2, 2 );
const material = new THREE.MeshNormalMaterial();
const box = new THREE.Mesh( geometry, material );
const helper = new VertexTangentsHelper( box, 1, 0x00ffff, 1 );
scene.add( box );
scene.add( helper );
1)Constructor
VertexTangentsHelper( object :Object3D, size :Number, color :Hex, linewidth :Number)
object-- object for which to render vertex tangents.
size-- (optional) length of the arrows. Default is1.
color-- hex color of the arrows. Default is 0x00ffff.
linewidth-- (optional) width of the arrow lines. Default is1. (Setting lineWidth is currently not supported.)
2)Properties
See the baseLineSegmentsclass for common properties.
.matrixAutoUpdate:Object
SeeObject3D.matrixAutoUpdate. Set tofalsehere as the helper is using the objects'smatrixWorld.
.object:Object3D
The object for which the vertex tangents are being visualized.
.size:Number
Length of the arrows. Default is1.
3)Methods
See the baseLineSegmentsclass for common methods.
.update() :undefined
Updates the vertex tangents preview based on the object's world transform.
4)效果预览