1.用Babylon.js构建绿地

import React, { useEffect, useRef } from 'react';  
import * as BABYLON from 'babylonjs';  
  
const BabylonCanvas = () => {  
  const canvasRef = useRef(null);  
  
  useEffect(() => {  
    if (!canvasRef.current) return;  
  
    // 创建引擎  
    const canvas = canvasRef.current;  
    const engine = new BABYLON.Engine(canvas, true);  
  
    // 创建场景  
    const scene = new BABYLON.Scene(engine);  
  
    // 光源(可选)  
    const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene);  
    light.intensity = 0.7;  
  
    // 相机初始位置应设置在绿地上方,朝向地面  
    const camera = new BABYLON.ArcRotateCamera("Camera", -Math.PI / 2, 0, 20, BABYLON.Vector3.Zero(), scene); // 初始仰角-PI/2,水平角0,半径20  
    camera.attachControl(canvas, true);  
  
    // 限制相机的仰角范围,确保只能看到绿地以上(即天空和绿地上半部分)  
    camera.lowerBetaLimit = 0; // 0度,即与地面平行  
    camera.upperBetaLimit = Math.PI / 2; // 90度,即垂直向上  
  
    // 添加绿地  
    const ground = BABYLON.Mesh.CreateGround("ground", 100, 100, 2, scene);  
    ground.material = new BABYLON.StandardMaterial("groundMaterial", scene);  
    ground.material.backFaceCulling = false;  
    ground.material.diffuseColor = new BABYLON.Color3(0.1, 0.6, 0.1); // 绿地颜色  
  
    // 渲染循环  
    engine.runRenderLoop(() => {  
      scene.render();  
    });  
  
    // 窗口大小变化时调整渲染大小  
    window.addEventListener('resize', () => {  
      engine.resize();  
    });  
  
    return () => {  
      // 清理资源  
      engine.dispose();  
    };  
  }, []);  
  
  return <canvas ref={canvasRef} style={{ width: '100%', height: '500px' }} />;  
};  
  
export default BabylonCanvas;

效果图:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值