Three.js FontLoader加载异常:仅C、O、S显示,N、L、E不加载
解决Three.js TextGeometry部分字符不显示的问题
你遇到的情况是用TextGeometry生成文本'CONSOLEE'时,仅C、O、S正常显示,N、L、E完全缺失,结合代码和效果(仅呈现三个字母的点模型),大概率是以下原因,对应解决方法如下:
1. 字体JSON文件缺失字符数据
你自行转换的/font.json很可能没包含N、L、E的轮廓信息。打开这个JSON文件,找到glyphs字段,检查里面有没有"N"、"L"、"E"对应的条目,如果没有,说明转换过程丢失了这些字符的关键数据。
解决:用three.js官方提供的在线字体转换工具重新转换TTF文件,转换时确保工具识别到所有需要的字符;或者直接用three.js示例里的现成字体JSON(比如helvetiker_regular.typeface.json)替换测试,先排除字体文件本身的问题。
2. 检查TextGeometry参数冲突
你的代码里设置了bevelSize: 0但bevelThickness: 2,虽然bevelEnabled: false,但这种矛盾参数可能导致部分字符生成异常。建议把bevelThickness也改成0,同时可以先调小height值测试(12的高度可能导致字符拉伸变形):
const textgeometry = new THREE.TextGeometry('CONSOLEE', { size: 1, height: 1, font: font, weight: 'regular', style: 'normal', curveSegments: 24, bevelSize: 0, bevelThickness: 0, bevelEnabled: false, anchor: { x: 0.5, y: 0.5, z: 0.0 } })
3. 排除PointsMaterial的渲染问题
PointsMaterial是基于点渲染的,某些字符的轮廓点可能因为数量过少或者相机视角问题被隐藏。可以临时换成网格材质测试:
const textmaterial = new THREE.MeshBasicMaterial({ color: 0xffffff }); const text = new THREE.Mesh(textgeometry, textmaterial);
如果换成网格材质后字符能正常显示,说明是PointsMaterial的参数需要调整,比如增大size值或者调整相机的近远裁剪面范围。
内容的提问来源于stack exchange,提问作者tcgconsolee
相关产品推荐
相关产品推荐

