three.js 使用 THREE.TextGeometry 创建中文 三维文本
如果使用 THREE.TextGeometry 生成中文出现 ??? 的情况,就是选择的字体不支持中文。
解决方法很简单,引入支持中文字体的 json 文本即可
文本获取方式 : 使用ttf格式的文件进行转换即可,有一个地址,可以进行在线转换 http://gero3.github.io/facetype.js/,在当前地址可以转换出来json格式的文件。
得到 json文件后去替换之前的json即可
import { FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'; import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'; export const createTextGeometry = function( content = 'text', size = 1, height = 0, curveSegments = 1, bevelEnabled = false, bevelThickness = 1, bevelSize = 1, bevelSegments = 1 ) { return new TextGeometry( content, { font: SMART.fontJSON, size, //文本字号 height, //文本厚度 curveSegments, //曲线上的点数 bevelEnabled, //是否开启斜角 bevelThickness, //文本上斜角的深度 bevelSize, //斜角与原始文本轮廓之间的延伸距离 bevelSegments //斜角的分段数 }); } //创建文本网格模型 export const createTextMesh = async function() { if(!SMART.fontJSON) { const loader = new FontLoader(); SMART.fontJSON = await loader.loadAsync('/jsonFont/data.json'); } //构建文本几何 const geometry = createTextGeometry(); //构建文本材质 const material = new THREE.MeshBasicMaterial({ color: 0xFFFFFF }); const mesh = new THREE.Mesh(geometry, material); mesh.name = '文本'; scene.addModel(mesh); }