Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

tobias

aplicar textura em hightmap

Recommended Posts

tobias

Boas,

Estou a fazer um projecto de computação gráfica onde é suposto fazer um cenário, escolhi fazer uma espécie de terreno tipo "Alentejo" com algumas árvores talvez uma casinha etc. mas estou a ter alguns problemas.

Depois de muita pesquisa concegui ao seguir um tutorial (

https://www.youtube.com/embed/videoseries?list=PL0AB023E769342AFE

deixo aqui que pode ajudar outros que estejam a começar) arranjar os loaders para as texturas e objectos e o load para hightmaps tambem, o meu problema agora é que não consigo meter uma textura no hightmap correctamente.

void renderHeightmap(float size,float h)
{
   for(int i=0;i<heights.size()-1;i++)
    for(int j=0;j<heights[0].size()-1;j++)
    {
	    glBegin(GL_TRIANGLE_STRIP);
		    glColor3f(heights[i][j],heights[i][j],heights[i][j]);
		    glVertex3f(i*size,heights[i][j]*h,j*size);
		    glVertex3f((i+1)*size,heights[i+1][j]*h,j*size);
		    glVertex3f(i*size,heights[i][j+1]*h,(j+1)*size);
		    glVertex3f((i+1)*size,heights[i+1][j+1]*h,(j+1)*size);
	    glEnd();
    }
}

este é o codigo que faz o render do hightmap, tenho outra função apra ler a imagem.

pronto, aplicar a textura a um quadrado é simples e já concigo, usando a função glTexCoord2f com a possição, funciona bem, mas meter a funcionar com o hightmap nao consigo.

Alguem tem alguma ideia ou algum exemplo que me possa mostrar.


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites
HappyHippyHippo

se pensares nos cantos do teu heightmap como os cantos da imagem, basta aplicar o triângulo correspondente da imagem ao triângulo do teu ciclo


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
tobias

Sim eu pensei nisso, o problema é que nao sei como "cortar" o meu tecido em triangulos que vao corresponder aos do heightmap, eu comecei a estudar isto á uns dias entao ainda tenho muita falta de conhecimento, até pode ser mais facil do que concegui com o tutorial, mas como nunca vi como se fazia nao tenho a minima ideia.

Obrigado desde ja pela a atenção.


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites
HappyHippyHippo

tu não tens de cortar. o que tens de fazer é dar as coordenadas correspondentes da textura ao triângulo que estás a apresentar


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
tobias

Já percebi o que queres dizer, e tentei fazer isso agora, mas nao tou a conseguir meter a textura corretamente, fiz uns if para meter as cordenadas em cada canto, mas nao sei o porque a textura nao é aplicada corretamente.

void renderHeightmap(float size,float h)
{
glEnable(GL_TEXTURE_2D); //and turn on texturing
glBindTexture(GL_TEXTURE_2D,terrenoTex); //use the texture we want
for(int i=0;i<heights.size()-1;i++)
 for(int j=0;j<heights[0].size()-1;j++)
 {
  glBegin(GL_TRIANGLE_STRIP);

   if(i == 0 && j==0)
 glTexCoord2f(0,0);
   if(i== 0 && j==heights[0].size())
 glTexCoord2f(0,1);
   if(i==heights.size() && j==0);
 glTexCoord2f(1,0);
   if(i==heights.size() && j==heights[0].size())
 glTexCoord2f(1,1);

   glColor3f(heights[i][j],heights[i][j],heights[i][j]);
   glVertex3f(i*size,heights[i][j]*h,j*size);
   glVertex3f((i+1)*size,heights[i+1][j]*h,j*size);
   glVertex3f(i*size,heights[i][j+1]*h,(j+1)*size);
   glVertex3f((i+1)*size,heights[i+1][j+1]*h,(j+1)*size);
  glEnd();
 }
 glDisable(GL_TEXTURE_2D);
}

Devo estar a fazer alguma coisa mal ja tentei algumas maneiras, mas agora tou a ficar á nora com isto...

alguma ideia?


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.