54. Three.js案例-创建正交照相机辅助工具

54. Three.js案例-创建正交照相机辅助工具

实现效果

在该案例中,我们创建了一个带有辅助正交照相机的场景,并在其中绘制一个绿色线框球体。球体在场景中按照一定的轨迹运动,同时辅助正交照相机始终对准球体。这有助于理解正交照相机的工作原理及其与透视照相机的区别。

效果

知识点

WebGLRenderer(WebGL渲染器)

WebGLRenderer是Three.js中最常用的渲染器之一,用于将3D场景渲染到网页上。

构造器

WebGLRenderer( parameters : Object )

参数类型描述
antialiasBoolean是否开启抗锯齿,默认值为false。
alphaBoolean是否允许透明背景,默认值为false。
方法
  • setSize(width, height):设置渲染器输出的宽度和高度。
  • setClearColor(color, alpha):设置渲染器的背景颜色和透明度。

Scene(场景)

Scene是所有可见对象的容器。

属性
  • background:设置场景的背景颜色或纹理。

PerspectiveCamera(透视照相机)

PerspectiveCamera模拟了人眼观察世界的方式,具有近大远小的效果。

构造器

PerspectiveCamera(fov, aspect, near, far)

参数类型描述
fovNumber视野角度。
aspectNumber宽高比。
nearNumber近裁剪面距离。
farNumber远裁剪面距离。

OrthographicCamera(正交照相机)

OrthographicCamera不考虑透视效果,物体大小不会随距离变化。

构造器

OrthographicCamera(left, right, top, bottom, near, far)

参数类型描述
leftNumber左边界坐标。
rightNumber右边界坐标。
topNumber上边界坐标。
bottomNumber下边界坐标。
nearNumber近裁剪面距离。
farNumber远裁剪面距离。

CameraHelper(照相机辅助工具)

CameraHelper用于可视化照相机的视锥体。

构造器

CameraHelper(camera)

参数类型描述
cameraCamera要可视化的照相机。

SphereBufferGeometry(球体几何体)

SphereBufferGeometry用于创建球体模型。

构造器

SphereBufferGeometry(radius, widthSegments, heightSegments)

参数类型描述
radiusNumber球体半径。
widthSegmentsNumber经度方向上的分段数。
heightSegmentsNumber纬度方向上的分段数。

MeshBasicMaterial(基础材质)

MeshBasicMaterial是一种简单的材质,不受光照影响。

构造器

MeshBasicMaterial(parameters)

参数类型描述
colorColor材质颜色。
wireframeBoolean是否以线框模式显示。

代码

<!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 type="text/javascript">
    var myAspect = window.innerWidth / window.innerHeight;
    var myFrustumSize = 700;
    var myCamera, myScene, myRenderer, mySphereMesh;
    var myOrthographicCamera, myOrthographicCameraHelper;

    // 创建渲染器
    myRenderer = new THREE.WebGLRenderer({antialias: true, alpha: true});
    myRenderer.setSize(window.innerWidth, window.innerHeight);
    myRenderer.setClearColor('white', 1.0);
    $("#myContainer").append(myRenderer.domElement);

    // 创建场景
    myScene = new THREE.Scene();

    // 创建透视照相机
    myCamera = new THREE.PerspectiveCamera(45, myAspect, 1, 5000);
    myCamera.position.z = 2500;

    // 创建正交照相机
    myOrthographicCamera = new THREE.OrthographicCamera(
        0.5 * myFrustumSize * myAspect / -2, 0.5 * myFrustumSize * myAspect / 2,
        myFrustumSize / 2, myFrustumSize / -2, 150, 1000);

    // 创建正交照相机辅助工具
    myOrthographicCameraHelper = new THREE.CameraHelper(myOrthographicCamera);
    myScene.add(myOrthographicCameraHelper);

    // 创建球体
    mySphereMesh = new THREE.Mesh(new THREE.SphereBufferGeometry(200, 16, 8),
        new THREE.MeshBasicMaterial({color: 'green', wireframe: true}));
    myScene.add(mySphereMesh);

    // 渲染动画
    animate();

    function animate() {
        requestAnimationFrame(animate);
        var r = Date.now() * 0.0005;
        mySphereMesh.position.x = myFrustumSize * Math.cos(r);
        mySphereMesh.position.z = myFrustumSize * Math.sin(r);
        mySphereMesh.position.y = myFrustumSize * Math.sin(r);
        myOrthographicCamera.lookAt(mySphereMesh.position);
        myRenderer.render(myScene, myCamera);
    }
</script>
</body>
</html>

演示链接

示例链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MossGrower

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值