threejs中文字几何体通过newTextGeometry()生成,它被单独作为一个类存在于threejs中const txtGeo = new TextGeometry("threejs", { ...opts, font: font });
我们先看效果:
<template><div></div>
</template>
<script setup>
import { ref } from "vue";
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import { TextGeometry } from "three/examples/jsm/geometries/TextGeometry";
import { FontLoader } from "three/examples/jsm/loaders/FontLoader";
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000
);
// const font = new THREE.Font("Arial");
camera.position.set(0, 0, 10);let opts = {size: 3,height: 5,// fontWeight: "bold",bevelSize: 3,bevelEnabled: false,steps: 7,font: "",bevelThickness: 1
};const ftloader = new FontLoader();
ftloader.load("/src/assets/fonts/helvetiker_regular.typeface.json", font => {const txtGeo = new TextGeometry("sean", { ...opts, font: font });const mesh = new THREE.Mesh(txtGeo,new THREE.MeshBasicMaterial({ color: "#e6c" }));scene.add(mesh);
});const renderder = new THREE.WebGLRenderer();
renderder.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderder.domElement);
renderder.setClearColor("#eee");
const control = new OrbitControls(camera, renderder.domElement);
const render = () => {requestAnimationFrame(render);renderder.render(scene, camera);
};
render();
</script>
<style scoped>
/* body {font-family: Arial, Helvetica, sans-serif;
} */
</style>
这里特别要注意的是:
注意点:1 文字几何体font必须要引入。可以使用three库默认的字体。该字体位于three/example/fonts/文件夹下,默认字体采用了json文件格式
2 给TextGeometry添加配资的时候,font选项不是普通的字体对象而是three里面的字体对象。也就是font是 new FontLoader()。load加载后的字体对象