Ola,
alguem conseguiu desenhar a ilha igual ao EP modelo? Tentei de tudo com GL_POLYGON, GL_TRIANGLE_FAN, etc e nao saiu igual.
Tentei desenhar um retangulo e tracar a diagonal e tambem nao funcionou. E as cores, alguem sabe como distribuir na ilha? O enunciado ta bem vago: "a cor de cada vértice é baseada em sua elevação". Outra coisa, como eu devo usar os tres angulos de Euler dados no arquivo de entrada? O enunciado fala de "plano apontando na direcao -z", mas o que isso significa?
To com essas duvidas faz um tempinho, e apesar de pensar bastante ainda nao consegui chegar a nenhuma conclusao. Sera que sou so eu que estou com estas duvidas? Alguem tem alguma luz?
Obrigado.
No enunciado do EP esta dizendo para mapearmos as coordenadas do mouse para [-1, 1] e então multiplicarmos por 5 graus por segundo para obter as velocidades de yaw e pitch. Fazendo isso, vi que a rotacao fica bastante lenta (uma rotacao de 360 graus leva no minimo 72 segundos). No EP de exemplo isso claramente nao acontece. Podemos aumentar o fator multiplicativo das velocidades de rotacao ou devemos seguir a risca o que esta no enunciado do EP?
Obrigado.
Obrigado.
certamente,
voce pode escolher parametros que achar mais apropriados.
ht
voce pode escolher parametros que achar mais apropriados.
ht
Oi!
Ainda não entendi aquela estória sobre um "plano apontando para algum lugar".
No enunciado do EP, não entendi o exemplo dos ângulos
"90 0 0". Deve ser porque está relacionado com o plano apontanto para algum lugar... =(
[]'s
Tiago.
Ainda não entendi aquela estória sobre um "plano apontando para algum lugar".
No enunciado do EP, não entendi o exemplo dos ângulos
"90 0 0". Deve ser porque está relacionado com o plano apontanto para algum lugar... =(
[]'s
Tiago.
oi,
considere um frame F ortonormal, mao direita.
A oceano esta definido no plano xy. O "aponta" quer dizer o sentido da normal, ou seja, a normal do plano xy aponta para cima.
Mas no opengl, o eixo optico esta na direcao -z (z negativo), ou seja, se a aeronave estiver definida em um frame G, inicialmente colocada em F (G igual a F), a aeronave estaria olhando para -z, ou seja, para baixo.
Rode a aeronave (frame G) de (90,0,0). Uma rotacao de 90 ao redor do eixo x, roda o plano yz de 90, e portanto o -z (de G) estaria olhando para y (de F).
espero ter esclarecido,
ht
considere um frame F ortonormal, mao direita.
A oceano esta definido no plano xy. O "aponta" quer dizer o sentido da normal, ou seja, a normal do plano xy aponta para cima.
Mas no opengl, o eixo optico esta na direcao -z (z negativo), ou seja, se a aeronave estiver definida em um frame G, inicialmente colocada em F (G igual a F), a aeronave estaria olhando para -z, ou seja, para baixo.
Rode a aeronave (frame G) de (90,0,0). Uma rotacao de 90 ao redor do eixo x, roda o plano yz de 90, e portanto o -z (de G) estaria olhando para y (de F).
espero ter esclarecido,
ht
Outra duvida
Alguem sabe onde posso arranjar algum exemplo de uso do "idle event" de que o prof fala no item 4 do ep, dicas de implementacao?
Eu soh sei usar o animator que tirei do jgears.java
[]s
Daniel
Alguem sabe onde posso arranjar algum exemplo de uso do "idle event" de que o prof fala no item 4 do ep, dicas de implementacao?
Eu soh sei usar o animator que tirei do jgears.java
[]s
Daniel
Oi,
isso so funciona usando Glut em C, onde você pode pedir um redisplay. O Jogl ate oferece algumas rotinas do Glut, mas apnas as de desenho. Em Jogl, nao conheco outro modo a nao ser usando a classe animator.
ht
ps: mas se descobrir, eu gostaria de saber
isso so funciona usando Glut em C, onde você pode pedir um redisplay. O Jogl ate oferece algumas rotinas do Glut, mas apnas as de desenho. Em Jogl, nao conheco outro modo a nao ser usando a classe animator.
ht
ps: mas se descobrir, eu gostaria de saber
oi,
voce lembra quando eu falei de mapa de elevacao durante a aula?
Cada quatro pixels definem 2 triangulos (veja abaixo). Basta voce desenhar um triangulo de cada vez. Cada vertice do triangulo tem uma cor, que depende da altura. A cor do triangulo vai depender se voce esta usado smooth ou flat para renderizar. O -z eu ja respondi em outra ocasiao.
ht

voce lembra quando eu falei de mapa de elevacao durante a aula?
Cada quatro pixels definem 2 triangulos (veja abaixo). Basta voce desenhar um triangulo de cada vez. Cada vertice do triangulo tem uma cor, que depende da altura. A cor do triangulo vai depender se voce esta usado smooth ou flat para renderizar. O -z eu ja respondi em outra ocasiao.
ht

Outra dúvida,
No opengl, o modelo geométrico está separado da projeção. Mas em todo programa que eu vejo, o callback do display refaz TODA a cena. No nosso ep,o cenário é todo estático não havendo necessidade de redesenhar uma linha do modelo. Seria possível guardar o modelo geométrico na memória daí fazer a chamada para o gluLookAt ???
No opengl, o modelo geométrico está separado da projeção. Mas em todo programa que eu vejo, o callback do display refaz TODA a cena. No nosso ep,o cenário é todo estático não havendo necessidade de redesenhar uma linha do modelo. Seria possível guardar o modelo geométrico na memória daí fazer a chamada para o gluLookAt ???
Como o gluLookAt é definido no começo, os objetos (projeção) são transformados de acordo. Você pode até tentar salvar a imagem em outro lugar, mas isso não serve para animação. Depois tem todo o cálculo de sombreamento, depth buffer, etc.
Professor,
Estou tendo muitos problemas para implementar as rotações da nave. Já tentei através do gluLookAt e chamando "translate" e três "rotates" na mão. De ambos os jeitos acontecem coisas estranhas. O vôo não obedece muito bem.
No meu avião estou utilizando um vetor para direção e outro para o "up".
Qual é a melhor maneira de se fazer isso?
[]'s
Tiago.
Estou tendo muitos problemas para implementar as rotações da nave. Já tentei através do gluLookAt e chamando "translate" e três "rotates" na mão. De ambos os jeitos acontecem coisas estranhas. O vôo não obedece muito bem.
No meu avião estou utilizando um vetor para direção e outro para o "up".
Qual é a melhor maneira de se fazer isso?
[]'s
Tiago.
oi,
voce lembra que eu sugeri utilizar um frame de coordenadas para cada nave?
vamos ver como isso pode ser implementado.
Tem o frame F, que é o mundo. O glLookAt precisa ser definido ANTES dos objetos (ilha, mar, etc). Se voce tem o frame G da aeronave, o ponto G.Origem é a posição da câmera, o ponto sendo observado pode ser dado somando à origem o vetor (0,0,-1), e o up é o vetor (0, 1, 0).
Como atualizar o frame G?
A nave tem velocidade de translacao e rotacao. Dado o Delta t (voce precisa ter o timer) do ultimo frame renderizado, você pode calcular a nova posição. A rotacao, voce precisa criar, para cada eixo, rotinas que rodem os outros 2, algo como rotatex (double theta), rotatey e rotatez. Desse jeito fica parecido com os angulos de Euler. Muito bem, rotatex roda o plano yz ao redor do eixo x de theta, ou seja, como vimos em aula, algo como:
y' = y cos theta - z sin theta
z' = y sin theta + z cos theta
(cuidado, os sinais ai podem estar trocados....)
Como a gente ta rodando o frame G, os vetores da base, que começam
com (1,0,0) (0,1,0) (0, 0, 1) vao receber uma rotacao. Quando rodamos em
torno de x, o (1,0,0) nao muda, mas o (0,1,0) e o (0,0,1) devem mudar.
Como a rotacao é sobre o frame G sempre, para gerar a proxima animacao,
basta atualizar os vetores (e a origem) desse frame.
espero ter ajudado.
hitoshi
voce lembra que eu sugeri utilizar um frame de coordenadas para cada nave?
vamos ver como isso pode ser implementado.
Tem o frame F, que é o mundo. O glLookAt precisa ser definido ANTES dos objetos (ilha, mar, etc). Se voce tem o frame G da aeronave, o ponto G.Origem é a posição da câmera, o ponto sendo observado pode ser dado somando à origem o vetor (0,0,-1), e o up é o vetor (0, 1, 0).
Como atualizar o frame G?
A nave tem velocidade de translacao e rotacao. Dado o Delta t (voce precisa ter o timer) do ultimo frame renderizado, você pode calcular a nova posição. A rotacao, voce precisa criar, para cada eixo, rotinas que rodem os outros 2, algo como rotatex (double theta), rotatey e rotatez. Desse jeito fica parecido com os angulos de Euler. Muito bem, rotatex roda o plano yz ao redor do eixo x de theta, ou seja, como vimos em aula, algo como:
y' = y cos theta - z sin theta
z' = y sin theta + z cos theta
(cuidado, os sinais ai podem estar trocados....)
Como a gente ta rodando o frame G, os vetores da base, que começam
com (1,0,0) (0,1,0) (0, 0, 1) vao receber uma rotacao. Quando rodamos em
torno de x, o (1,0,0) nao muda, mas o (0,1,0) e o (0,0,1) devem mudar.
Como a rotacao é sobre o frame G sempre, para gerar a proxima animacao,
basta atualizar os vetores (e a origem) desse frame.
espero ter ajudado.
hitoshi