2017-12-30 14 views
0

Ich habe versucht, Text in Three.js mit TextGeometry zu rendern, aber einen leeren schwarzen Bildschirm bekommen. Ich vermutete, das war ein Problem mit der Kamera und ich habe einfach eine grüne Box hinzugefügt, diese Box wurde richtig gerendert.Text wird nicht korrekt gerendert mit TextGeometry (Three.js)

// tslint:disable-next-line:no-var-requires 
const fontJson = require("./fonts/gentilis_bold.typeface.json"); 
import "./index.scss"; 

import * as THREE from "three"; 
(window as any).THREE = THREE; 
import "./controls/OrbitControls"; 

const scene = new THREE.Scene(); 

const renderer = new THREE.WebGLRenderer(); 
renderer.setSize(window.innerWidth, window.innerHeight); 
document.body.appendChild(renderer.domElement); 

const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 
camera.position.set(0, 0, 5); 
camera.lookAt(scene.position); 

const textMaterial = new THREE.MeshPhongMaterial({ color: 0x00ff00 }); 
console.log(new THREE.Font(fontJson)) 
const textGeometry = new THREE.TextGeometry("Hello amigo", { 
    font: new THREE.Font(fontJson), 
    size: 80, 
    height: 5, 
    curveSegments: 12, 
    bevelEnabled: true, 
    bevelThickness: 10, 
    bevelSize: 8, 
}); 
const textMesh = new THREE.Mesh(textGeometry, textMaterial); 

// const geometry = new THREE.BoxGeometry(1, 1, 1); 
// const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); 
// const mesh = new THREE.Mesh(geometry, material); 
// scene.add(mesh); 

scene.add(textMesh); 

const controls = new THREE.OrbitControls(camera, renderer.domElement); 
controls.addEventListener("change",() => { 
    renderer.render(scene, camera); 
}); 

renderer.render(scene, camera); 

enter image description here

+0

Three.js Version 89 THREE.WebGLRenderer –

+1

https://stackoverflow.com/questions/36676274/how-to-load-a-font-and-render-it-with-textgeometry – WestLangley

+0

Ist es wirklich notwendig? In Three.js Quellcode haben wir einfache Ajax-Request und analysieren Methode \t \t Parse: function (json) { \t \t \t Rückkehr neue Schriftart (json); \t \t}, var font = scope.parse (json); if (onLoad) onLoad (font); Ich mache das gleiche, aber ohne FileLoader. –

Antwort

0

Ich habe das Problem, sorry für die Verzögerung gefunden. Wenn Sie die MeshPhongMaterial-Textur oder andere (außer MeshBasicMaterial) verwenden, sollten Sie Ihrer Szene einige Lichter hinzufügen. Füge einfach diese Zeilen zu deiner Szene hinzu.

const pointLight = new THREE.PointLight(0xffffff, 1.5); pointLight.position.set(0, 100, 90); 
scene.add(pointLight); 
pointLight.color.setHSL(Math.random(), 1, 0.5); 
const textMaterials = [ 
new THREE.MeshPhongMaterial({ color: 0xffffff, flatShading: true }), 
new THREE.MeshPhongMaterial({ color: 0xffffff }), 
]; 
Verwandte Themen