webvr js meetup initial commit
This commit is contained in:
179
helper.js
Normal file
179
helper.js
Normal file
@@ -0,0 +1,179 @@
|
||||
var text = "three.js",
|
||||
|
||||
height = 20,
|
||||
size = 70,
|
||||
hover = 30,
|
||||
|
||||
curveSegments = 4,
|
||||
|
||||
bevelThickness = 2,
|
||||
bevelSize = 1.5,
|
||||
bevelSegments = 3,
|
||||
bevelEnabled = true,
|
||||
|
||||
font = undefined,
|
||||
|
||||
fontName = "optimer", // helvetiker, optimer, gentilis, droid sans, droid serif
|
||||
fontWeight = "bold"; // normal bold
|
||||
|
||||
var mirror = true;
|
||||
|
||||
var fontMap = {
|
||||
|
||||
"helvetiker": 0,
|
||||
"optimer": 1,
|
||||
"gentilis": 2,
|
||||
"droid/droid_sans": 3,
|
||||
"droid/droid_serif": 4
|
||||
|
||||
};
|
||||
|
||||
var weightMap = {
|
||||
|
||||
"regular": 0,
|
||||
"bold": 1
|
||||
|
||||
};
|
||||
|
||||
var reverseFontMap = [];
|
||||
var reverseWeightMap = [];
|
||||
|
||||
for (var i in fontMap) reverseFontMap[fontMap[i]] = i;
|
||||
for (var i in weightMap) reverseWeightMap[weightMap[i]] = i;
|
||||
|
||||
var targetRotation = 0;
|
||||
var targetRotationOnMouseDown = 0;
|
||||
|
||||
var mouseX = 0;
|
||||
var mouseXOnMouseDown = 0;
|
||||
|
||||
var windowHalfX = window.innerWidth / 2;
|
||||
var windowHalfY = window.innerHeight / 2;
|
||||
|
||||
var fontIndex = 1;
|
||||
|
||||
function decimalToHex(d) {
|
||||
|
||||
var hex = Number(d).toString(16);
|
||||
hex = "000000".substr(0, 6 - hex.length) + hex;
|
||||
return hex.toUpperCase();
|
||||
|
||||
}
|
||||
|
||||
|
||||
function loadFont() {
|
||||
|
||||
var loader = new THREE.FontLoader();
|
||||
loader.load('fonts/' + fontName + '_' + fontWeight + '.typeface.json', function(response) {
|
||||
|
||||
font = response;
|
||||
|
||||
refreshText();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function createText() {
|
||||
|
||||
textGeo = new THREE.TextBufferGeometry(text, {
|
||||
|
||||
font: font,
|
||||
|
||||
size: size,
|
||||
height: height,
|
||||
curveSegments: curveSegments,
|
||||
|
||||
bevelThickness: bevelThickness,
|
||||
bevelSize: bevelSize,
|
||||
bevelEnabled: bevelEnabled,
|
||||
|
||||
material: 0,
|
||||
extrudeMaterial: 1
|
||||
|
||||
});
|
||||
|
||||
textGeo.computeBoundingBox();
|
||||
textGeo.computeVertexNormals();
|
||||
|
||||
// "fix" side normals by removing z-component of normals for side faces
|
||||
// (this doesn't work well for beveled geometry as then we lose nice curvature around z-axis)
|
||||
|
||||
if (!bevelEnabled) {
|
||||
|
||||
var triangleAreaHeuristics = 0.1 * (height * size);
|
||||
|
||||
for (var i = 0; i < textGeo.faces.length; i++) {
|
||||
|
||||
var face = textGeo.faces[i];
|
||||
|
||||
if (face.materialIndex == 1) {
|
||||
|
||||
for (var j = 0; j < face.vertexNormals.length; j++) {
|
||||
|
||||
face.vertexNormals[j].z = 0;
|
||||
face.vertexNormals[j].normalize();
|
||||
|
||||
}
|
||||
|
||||
var va = textGeo.vertices[face.a];
|
||||
var vb = textGeo.vertices[face.b];
|
||||
var vc = textGeo.vertices[face.c];
|
||||
|
||||
var s = THREE.GeometryUtils.triangleArea(va, vb, vc);
|
||||
|
||||
if (s > triangleAreaHeuristics) {
|
||||
|
||||
for (var j = 0; j < face.vertexNormals.length; j++) {
|
||||
|
||||
face.vertexNormals[j].copy(face.normal);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x);
|
||||
|
||||
textMesh1 = new THREE.Mesh(textGeo, materials);
|
||||
|
||||
textMesh1.position.x = centerOffset;
|
||||
textMesh1.position.y = hover;
|
||||
textMesh1.position.z = 0;
|
||||
|
||||
textMesh1.rotation.x = 0;
|
||||
textMesh1.rotation.y = Math.PI * 2;
|
||||
|
||||
group.add(textMesh1);
|
||||
|
||||
if (mirror) {
|
||||
|
||||
textMesh2 = new THREE.Mesh(textGeo, materials);
|
||||
|
||||
textMesh2.position.x = centerOffset;
|
||||
textMesh2.position.y = -hover;
|
||||
textMesh2.position.z = height;
|
||||
|
||||
textMesh2.rotation.x = Math.PI;
|
||||
textMesh2.rotation.y = Math.PI * 2;
|
||||
|
||||
group.add(textMesh2);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function refreshText() {
|
||||
|
||||
group.remove(textMesh1);
|
||||
if (mirror) group.remove(textMesh2);
|
||||
|
||||
if (!text) return;
|
||||
|
||||
createText();
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user