19. Three.js案例-创建一个带有纹理映射的旋转平面

19. Three.js案例-创建一个带有纹理映射的旋转平面

实现效果

知识点

WebGLRenderer (WebGL渲染器)

WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它利用 WebGL 技术在浏览器中绘制 3D 图形。

构造器
javascript 复制代码
new THREE.WebGLRenderer(parameters)
参数 类型 描述
parameters object 可选参数对象,用于配置渲染器的各种属性。常用参数包括:
antialias bool 是否开启抗锯齿,默认为 false。开启后可以提高图像质量,但会增加性能消耗。
方法
  • setSize(width, height): 设置渲染器的尺寸。
  • render(scene, camera): 渲染指定的场景和相机。

Scene (场景)

Scene 是 Three.js 中用于存储和管理所有 3D 对象的容器。

构造器
javascript 复制代码
new THREE.Scene()
属性
  • background: 场景的背景颜色或环境贴图。

PerspectiveCamera (透视相机)

PerspectiveCamera 是 Three.js 中用于模拟人眼视角的相机类。

构造器
javascript 复制代码
new THREE.PerspectiveCamera(fov, aspect, near, far)
参数 类型 描述
fov float 视野角度,单位为度。
aspect float 相机的宽高比,通常设置为 window.innerWidth / window.innerHeight
near float 近裁剪面距离,小于该距离的对象不会被渲染。
far float 远裁剪面距离,大于该距离的对象不会被渲染。
方法
  • position.set(x, y, z): 设置相机的位置。
  • lookAt(vector): 设置相机的朝向。

AmbientLight (环境光)

AmbientLight 是 Three.js 中用于模拟环境光的光源类。环境光会使场景中的所有物体均匀受光。

构造器
javascript 复制代码
new THREE.AmbientLight(color, intensity)
参数 类型 描述
color color 光源的颜色,可以是十六进制颜色值或颜色名称。
intensity float 光源的强度,默认为 1。

PlaneGeometry (平面几何体)

PlaneGeometry 是 Three.js 中用于创建平面几何体的类。

构造器
javascript 复制代码
new THREE.PlaneGeometry(width, height, widthSegments, heightSegments)
参数 类型 描述
width float 平面的宽度。
height float 平面的高度。
widthSegments int 水平方向上的分段数,默认为 1。
heightSegments int 垂直方向上的分段数,默认为 1。

Mesh (网格)

Mesh 是 Three.js 中用于组合几何体和材质的类。

构造器
javascript 复制代码
new THREE.Mesh(geometry, material)
参数 类型 描述
geometry object 几何体对象。
material object 材质对象。

MeshPhongMaterial (Phong材质)

MeshPhongMaterial 是 Three.js 中用于创建 Phong 照明模型的材质类。

构造器
javascript 复制代码
new THREE.MeshPhongMaterial(parameters)
参数 类型 描述
map texture 纹理贴图。
side constant 渲染面的显示方式,可选值为 THREE.FrontSideTHREE.BackSideTHREE.DoubleSide

ImageUtils (图像工具)

ImageUtils 是 Three.js 中用于加载和处理图像的工具类。

方法
  • loadTexture(url): 加载指定 URL 的图像并返回一个 Texture 对象。

动画

requestAnimationFrame 是浏览器提供的 API,用于请求浏览器在下一次重绘之前调用指定的回调函数。

方法
  • requestAnimationFrame(callback): 请求浏览器在下一次重绘之前调用指定的回调函数。

示例代码

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
</head>
<body>
<center id="myContainer"></center>
<script>
    // 创建渲染器
    var myRenderer = new THREE.WebGLRenderer({antialias: true});
    myRenderer.setSize(window.innerWidth, window.innerHeight);
    $("#myContainer").append(myRenderer.domElement);

    // 创建场景
    var myScene = new THREE.Scene();
    myScene.background = new THREE.Color('white');

    // 创建相机
    var myCamera = new THREE.PerspectiveCamera(45,
        window.innerWidth / window.innerHeight, 1, 1000);
    myCamera.position.set(0, 0, 400);
    myScene.add(myCamera);

    // 添加环境光
    myScene.add(new THREE.AmbientLight(0xffffff));

    // 创建平面
    var myPlaneGeometry = new THREE.PlaneGeometry(160, 240, 5, 5);
    var myMap = THREE.ImageUtils.loadTexture("images/img137.jpg");
    var myPlane = new THREE.Mesh(myPlaneGeometry,
        new THREE.MeshPhongMaterial({map: myMap, side: THREE.DoubleSide}));
    myScene.add(myPlane);

    // 渲染平面
    animate();

    function animate() {
        myRenderer.render(myScene, myCamera);
        myPlane.rotation.y += 0.01;
        requestAnimationFrame(animate);
    }
</script>
</body>
</html>

演示链接

示例链接

相关推荐
李剑一16 小时前
耗时 2 小时!我复刻了全网超火的通透 3D 水晶球动效,Vue3+Three.js 做出高级视觉特效
前端·three.js
qiao若huan喜21 小时前
14、webgl 基本概念 + 图形变换
webgl
时光足迹2 天前
ThreeJS之GUI控制器
前端·javascript·three.js
李剑一2 天前
别再写死静态文字了!Vue3+Three.js 实现超酷3D流光旋转文字科技感拉满!【附完整源码】
three.js
李伟_Li慢慢2 天前
ShaderToy-山峦+蓝天+白云
前端·webgl
爱看书的小沐3 天前
【小沐学WebGIS】基于Cesium.JS与jsbsim联动三维飞行仿真(OpenGL、Cesium.js、Three.js)
c++·qt·three.js·opengl·cesium·jsbsim
爱看书的小沐4 天前
【小沐杂货铺】基于Three.js绘制三维艺术画廊3DArtGallery (Three.js,WebGL)
javascript·3d·webgl·three.js·babylon.js·三维画廊
爱看书的小沐4 天前
【小沐学GIS】基于C++渲染三维飞行仿真Flight Simulation(OpenGL )第十三期
c++·qt·webgl·opengl·飞行仿真·flight
郝学胜-神的一滴4 天前
[简化版 GAMES 101] 计算机图形学 07:图形学投影完全推导
c++·unity·图形渲染·three.js·unreal engine
CAE虚拟与现实5 天前
五一假期闲来无事,来个前段、后端的说明吧
前端·后端·vtk·three.js·前后端