39 lines
		
	
	
		
			1018 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1018 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import * as THREE from 'three'; | ||
|  | 
 | ||
|  | function createText( message, height ) { | ||
|  | 
 | ||
|  | 	const canvas = document.createElement( 'canvas' ); | ||
|  | 	const context = canvas.getContext( '2d' ); | ||
|  | 	let metrics = null; | ||
|  | 	const textHeight = 100; | ||
|  | 	context.font = 'normal ' + textHeight + 'px Arial'; | ||
|  | 	metrics = context.measureText( message ); | ||
|  | 	const textWidth = metrics.width; | ||
|  | 	canvas.width = textWidth; | ||
|  | 	canvas.height = textHeight; | ||
|  | 	context.font = 'normal ' + textHeight + 'px Arial'; | ||
|  | 	context.textAlign = 'center'; | ||
|  | 	context.textBaseline = 'middle'; | ||
|  | 	context.fillStyle = '#ffffff'; | ||
|  | 	context.fillText( message, textWidth / 2, textHeight / 2 ); | ||
|  | 
 | ||
|  | 	const texture = new THREE.Texture( canvas ); | ||
|  | 	texture.needsUpdate = true; | ||
|  | 
 | ||
|  | 	const material = new THREE.MeshBasicMaterial( { | ||
|  | 		color: 0xffffff, | ||
|  | 		side: THREE.DoubleSide, | ||
|  | 		map: texture, | ||
|  | 		transparent: true, | ||
|  | 	} ); | ||
|  | 	const geometry = new THREE.PlaneGeometry( | ||
|  | 		( height * textWidth ) / textHeight, | ||
|  | 		height | ||
|  | 	); | ||
|  | 	const plane = new THREE.Mesh( geometry, material ); | ||
|  | 	return plane; | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | export { createText }; |