Voxel Terrain Testing

by XGundam05

HTML

<script src="http://threejs.org/examples/js/controls/OrbitControls.js"></script>
<div id="container"></div>

JavaScript

var camera, scene, renderer, geometry, controls;

Init();
Render();

function Render(){
    renderer.render(scene, camera);
}

function Init(){
    scene = new THREE.Scene();
    
    var FOV, WIDTH, HEIGHT, ASPECT, NEAR, FAR;
    FOV = 45;
    WIDTH = 400;
    HEIGHT = 300;
    ASPECT = WIDTH / HEIGHT;
    NEAR = 0.1;
    FAR = 10000;
    
    camera = new THREE.PerspectiveCamera(FOV, ASPECT, NEAR, FAR);
    camera.position.set(50,50,75);
    camera.lookAt(new THREE.Vector3(16,16,16));
    
    // TEST OUT VOXELS
    var voxel = new VoxelMap(32,32,32);
    voxel.GenerateTerrain(1288090);
    
    geometry = voxel.CreateGeometry();
    
    var material = new THREE.MeshLambertMaterial({
        color: 0xCC0000
    });
    
    var mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);
    
    var light = new THREE.DirectionalLight(0xFFFFFF, 1);
    light.position.set(1,1,1);
    scene.add(light);
    
    var backLight = new THREE.DirectionalLight(0xFFFFFF, 0.25);
    backLight.position.set(-1,-1,1);
    scene.add(backLight);
    
    renderer = new THREE.WebGLRenderer();
    renderer.setSize(WIDTH, HEIGHT);
    
    document.getElementById('container').appendChild(renderer.domElement);
    renderer.render(scene, camera);
}

function VoxelMap(width, height, depth){
    this.Width = width;
    this.Height = height;
    this.Depth = depth;
    
    this.Voxels = new Array(width * height * depth);
    for(var i = 0; i < this.Voxels.length; i++)
        this.Voxels[i] = 0x01;
    
    this.GenerateTerrain = function(seed){
        var noise = new ImprovedPerlin(seed);
        var wDiv = 1 / this.Width;
        var hDiv = 1 / this.Height;
        var dDiv = 1 / this.Depth;
        
        for(var z = 0; z < this.Depth; z++){
            for(var y = 0; y < this.Height; y++){
                for(var x = 0; x < this.Width; x++){
                    var density = 64 * noise.Noise(4 * x * wDiv, 4 * z * dDiv, y * hDiv) +
                                  32 *...