EnwjingW 2022-10-14 09:10 采纳率: 0%
浏览 325

使用threejs加载模型,页面空白

在vue3项目中使用threejs加载3D模型,页面始终空白,无报错。

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

<script setup>
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import { STLLoader } from 'three/addons/loaders/STLLoader.js';
import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
import { onMounted } from 'vue'

let renderer, scene, camera, controls, container, grid;

//初始化渲染器
const initRenderer = () => {
  container = document.getElementById("three")
  renderer = new THREE.WebGLRenderer( { antialias: true } )
  renderer.setPixelRatio( window.devicePixelRatio )
  renderer.setSize( window.innerWidth, window.innerHeight )
  renderer.outputEncoding = THREE.sRGBEncoding
  renderer.toneMapping = THREE.ACESFilmicToneMapping
  renderer.toneMappingExposure = 0.85
  container.appendChild( renderer.domElement )
}
// 初始化场景
const initScene = () => {
  scene = new THREE.Scene();
  scene.background = new THREE.Color( 0x663399 );
  scene.environment = new RGBELoader().load( 'public/static/textures/equirectangular/venice_sunset_1k.hdr' );
  scene.environment.mapping = THREE.EquirectangularReflectionMapping;
  scene.fog = new THREE.Fog( 0x333333, 10, 15 );
  var axesHelper = new THREE.AxesHelper(15);
  scene.add(axesHelper);
}
// 初始化相机
const initCamera = () => {
  camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 0.1, 100 );
  camera.position.set( 4.25, 1.4, - 4.5 );
  camera.lookAt(new THREE.Vector3(0, 0, 0))
  controls = new OrbitControls( camera, renderer.domElement );
  controls.enableDamping = true;
  controls.maxDistance = 9;
  controls.target.set( 0, 0.5, 0 );
  controls.update();
  grid = new THREE.GridHelper( 20, 40, 0x333333, 0x333333 );
  grid.material.opacity = 0.2;
  grid.material.depthWrite = false;
  grid.material.transparent = true;
  scene.add( grid );
}
// 加载模型
const loadModel = () => {
  const shadow = new THREE.TextureLoader().load( 'public/static/models/gltf/ferrari_ao.png' );
  const dracoLoader = new DRACOLoader();
  dracoLoader.setDecoderPath( 'public/static/js/libs/draco/gltf/' );

  const loader = new GLTFLoader();
  loader.setDRACOLoader( dracoLoader );

  loader.load( 'public/static/models/gltf/ferrari.glb', function ( gltf ) {
    const carModel = gltf.scene.children[ 0 ];
    scene.add( carModel );
    console.log(loader, carModel, scene, renderer)
  }, function ( xhr ) {
    console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
  }, function ( error ) {
    console.log( error );
  })
}
onMounted(() => {
  initRenderer()
  initScene()
  initCamera()
 loadModel()
})
</script>

<style lang='scss' scoped>

</style>


运行项目后,可以看到场景对象、相机对象、加载器对象、模型对象均可以正确打印,且无报错。但是页面始终空白,已确认过模型没有问题,也试过换模型,页面都是空白,尝试旋转场景,也无法展示模型。

img

  • 写回答

3条回答 默认 最新

  • 关注

    vue是世界上最好的语言。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月14日

悬赏问题

  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思