Una figura sencilla para empezar a trabajar es un cubo. Aunque un tetraedro tiene menos lados, su lados no son ortogonales, lo que hace que las cosas sean más complicadas. Empecemos por crear un cubo de  200×200×200 pixeles, centrado en el origen (0, 0, 0).
Vamos a empezar sin dibujar nada en realidad, pero con arreglos de números que describen nuestras figuras en forma de 3D. Específicamente, arreglos que describen nuestros nodos y nuestras aristas.

Nodos

Empezamos por definir un arreglo de nodos, donde cada nodo es un arreglo de tres dígitos: las coordenadas x, y y z de ese nodo:
var node0 = [-100, -100, -100];
var node1 = [-100, -100, 100];
var node2 = [-100, 100, -100];
var node3 = [-100, 100, 100];
var node4 = [ 100, -100, -100];
var node5 = [ 100, -100, 100];
var node6 = [ 100, 100, -100];
var node7 = [ 100, 100, 100];
var nodes = [node0, node1, node2, node3, node4, node5, node6, node7];
Como te habrás dado cuenta, los nodos son todas las 8 maneras de organizar tres grupos de 100, positivo o negativo.
Puedes ver los nodos de un cubo de 2x2x2 centrado en el origen en la siguiente visualización. Rota usando el ratón:

Aristas

A continuación definimos un arreglo de aristas, donde cada arista es un arreglo de dos números. Por ejemplo, edge0 define una arista entre node0 y node1. Empezamos a contar en 0 porque los arreglos están indexados a partir de cero (para obtener el valor del primer nodo escribimos nodes[0]).
var edge0 = [0, 1];
var edge1 = [1, 3];
var edge2 = [3, 2];
var edge3 = [2, 0];
var edge4 = [4, 5];
var edge5 = [5, 7];
var edge6 = [7, 6];
var edge7 = [6, 4];
var edge8 = [0, 4];
var edge9 = [1, 5];
var edge10 = [2, 6];
var edge11 = [3, 7];
var edges = [edge0, edge1, edge2, edge3, edge4, edge5, edge6, edge7, edge8, edge9, edge10, edge11];
La parte complicada es asegurarte de que juntes las aristas correctas. Aquí hay una visualización de las aristas que estamos conectando para un cubo:
Cargando