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加载后的字体对象