PDA

View Full Version : Texturing Repeat and other questions...



Kampos
08-16-2011, 03:25 AM
Hello everybody...
I am starting with opengl and I already got it a lot...but still in problems....
lets go my questions...

1-How do I repeat a texture in a face?? for example...I made a square that is my floor with grass texture, but when i apply it it stretch the image and become very visible and large the pixels...how do i solve this??

2-This is simple curiosity...whats the diference between GLfloat and float? or GLint and int???and so on??

3-How is the best struct code of opengl?? explaining, where to put the drawing ( in a loop for example), where to create things... there is some tutorial explaining how to gain performance by structing the code organized??

thanx to all for the attention...

_arts_
08-16-2011, 03:31 AM
1: simply multiply your texture coordinates in both u and v to whatever times you want the repeat to be done. Ie: if u and v lie in [0..1] you have only the image, without repetition, if they lie into [0..10] you have 10 times the image in u direction and 10 times the image in the v direction. You can also do that with the texture matrix.

2: normally none (my header has typedef float GLfloat). I can't ensure it will be the same everywhere.

Avithohol
08-16-2011, 04:11 AM
Point 1.: As _arts_ said multiple your tex coords with some number (you will see) for example 10. And also make sure GL_REPEAT is set in the texture parameter section (where you load your texture).

Point 2.: Depends on the implementation, i personally try to use GLfloat everywhere and typdef it with my own names as _arts_ does:

typedef myFloat GLfloat;

Point 3.:
Hard question, too general :)
I think its better to buy a book OpenGL Super Bible for example and check out their sample codes along with it. Even after that there will be questions ... so i do also waiting for somebody to shed light on it.

Kampos
08-16-2011, 05:55 AM
So, if i understand i have to set the parameter like this...

glTexParameter(GL_TEXTURE_2D, GL_WRAP_W, GL_REPEAT); // i dont remember if these are the right words..but i get it..

then in my primitive i do this...
glBegin(GL_QUADS);
glTexCoord2d(10.0, 10.0); glVertex3f(1.0f, 1.0f, 0.0f);
glTexCoord2d(0.0, 10.0); glVertex3f(-1.0f, 1.0f, 0.0f);
glTexCoord2d(0.0, 0.0); glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2d(10.0, 0.0); glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();

Right???

2- in general i use GLfloat....

3- I will check some samples and study the code...

thanxx

Avithohol
08-16-2011, 06:30 AM
Yes, and also let me point you to a sample of how GL_REPEAT should be used when you load the grass texture:


glGenTextures(1, &m_texname);
glBindTexture(GL_TEXTURE_2D, m_texname);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_width, m_height, 0,
GL_BGR_EXT, GL_UNSIGNED_BYTE, m_image[0]);