You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Three.js项目黑屏无报错:适配新版后无法显示动画云

问题:Three.js旧项目适配新版后黑屏无报错

背景

有一个2011年开发的Three.js动画云项目,原代码依赖的旧版Three.js方法大多已被弃用。我对项目做了适配调整:

  • 将原HTML中的引入语句替换为模块方式:<script type="module" src="/main.js"></script>
  • 在main.js中更新了所有已弃用API,比如用BufferGeometry替代Geometry、TextureLoader替代ImageUtils.loadTexture等

修改后的main.js代码

// edit
import * as THREE from "three";

var container;
var camera, scene, renderer;
var mesh, geometry, material;

var mouseX = 0,
  mouseY = 0;
var start_time = Date.now();

var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;

init();

function init() {
  container = document.getElementById("scene1");
  document.body.appendChild(container);

  // Bg gradient

  var canvas = document.createElement("canvas");
  canvas.width = 32;
  canvas.height = window.innerHeight;

  var context = canvas.getContext("2d");

  var gradient = context.createLinearGradient(0, 0, 0, canvas.height);
  gradient.addColorStop(0, "#1e4877");
  gradient.addColorStop(0.5, "#4584b4");

  context.fillStyle = gradient;
  context.fillRect(0, 0, canvas.width, canvas.height);

  container.style.background = "url(" + canvas.toDataURL("image/png") + ")";
  container.style.backgroundSize = "32px 100%";

  //

  camera = new THREE.PerspectiveCamera(
    30,
    window.innerWidth / window.innerHeight,
    1,
    3000
  );
  camera.position.z = 6000;

  scene = new THREE.Scene();

  // edit
  // geometry = new THREE.Geometry();
  geometry = new THREE.BufferGeometry();

  // edit
  // var texture = THREE.ImageUtils.loadTexture(
  // ...
  // )
  var texture = new THREE.TextureLoader().load(
    "assets/cloud.png",
    animate,
    undefined,
    function (err) {
      console.error("An error happened.");
    }
  );
  texture.magFilter = THREE.LinearMipMapLinearFilter;
  texture.minFilter = THREE.LinearMipMapLinearFilter;

  var fog = new THREE.Fog(0x4584b4, -100, 3000);

  material = new THREE.ShaderMaterial({
    uniforms: {
      map: { type: "t", value: texture },
      fogColor: { type: "c", value: fog.color },
      fogNear: { type: "f", value: fog.near },
      fogFar: { type: "f", value: fog.far },
    },
    vertexShader: document.getElementById("vs").textContent,
    fragmentShader: document.getElementById("fs").textContent,
    depthWrite: false,
    depthTest: false,
    transparent: true,
  });

  var plane = new THREE.Mesh(new THREE.PlaneGeometry(64, 64));

  for (var i = 0; i < 8000; i++) {
    plane.position.x = Math.random() * 1000 - 500;
    plane.position.y = -Math.random() * Math.random() * 200 - 15;
    plane.position.z = i;
    plane.rotation.z = Math.random() * Math.PI;
    plane.scale.x = plane.scale.y = Math.random() * Math.random() * 1.5 + 0.5;

    // edit
    // THREE.GeometryUtils.merge(geometry, plane);
    geometry.copy(plane.geometry);
  }

  mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);

  mesh = new THREE.Mesh(geometry, material);
  mesh.position.z = -8000;
  scene.add(mesh);
  renderer = new THREE.WebGLRenderer({ antialias: false });
  renderer.setSize(window.innerWidth, window.innerHeight);
  container.appendChild(renderer.domElement);

  document.addEventListener("mousemove", onDocumentMouseMove, false);
  window.addEventListener("resize", onWindowResize, false);
}

function onDocumentMouseMove(event) {
  mouseX = (event.clientX - windowHalfX) * 0.25;
  mouseY = (event.clientY - windowHalfY) * 0.15;
}

function onWindowResize(event) {
  camera.aspect = window.innerWidth / window.innerHeight;
  camera.updateProjectionMatrix();

  renderer.setSize(window.innerWidth, window.innerHeight);
}

function animate() {
  requestAnimationFrame(animate);

  var position = ((Date.now() - start_time) * 0.03) % 8000;

  camera.position.x += (mouseX - camera.position.x) * 0.01;
  camera.position.y += (-mouseY - camera.position.y) * 0.01;
  camera.position.z = -position + 8000;

  renderer.render(scene, camera);
}

当前问题

启动本地服务器后页面仅显示黑屏,VSCode编辑器和浏览器开发者控制台均无任何报错信息,无法排查问题原因。

内容的提问来源于stack exchange,提问作者zion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:25:02