Problema geométrico em OpenGL

Sidner

Power Member
Ora bem, eu preciso de desenhar esta figura:


Eu já percebi que ela tem a forma de uma pirâmide e que, à medida que vai subindo, o ponto vai-se aproximando do centro até formar um circulo no topo de raio 1, com 12 slices. Assim como o quadrado, tem 12 slices. Esta pirâmide tem um número indefinido de stacks, quantas mais stacks melhor definição terá. Para já, eu contentava-me em fazer isto com 1 stack, mas não estou a conseguir. Já tenho num vector os pontos todos da base, mas não estou a conseguir desenhar o polígono visto que não consigo perceber qual o ponto do círculo em cima a que associa cada um dos pontos do quadrado...

Alguém me pode ajudar?
Obrigado

Edit: De preferência usando GL_TRIANGLE_STRIPS. O quadrado que tenho, para já, está com GL_POLYGON.

Edit2: Mais info:
Código:
glBegin(GL_TRIANGLE_STRIP);
       glVertex3f(pontos_base[0][0],0,pontos_base[0][1]);
    glVertex3f(pontos_base[1][0],0,pontos_base[1][1]);
    glVertex3f(pontos_base[0][0],2.0,pontos_base[0][1]);
    glVertex3f(pontos_base[1][0],2.0,pontos_base[1][1]);
glEnd();

Isto devia desenhar um quadrado...mas não aparece nada... =\

Edit 3: Já agora, fica aqui o vector dos pontos também...
Código:
float pontos_base_temp[12][2] = {{-0.5,0.5},{-0.5+1/3,0.5},{-0.5+2/3,0.5},{0.5,0.5},{0.5,0.5-1/3},{0.5,0.5-2/3},{0.5,-0.5},{0.5-1/3, -0.5},{0.5-2/3,-0.5},{-0.5,-0.5},{-0.5,-0.5+1/3},{-0.5,-0.5+2/3}};
 
Última edição:
Que ângulo, supostamente, a pirâmide deve fazer com a base em que assenta?

Segundo o círculo, deves dividir cada secção nas tais stacks.. A medida que cada stack tem é usada como um lado de cada polígono.. A partir daí, tens que desenhar os restantes lados, com a divisão de altura da pirâmide pelo número de slices.. E não te esqueças da inclinação, que irá afectar duas das dimensões!

Espero ter ajudado.. :)
 
Que ângulo, supostamente, a pirâmide deve fazer com a base em que assenta?

Segundo o círculo, deves dividir cada secção nas tais stacks.. A medida que cada stack tem é usada como um lado de cada polígono.. A partir daí, tens que desenhar os restantes lados, com a divisão de altura da pirâmide pelo número de slices.. E não te esqueças da inclinação, que irá afectar duas das dimensões!

Espero ter ajudado.. :)

Sinceramente, esse ângulo é um parâmetro que não me tinha lembrado, ainda... É uma boa questão. Vou tratar disso quando pegar no problema amanhã de manhã. :) Obrigado pela ajuda! Teóricamente, cada novo vértice do círculo, ou seja, cada nova slice irá corresponder a uma "slice" do quadrado, cujos pontos eu já tenho. Se eu souber os pontos do circulo, consigo fazer triangle strips dando ponto quadrado, ponto quadrado, ponto circulo, ponto circulo e depois ir alternando até ao fim. O meu problema está mesmo em saber qual o primeiro ponto, porque a partir daí é acresentar cosseno em x e seno em z.
 
Sinceramente, esse ângulo é um parâmetro que não me tinha lembrado, ainda... É uma boa questão. Vou tratar disso quando pegar no problema amanhã de manhã. :) Obrigado pela ajuda! Teóricamente, cada novo vértice do círculo, ou seja, cada nova slice irá corresponder a uma "slice" do quadrado, cujos pontos eu já tenho. Se eu souber os pontos do circulo, consigo fazer triangle strips dando ponto quadrado, ponto quadrado, ponto circulo, ponto circulo e depois ir alternando até ao fim. O meu problema está mesmo em saber qual o primeiro ponto, porque a partir daí é acresentar cosseno em x e seno em z.

Se fosse comigo, começaria pelo círculo.. Pois, por aí, é possível determinar todas as slices do sólido, depois percorrendo até à sua base.. :)

Não sei como é o trabalho.. Se for uma peça única, pode ser assim.. Se for para ser algo dinâmico, precisa de um pouco mais, para determinar a base inferior..
 
É uma peça estática, sim. E realmente, não tinha pensado começar pelo círculo... Vou experimentar. :P Já sei porque não pensei no ângulo, é que, teoricamente, o triangle_strips, dando eu o vértice do topo e os dois da base, ele desenha-me um triangulo inclinado automaticamente. Obrigado pela ajuda, pá. :) É sempre bom ter alguém de fora do problema olhar para isto, quando se tá encravado... Já só via coordenadas sem saber o que elas eram. :P
 
Back
Topo