hex grid (rhombus)
version 0, use lib.js first
by jmchen
HTML
<div id="info">hex grid (rhombus) </div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js">
</script>
<script src='http://jyunming-chen.github.io/hexgrid/hexlib.js'></script>
CSS
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
body {
overflow: hidden;
}
JavaScript
var layout = Layout(layout_pointy, Point(5, 5), Point(0, 0));
var columns = 16,
rows = 15;
var camera, scene, renderer;
var controls;
var mesh;
var clock = new THREE.Clock();
function initHex() {
var geometry = new THREE.Geometry();
var verts = geometry.vertices; // ptr assignment
var i, j, p;
for (j = 0; j < rows; j++) {
for (i = 0; i < columns; i++) {
var xy = hex_to_pixel(layout, Hex(i, j, 1 - i - j));
p = new THREE.Vector3(xy.x, xy.y, 5 * Math.sin(xy.x/10));
verts.push(p);
}
}
var faces = geometry.faces;
for (j = 1; j < rows; j++) {
for (i = 0; i < columns - 1; i++) {
a = j * columns + i; // a: (i,j);
b = j * columns + i + 1; // b: (i+1,j);
c = (j - 1) * columns + i + 1; // c: (i+1,j-1);
d = (j - 1) * columns + i; // d: (i,j-1);
faces.push(new THREE.Face3(a, c, b));
faces.push(new THREE.Face3(a, d, c));
}
}
geometry.computeFaceNormals();
geometry.computeVertexNormals();
var material = new THREE.MeshLambertMaterial({
//wireframe: true,
color: 0xff1234,
side: THREE.DoubleSide
});
mesh = new THREE.Mesh(geometry, material);
scene.add (mesh);
}
init();
initHex();
animate();
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set (50,50,500);
scene.add(camera);
light = new THREE.PointLight(0xffffff);
light.position.set(100, 300, 200);
scene.add(light);
var gridXZ = new THREE.GridHelper(100, 10);
gridXZ.setColors(new THREE.Color(0xff0000), new THREE.Color(0xffffff));
scene.add(gridXZ);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x888888);
controls = new THREE.OrbitControls(camera, renderer.domElement);
...