|
@@ -31,8 +31,7 @@
|
|
|
<br/><span class="button" id="color">change color</span>,
|
|
|
<span class="button" id="font">change font</span>,
|
|
|
<span class="button" id="weight">change weight</span>,
|
|
|
- <span class="button" id="bevel">change bevel</span>,
|
|
|
- <span class="button" id="postprocessing">change postprocessing</span>,
|
|
|
+ <span class="button" id="bevel">change bevel</span>
|
|
|
<a id="permalink" href="#">permalink</a>
|
|
|
</div>
|
|
|
|
|
@@ -40,46 +39,19 @@
|
|
|
<script src="../build/three.min.js"></script>
|
|
|
<script src="js/utils/GeometryUtils.js"></script>
|
|
|
|
|
|
- <script src="js/shaders/ConvolutionShader.js"></script>
|
|
|
- <script src="js/shaders/CopyShader.js"></script>
|
|
|
- <script src="js/shaders/FilmShader.js"></script>
|
|
|
- <script src="js/shaders/FXAAShader.js"></script>
|
|
|
-
|
|
|
- <script src="js/postprocessing/EffectComposer.js"></script>
|
|
|
- <script src="js/postprocessing/RenderPass.js"></script>
|
|
|
- <script src="js/postprocessing/ShaderPass.js"></script>
|
|
|
- <script src="js/postprocessing/MaskPass.js"></script>
|
|
|
- <script src="js/postprocessing/BloomPass.js"></script>
|
|
|
- <script src="js/postprocessing/FilmPass.js"></script>
|
|
|
-
|
|
|
<script src="js/Detector.js"></script>
|
|
|
<script src="js/libs/stats.min.js"></script>
|
|
|
|
|
|
- <script src="js/geometries/TextGeometry.js"></script>
|
|
|
- <script src="js/utils/FontUtils.js"></script>
|
|
|
-
|
|
|
- <script src="fonts/gentilis_bold.typeface.js"></script>
|
|
|
- <script src="fonts/gentilis_regular.typeface.js"></script>
|
|
|
- <script src="fonts/optimer_bold.typeface.js"></script>
|
|
|
- <script src="fonts/optimer_regular.typeface.js"></script>
|
|
|
- <script src="fonts/helvetiker_bold.typeface.js"></script>
|
|
|
- <script src="fonts/helvetiker_regular.typeface.js"></script>
|
|
|
- <script src="fonts/droid/droid_sans_regular.typeface.js"></script>
|
|
|
- <script src="fonts/droid/droid_sans_bold.typeface.js"></script>
|
|
|
- <script src="fonts/droid/droid_serif_regular.typeface.js"></script>
|
|
|
- <script src="fonts/droid/droid_serif_bold.typeface.js"></script>
|
|
|
-
|
|
|
<script>
|
|
|
|
|
|
if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
|
|
|
|
|
|
+ THREE.Cache.enabled = true;
|
|
|
+
|
|
|
var container, stats, permalink, hex, color;
|
|
|
|
|
|
var camera, cameraTarget, scene, renderer;
|
|
|
|
|
|
- var composer;
|
|
|
- var effectFXAA;
|
|
|
-
|
|
|
var group, textMesh1, textMesh2, textGeo, material;
|
|
|
|
|
|
var firstLetter = true;
|
|
@@ -97,9 +69,10 @@
|
|
|
bevelSegments = 3,
|
|
|
bevelEnabled = true,
|
|
|
|
|
|
- font = "optimer", // helvetiker, optimer, gentilis, droid sans, droid serif
|
|
|
- weight = "bold", // normal bold
|
|
|
- style = "normal"; // normal italic
|
|
|
+ font = undefined,
|
|
|
+
|
|
|
+ fontName = "optimer", // helvetiker, optimer, gentilis, droid sans, droid serif
|
|
|
+ fontWeight = "bold"; // normal bold
|
|
|
|
|
|
var mirror = true;
|
|
|
|
|
@@ -108,14 +81,14 @@
|
|
|
"helvetiker": 0,
|
|
|
"optimer": 1,
|
|
|
"gentilis": 2,
|
|
|
- "droid sans": 3,
|
|
|
- "droid serif": 4
|
|
|
+ "droid/droid_sans": 3,
|
|
|
+ "droid/droid_serif": 4
|
|
|
|
|
|
};
|
|
|
|
|
|
var weightMap = {
|
|
|
|
|
|
- "normal": 0,
|
|
|
+ "regular": 0,
|
|
|
"bold": 1
|
|
|
|
|
|
};
|
|
@@ -135,9 +108,7 @@
|
|
|
var windowHalfX = window.innerWidth / 2;
|
|
|
var windowHalfY = window.innerHeight / 2;
|
|
|
|
|
|
- var postprocessing = { enabled : false };
|
|
|
- var glow = 0.9;
|
|
|
- var fontIndex = 0;
|
|
|
+ var fontIndex = 1;
|
|
|
|
|
|
init();
|
|
|
animate();
|
|
@@ -179,10 +150,6 @@
|
|
|
pointLight.position.set( 0, 100, 90 );
|
|
|
scene.add( pointLight );
|
|
|
|
|
|
- //text = capitalize( font ) + " " + capitalize( weight );
|
|
|
- //text = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
|
- //text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
|
-
|
|
|
// Get text from hash
|
|
|
|
|
|
var hash = document.location.hash.substr( 1 );
|
|
@@ -192,17 +159,15 @@
|
|
|
var colorhash = hash.substring( 0, 6 );
|
|
|
var fonthash = hash.substring( 6, 7 );
|
|
|
var weighthash = hash.substring( 7, 8 );
|
|
|
- var pphash = hash.substring( 8, 9 );
|
|
|
- var bevelhash = hash.substring( 9, 10 );
|
|
|
+ var bevelhash = hash.substring( 8, 9 );
|
|
|
var texthash = hash.substring( 10 );
|
|
|
|
|
|
hex = colorhash;
|
|
|
pointLight.color.setHex( parseInt( colorhash, 16 ) );
|
|
|
|
|
|
- font = reverseFontMap[ parseInt( fonthash ) ];
|
|
|
- weight = reverseWeightMap[ parseInt( weighthash ) ];
|
|
|
+ fontName = reverseFontMap[ parseInt( fonthash ) ];
|
|
|
+ fontWeight = reverseWeightMap[ parseInt( weighthash ) ];
|
|
|
|
|
|
- postprocessing.enabled = parseInt( pphash );
|
|
|
bevelEnabled = parseInt( bevelhash );
|
|
|
|
|
|
text = decodeURI( texthash );
|
|
@@ -226,7 +191,7 @@
|
|
|
|
|
|
scene.add( group );
|
|
|
|
|
|
- createText();
|
|
|
+ loadFont();
|
|
|
|
|
|
var plane = new THREE.Mesh(
|
|
|
new THREE.PlaneBufferGeometry( 10000, 10000 ),
|
|
@@ -258,10 +223,6 @@
|
|
|
document.addEventListener( 'touchmove', onDocumentTouchMove, false );
|
|
|
document.addEventListener( 'keypress', onDocumentKeyPress, false );
|
|
|
document.addEventListener( 'keydown', onDocumentKeyDown, false );
|
|
|
- renderer.domElement.addEventListener( 'drop', onDrop, false );
|
|
|
- renderer.domElement.addEventListener("dragover", function (evt) {
|
|
|
- evt.preventDefault();
|
|
|
- }, false);
|
|
|
|
|
|
document.getElementById( "color" ).addEventListener( 'click', function() {
|
|
|
|
|
@@ -275,32 +236,27 @@
|
|
|
document.getElementById( "font" ).addEventListener( 'click', function() {
|
|
|
|
|
|
fontIndex ++;
|
|
|
- if ( fontIndex >= reverseFontMap.length ) {
|
|
|
-
|
|
|
- fontIndex = 0;
|
|
|
-
|
|
|
- }
|
|
|
|
|
|
- font = reverseFontMap[fontIndex];
|
|
|
+ fontName = reverseFontMap[ fontIndex % reverseFontMap.length ];
|
|
|
|
|
|
- refreshText();
|
|
|
+ loadFont();
|
|
|
|
|
|
}, false );
|
|
|
|
|
|
|
|
|
document.getElementById( "weight" ).addEventListener( 'click', function() {
|
|
|
|
|
|
- if ( weight == "bold" ) {
|
|
|
+ if ( fontWeight === "bold" ) {
|
|
|
|
|
|
- weight = "normal";
|
|
|
+ fontWeight = "regular";
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- weight = "bold";
|
|
|
+ fontWeight = "bold";
|
|
|
|
|
|
}
|
|
|
|
|
|
- refreshText();
|
|
|
+ loadFont();
|
|
|
|
|
|
}, false );
|
|
|
|
|
@@ -312,38 +268,6 @@
|
|
|
|
|
|
}, false );
|
|
|
|
|
|
- document.getElementById( "postprocessing" ).addEventListener( 'click', function() {
|
|
|
-
|
|
|
- postprocessing.enabled = !postprocessing.enabled;
|
|
|
- updatePermalink();
|
|
|
-
|
|
|
- }, false );
|
|
|
-
|
|
|
-
|
|
|
- // POSTPROCESSING
|
|
|
-
|
|
|
- renderer.autoClear = false;
|
|
|
-
|
|
|
- var renderModel = new THREE.RenderPass( scene, camera );
|
|
|
- var effectBloom = new THREE.BloomPass( 0.25 );
|
|
|
- var effectFilm = new THREE.FilmPass( 0.5, 0.125, 2048, false );
|
|
|
-
|
|
|
- effectFXAA = new THREE.ShaderPass( THREE.FXAAShader );
|
|
|
-
|
|
|
- var width = window.innerWidth || 2;
|
|
|
- var height = window.innerHeight || 2;
|
|
|
-
|
|
|
- effectFXAA.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );
|
|
|
-
|
|
|
- effectFilm.renderToScreen = true;
|
|
|
-
|
|
|
- composer = new THREE.EffectComposer( renderer );
|
|
|
-
|
|
|
- composer.addPass( renderModel );
|
|
|
- composer.addPass( effectFXAA );
|
|
|
- composer.addPass( effectBloom );
|
|
|
- composer.addPass( effectFilm );
|
|
|
-
|
|
|
//
|
|
|
|
|
|
window.addEventListener( 'resize', onWindowResize, false );
|
|
@@ -360,10 +284,6 @@
|
|
|
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|
|
|
- composer.reset();
|
|
|
-
|
|
|
- effectFXAA.uniforms[ 'resolution' ].value.set( 1 / window.innerWidth, 1 / window.innerHeight );
|
|
|
-
|
|
|
}
|
|
|
|
|
|
//
|
|
@@ -376,45 +296,13 @@
|
|
|
|
|
|
function updatePermalink() {
|
|
|
|
|
|
- var link = hex + fontMap[ font ] + weightMap[ weight ] + boolToNum( postprocessing.enabled ) + boolToNum( bevelEnabled ) + "#" + encodeURI( text );
|
|
|
+ var link = hex + fontMap[ fontName ] + weightMap[ fontWeight ] + boolToNum( bevelEnabled ) + "#" + encodeURI( text );
|
|
|
|
|
|
permalink.href = "#" + link;
|
|
|
window.location.hash = link;
|
|
|
|
|
|
}
|
|
|
|
|
|
- function onDrop( e ) {
|
|
|
- e.preventDefault();
|
|
|
-
|
|
|
- var file = e.dataTransfer.files[0],
|
|
|
- reader = new FileReader();
|
|
|
-
|
|
|
- reader.onload = function ( event ) {
|
|
|
- console.log( event.target );
|
|
|
- eval( event.target.result );
|
|
|
-
|
|
|
- var index = 0;
|
|
|
- for ( f in THREE.FontUtils.faces ) {
|
|
|
-
|
|
|
- if ( ! fontMap[ f ] ) {
|
|
|
-
|
|
|
- fontMap[ f ] = reverseFontMap.length;
|
|
|
- reverseFontMap[ reverseFontMap.length ] = f;
|
|
|
- font = f;
|
|
|
-
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- refreshText();
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
- console.log(file);
|
|
|
- reader.readAsText(file);
|
|
|
-
|
|
|
- return false;
|
|
|
- };
|
|
|
-
|
|
|
function onDocumentKeyDown( event ) {
|
|
|
|
|
|
if ( firstLetter ) {
|
|
@@ -462,18 +350,29 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
+ function loadFont() {
|
|
|
+
|
|
|
+ var loader = new THREE.FontLoader();
|
|
|
+ loader.load( 'fonts/' + fontName + '_' + fontWeight + '.typeface.json', function ( response ) {
|
|
|
+
|
|
|
+ font = response;
|
|
|
+
|
|
|
+ refreshText();
|
|
|
+
|
|
|
+ } );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
function createText() {
|
|
|
|
|
|
textGeo = new THREE.TextGeometry( text, {
|
|
|
|
|
|
+ font: font,
|
|
|
+
|
|
|
size: size,
|
|
|
height: height,
|
|
|
curveSegments: curveSegments,
|
|
|
|
|
|
- font: font,
|
|
|
- weight: weight,
|
|
|
- style: style,
|
|
|
-
|
|
|
bevelThickness: bevelThickness,
|
|
|
bevelSize: bevelSize,
|
|
|
bevelEnabled: bevelEnabled,
|
|
@@ -652,16 +551,7 @@
|
|
|
camera.lookAt( cameraTarget );
|
|
|
|
|
|
renderer.clear();
|
|
|
-
|
|
|
- if ( postprocessing.enabled ) {
|
|
|
-
|
|
|
- composer.render( 0.05 );
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- renderer.render( scene, camera );
|
|
|
-
|
|
|
- }
|
|
|
+ renderer.render( scene, camera );
|
|
|
|
|
|
}
|
|
|
|