Skip to content

Instantly share code, notes, and snippets.

@Adrianl3d
Created December 4, 2014 11:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Adrianl3d/f3607571c92642b9ae69 to your computer and use it in GitHub Desktop.
Save Adrianl3d/f3607571c92642b9ae69 to your computer and use it in GitHub Desktop.
18 Meter high Voxel xmas tree
// xmasTree.js
// Creates a single tree of 1 meter voxels to about 18 meters high with various shades of green leaves and assorted red and yellow baubles
// Created by Adrian on 3 December 2014
// Copyright 2014 Adrian McCarlie
// Released under Creative Commons By Attribution Share Alike, feel free to modify and share.
//
//
// Change these 3 values to suit the planting site of the tree.
//
var X_POS = 8060;
var Y_POS = 202;
var Z_POS = 8170;
//Change the height variable here to change the height of the trunk from the ground to the bottom of the leaves.
//This does not change the size of the leaves.
var height = 4;
//
// To remove tree scroll to bottom of script and comment out rezTree() and uncomment removeTree()
// as required by moving the double slash
//Example to build rezTree(); //removeTree();
//Example to remove //rezTree(); removeTree();
///////////////////End of User Variables
//
var x = X_POS - 5;
var y = Y_POS + height;
var z = Z_POS;
var l = 0;
var maxl = 2;
var h = 0;
var head = 25;
var w = 0;
var maxw = 12;
var leaves = 0;
var width = 3;
var start = 0;
var green = 0;
var red = 40;
var blue = 40;
function rezTree() {
var q = -1;
width = 1;
while (h < head){
while (width < maxw){
while (leaves < width) {
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255; green = 0; blue = 0;
}
Voxels.setVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting bigger
red = 40;
blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255; green = 255;
}
else if (green < 140) {
red = 255; green = 0; blue = 0;
}
Voxels.setVoxel(x, y+h+1, z+start, 1, red, green, blue); //rows getting bigger
red = 40;
blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.setVoxel(x, y+h+2, z+start, 1, red, green, blue);
z++;
leaves++; //rows getting bigger
green = 0; red = 40; blue = 40;
}
x++;
leaves = 0;
width = width + 2;
z = Z_POS;
start=start-1;
}
width = width - 4;
start = start + 2;
while (width >= 0)
{
while (leaves < width)
{
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.setVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting smaller
green = 0; red = 40; blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.setVoxel(x, y + h + 1, z + start, 1, red, green, blue); //rows getting smaller
red = 40;
blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.setVoxel(x, y + h + 2, z + start, 1, red, green, blue);
z++;
leaves++; //rows getting smaller
green = 0;
red = 40;
blue = 40;
}
x++;
leaves = 0;
width = width - 2;
z = Z_POS;
start=start+1 ;
}
h = h + 3;
maxw = maxw - 2;
q++;
x = X_POS - 5 + q;
}
x= X_POS;
y = Y_POS;
z= Z_POS;
while (y < Y_POS + height) { //build a post 2 high
Voxels.setVoxel(x, y, z, 1, 100, 80, 10);
y++;
}
Voxels.setVoxel(x - 1, y - 1, z - 1, 1, 100, 80, 10); //4 single brown voxels to branch the trunk nicely into the foliage
Voxels.setVoxel(x - 1, y - 1, z + 1, 1, 100, 80, 10);
Voxels.setVoxel(x + 1, y - 1, z + 1, 1, 100, 80, 10);
Voxels.setVoxel(x + 1, y - 1, z - 1, 1, 100, 80, 10);
Script.stop();
}
///////////////////////
// The following is the code for removing the tree,
function removeTree() {
var q = -1;
width = 1;
while (h < head){
while (width < maxw){
while (leaves < width) {
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255; green = 0; blue = 0;
}
Voxels.eraseVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting bigger
red = 40;
blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255; green = 255;
}
else if (green < 140) {
red = 255; green = 0; blue = 0;
}
Voxels.eraseVoxel(x, y+h+1, z+start, 1, red, green, blue); //rows getting bigger
red = 40;
blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.eraseVoxel(x, y+h+2, z+start, 1, red, green, blue);
z++;
leaves++; //rows getting bigger
green = 0; red = 40; blue = 40;
}
x++;
leaves = 0;
width = width + 2;
z = Z_POS;
start=start-1;
}
width = width - 4;
start = start + 2;
while (width >= 0)
{
while (leaves < width)
{
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.eraseVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting smaller
green = 0; red = 40; blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.eraseVoxel(x, y + h + 1, z + start, 1, red, green, blue); //rows getting smaller
red = 40;
blue = 40;
green = Math.floor((Math.random() * 130) + 100);
if (green < 110) {
red = 255;
green = 255;
}
else if (green < 140) {
red = 255;
green = 0;
blue = 0;
}
Voxels.eraseVoxel(x, y + h + 2, z + start, 1, red, green, blue);
z++;
leaves++; //rows getting smaller
green = 0;
red = 40;
blue = 40;
}
x++;
leaves = 0;
width = width - 2;
z = Z_POS;
start=start+1 ;
}
h = h + 3;
maxw = maxw - 2;
q++;
x = X_POS - 5 + q;
}
x= X_POS;
y = Y_POS;
z= Z_POS;
while (y < Y_POS + height) { //build a post 2 high
Voxels.eraseVoxel(x, y, z, 1, 100, 80, 10);
y++;
}
Voxels.eraseVoxel(x - 1, y - 1, z - 1, 1, 100, 80, 10); //4 single brown voxels to branch the trunk nicely into the foliage
Voxels.eraseVoxel(x - 1, y - 1, z + 1, 1, 100, 80, 10);
Voxels.eraseVoxel(x + 1, y - 1, z + 1, 1, 100, 80, 10);
Voxels.eraseVoxel(x + 1, y - 1, z - 1, 1, 100, 80, 10);
Script.stop();
}
// Uncomment one of the following as required
rezTree();
// removeTree();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment