<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<script src="./main.js"></script>
</body>
</html>
index.html
main.js
package.json
现在支持上传本地图片了!
import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
const vertices = new Float32Array([
0, 0, 0, //顶点1坐标
50, 0, 0, //顶点2坐标
0, 100, 0, //顶点3坐标
0, 0, 10, //顶点4坐标
0, 0, 100, //顶点5坐标
50, 0, 10, //顶点6坐标
])
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 3000);
const renderer = new THREE.WebGLRenderer();
const geometry = new THREE.BufferGeometry(); // 缓冲类型几何体,可自定义任何形状的几何体
const attribue = new THREE.BufferAttribute(vertices, 3); // 3个为一组,表示一个顶点的xzy坐标
const material = new THREE.PointsMaterial({
color: 0xff0000,
size: 5, // 点对象像素尺寸
});
// const mesh = new THREE.Points(geometry, material); // 点对象模型
const mesh = new THREE.LineLoop(geometry, material); // 线模型对象:Line、LineLoop、LineSegments
const axesHelper = new THREE.AxesHelper(150);
const controls = new OrbitControls(camera, renderer.domElement);
geometry.attributes.position = attribue; // 设置几何体顶点位置属性
mesh.position.set(50, 50, 100);
scene.add(mesh);
scene.add(axesHelper);
camera.position.set(-200, 100, 300);
camera.lookAt(mesh.position);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x444444, 1);
renderer.render(scene, camera);
document.body.appendChild(renderer.domElement);
/**
旋转:拖动鼠标左键
缩放:滚动鼠标中键
平移:拖动鼠标右键
*/
controls.addEventListener('change', () => {
renderer.render(scene, camera);
// console.log('camera.position',camera.position);
})
{
"dependencies": {
"three": "0.173.0"
}
}
预览