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 *...