Olá pessoal, estou fazendo um projeto muito legal em JAVA e OpenGL, mais serve apenas para estudo, no momento.
Gostaria desenhar uma Árvore Binária, mais o problema é que não consigo fazer com que ela desenhe dinamicamente, dependendo do seu nível.
Fiz algumas funções:
public void drawNo(double[] cor, double EsfX, double EsfY)
{
GL gl = canvas.getGL();
GLU glu = canvas.getGLU();
GLUT glut = new GLUT();
gl.glPushMatrix();
gl.glTranslated(EsfX, EsfY, 0.0); // Transformação da Esfera p/ Localização
gl.glColor3dv(cor); // Define a Cor da Esfera
glut.glutWireSphere(glu, 0.1, 10, 10);
gl.glPopMatrix();
}
public void drawAresta(double[] cor, double tamLig, double LigX, double LigY, double LocX, double LocY)
{
GL gl = canvas.getGL();
GLU glu = canvas.getGLU();
GLUquadric gluQuadric = glu.gluNewQuadric();
gl.glPushMatrix();
gl.glTranslated(LigX, LigY, 0.0); // Transformação da Aresta p/ a Esquerda ou Direita
gl.glRotated(90.0, LocX, LocY, 0.0); // Transformação para Rotacionar
gl.glColor3dv(cor); // Define a Cor da Aresta
glu.gluCylinder(gluQuadric, 0.03, 0.03, tamLig, 100, 100);
gl.glPopMatrix();
}
Até aí tudo bem, o problema é passar os parâmetros, gostaria de obter uma lógica para colocar dentro de um FOR, e ir adicionado automaticamente, dependendo da entrada.
Fiz um para vcs terem uma idéia:
// Define a transformacao WINDOW x VIEWPORT
gl.glViewport(0, 0, width, height); // Define a vizualização da VIEWPORT
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(50, xmax / ymax, 1, 20);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_LIGHTING); // Ativa as luzes
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(GL.GL_COLOR_MATERIAL);
glu.gluLookAt(0,0,5, 0,-2.2,0, 0,1,0);
// Se estiver vazia não mostrar, senão mostrar.
this.drawNo(corRaiz, 0.0, 0.0); // Chama o Nó Raiz
this.drawAresta(corAresta, 0.3, 0.0, 0.0, 1.0, -1.0);
this.drawNo(corFilho, -0.2, -0.2); // No Esquerdo
this.drawAresta(corAresta, 0.3, 0.0, 0.0, 1.0, 1.0);
this.drawNo(corFilho, 0.2, -0.2); // No Direito
Entenderam +/-, em vez de fazer hardcore, gostaria que fosse dinâmico…
Estou a 2 semanas para pegar uma lógica para isso.
Agradeço desde já a atenção. 

