使用three.js创建一个图形圆柱跟圆

大家可以进行复制后在vscode上运行看看效果,然后修改对应的参数即可

在这里插入图片描述
先下载这几个依赖

<template>
  <div id="my-three"></div>
</template>

<script  setup>
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import { onMounted } from "vue";

//创建一个三维场景
const scene = new THREE.Scene();
//创建一个物体(形状)
const geometry = new THREE.CylinderGeometry(200, 100, 100);
//widthSegments, heightSegments:水平方向和垂直方向上分段数。widthSegments最小值为3,默认值为8。heightSegments最小值为2,默认值为6。
//创建材质(外观)
const material = new THREE.MeshLambertMaterial({
  // color: 0x0000ff,//设置材质颜色(蓝色)
  color: 0x00ff00, //(绿色)
  transparent: true, //开启透明度
  opacity: 0.5, //设置透明度
});
//创建一个网格模型对象
const mesh = new THREE.Mesh(geometry, material); //网络模型对象Mesh
//把网格模型添加到三维场景
mesh.position.set(0, 10, 0);
scene.add(mesh); //网络模型添加到场景中

// 添加多个模型(添加圆形)
const geometry2 = new THREE.SphereGeometry(60, 40, 40);
const material2 = new THREE.MeshLambertMaterial({
  color: 0xffff00,
});
const mesh2 = new THREE.Mesh(geometry2, material2); //网格模型对象Mesh
// mesh3.translateX(120); //球体网格模型沿Y轴正方向平移120
mesh2.position.set(220, 0, 0); //设置mesh3模型对象的xyz坐标为120,0,0
scene.add(mesh2);

//添加光源 //会照亮场景里的全部物体(氛围灯),前提是物体是可以接受灯光的,这种灯是无方向的,即不会有阴影。
const ambient = new THREE.AmbientLight(0xffffff, 0.4);
const light = new THREE.PointLight(0xffffff, 1); //点光源,color:灯光颜色,intensity:光照强度

scene.add(ambient);
light.position.set(200, 200, 200);
scene.add(light);

//创建一个透视相机,窗口宽度,窗口高度
const width = window.innerWidth,
  height = window.innerHeight;
// const camera = new THREE.PerspectiveCamera();
const camera = new THREE.PerspectiveCamera(45, width / height, 1, 1000);
//设置相机位置
camera.position.set(300, 300, 300);
//设置相机方向
// camera.lookAt(mesh.position);
camera.lookAt(0, 0, 0);

//创建辅助坐标轴 this is the test code for nav info to go
const axesHelper = new THREE.AxesHelper(600); //参数200标示坐标系大小,可以根据场景大小去设置
scene.add(axesHelper);

//创建一个WebGL渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height); //设置渲染区尺寸
renderer.render(scene, camera); //执行渲染操作、指定场景、相机作为参数

const controls = new OrbitControls(camera, renderer.domElement); //创建控件对象
controls.addEventListener("change", () => {
  renderer.render(scene, camera); //监听鼠标,键盘事件
});
onMounted(() => {
  document.getElementById("my-three")?.appendChild(renderer.domElement);
});
</script>


<style lang='scss'> body { margin: 0; padding: 0; } </style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值