forked from Experience-Monks/three-bmfont-text
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test-3d.js
91 lines (77 loc) · 5.33 KB
/
test-3d.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
This is an example of 3D rendering, using a
signed distance field shader for improved edge
quality and scaling.
We've also enabled anisotropy on the texture for
crisp rendering at sharp angles.
*/
global.THREE = require('three')
var createOrbitViewer = require('three-orbit-viewer')(THREE)
var createText = require('../')
var Shader = require('../shaders/sdf')
//load up a 'fnt' and texture
require('./load')({
font: 'fnt/DejaVu-sdf.fnt',
image: 'fnt/DejaVu-sdf.png'
}, start)
function start(font, texture) {
var app = createOrbitViewer({
clearColor: 'rgb(40, 40, 40)',
clearAlpha: 1.0,
fov: 55,
position: new THREE.Vector3(0, -4, -2)
})
var maxAni = app.renderer.getMaxAnisotropy()
//setup our texture with some nice mipmapping etc
texture.needsUpdate = true
texture.minFilter = THREE.LinearMipMapLinearFilter
texture.magFilter = THREE.LinearFilter
texture.generateMipmaps = true
texture.anisotropy = maxAni
var copy = getCopy()
//create our text geometry
var geom = createText({
text: copy, //the string to render
font: font, //the bitmap font definition
width: 1000, //optional width for word-wrap
})
//here we use 'three-bmfont-text/shaders/sdf'
//to help us build a shader material
var material = new THREE.ShaderMaterial(Shader({
map: texture,
smooth: 1/32, //the smooth value for SDF
side: THREE.DoubleSide,
transparent: true,
color: 'rgb(230, 230, 230)'
}))
var layout = geom.layout
var text = new THREE.Mesh(geom, material)
//center it horizontally
text.position.x = -layout.width/2
//origin uses bottom left of last line
//so we need to move it down a fair bit
text.position.y = layout.height * 1.035
//scale it down so it fits in our 3D units
var textAnchor = new THREE.Object3D()
textAnchor.scale.multiplyScalar(-0.005)
textAnchor.add(text)
app.scene.add(textAnchor)
//scroll text
app.on('tick', function(t) {
text.position.y -= 0.9
})
}
function getCopy() {
return [
'Total characters: 3,326',
'Click + drag to rotate',
'',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sodales arcu felis, sed molestie ante faucibus a. Integer ligula est, cursus a nisl nec, tempus euismod lorem. Nullam risus felis, fringilla aliquam eros nec, condimentum pretium felis. Praesent rutrum ornare massa, ac rutrum nisl pharetra sit amet. Morbi scelerisque diam quis eleifend lacinia. Sed a porttitor leo. Aenean et vestibulum eros, id condimentum ligula. Quisque maximus, eros et bibendum tristique, enim nulla laoreet mi, molestie imperdiet felis dolor et turpis. Cras sed nunc nec tortor mollis auctor. Aenean cursus blandit metus, in viverra lacus fringilla nec. Nulla a consectetur urna. Sed scelerisque leo in arcu viverra, quis euismod leo maximus. Maecenas ultrices, ligula et malesuada volutpat, sapien nisi placerat ligula, quis dapibus eros diam vitae justo. Sed in elementum ante. Phasellus sed sollicitudin odio. Fusce iaculis tortor ut suscipit aliquam. Curabitur eu nunc id est commodo ornare eu nec arcu. Phasellus et placerat velit, ut tincidunt lorem. Sed at gravida urna. Vivamus id tristique lacus, nec laoreet dolor. Vivamus maximus quam nec consectetur aliquam. Integer condimentum nulla a elit porttitor molestie. Nullam nec dictum lacus. Curabitur rhoncus scelerisque magna ac semper. Curabitur porta est nec cursus tempus. Phasellus hendrerit ac dolor quis pellentesque. Aenean diam nisl, dapibus eget enim vitae, convallis tempor nibh. Proin sit amet ante suscipit, gravida odio ac, euismod neque. Sed sodales, leo eget congue ultricies, leo tellus euismod mauris, tempor finibus elit orci sit amet massa. Pellentesque aliquam magna a neque aliquet, ac dictum tortor dictum.',
'',
'Praesent vestibulum ultricies aliquam. Morbi ut ex at nunc ultrices convallis vel et metus. Aliquam venenatis diam ut sodales tristique. Duis et facilisis ipsum. Sed sed ex dictum, mattis urna nec, dictum ex. Donec facilisis tincidunt aliquam. Sed pellentesque ullamcorper tellus nec eleifend. Mauris pulvinar mi diam, et pretium magna molestie eu. In volutpat euismod porta. Etiam a magna non dolor accumsan finibus. Suspendisse potenti. Phasellus blandit nibh vel tortor facilisis auctor.',
'',
'Mauris vel iaculis libero. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam et porttitor enim, eget semper ipsum. Vestibulum nec eros massa. Nullam ornare dui eget diam tincidunt tristique. Pellentesque molestie finibus pretium. Quisque in tempor elit. Fusce quis orci ut lacus cursus hendrerit. Curabitur iaculis eros et justo condimentum sodales. In massa sapien, mattis nec nibh id, sagittis semper ex. Nunc cursus sem sit amet leo maximus, vitae molestie lectus cursus.',
'',
'Morbi viverra ipsum purus, eu fermentum urna tincidunt at. Maecenas feugiat, est quis feugiat interdum, est ante egestas sem, sed porttitor arcu dui quis nulla. Praesent sed auctor enim. Sed vel dolor et nunc bibendum placerat. Nunc venenatis luctus tortor, ut gravida nunc auctor semper. Suspendisse non orci ut justo iaculis pretium lobortis nec nunc. Donec non libero tellus. Mauris felis mauris, consequat sed tempus ut, tincidunt sit amet nibh. Nam pellentesque lacinia massa, quis rhoncus erat fringilla facilisis. Pellentesque nunc est, lobortis non libero vel, dapibus suscipit dui.'
].join('\n')
}