

Texture coordinates usually range from (0,0) to (1,1) but what happens if we specify coordinates outside this range? The default behavior of OpenGL is to repeat the texture images (we basically ignore the integer part of the floating point texture coordinate), but there are more options OpenGL offers: It is thus our job to tell OpenGL how it should sample its textures. Texture sampling has a loose interpretation and can be done in many different ways. The resulting texture coordinates would then look like this: We only have to pass 3 texture coordinates to the vertex shader, which then passes those to the fragment shader that neatly interpolates all the texture coordinates for each fragment. The top of the triangle should correspond with the top-center of the texture image so we take (0.5,1.0) as its texture coordinate. The same applies to the bottom-right side with a (1,0) texture coordinate. We want the bottom-left side of the triangle to correspond with the bottom-left side of the texture so we use the (0,0) texture coordinate for the triangle's bottom-left vertex. We specify 3 texture coordinate points for the triangle. The following image shows how we map texture coordinates to the triangle: Texture coordinates start at (0,0) for the lower left corner of a texture image to (1,1) for the upper right corner of a texture image. Retrieving the texture color using texture coordinates is called sampling. Texture coordinates range from 0 to 1 in the x and y axis (remember that we use 2D texture images). Fragment interpolation then does the rest for the other fragments. Each vertex should thus have a texture coordinate associated with them that specifies what part of the texture image to sample from. In order to map a texture to the triangle we need to tell each vertex of the triangle which part of the texture it corresponds to.

Next to images, textures can also be used to store a large collection of arbitrary data to send to the shaders, but we'll leave that for a different topic.īelow you'll see a texture image of a brick wall mapped to the triangle from the previous chapter. Because we can insert a lot of detail in a single image, we can give the illusion the object is extremely detailed without having to specify extra vertices. A texture is a 2D image (even 1D and 3D textures exist) used to add detail to an object think of a texture as a piece of paper with a nice brick image (for example) on it neatly folded over your 3D house so it looks like your house has a stone exterior. What artists and programmers generally prefer is to use a texture. This takes up a considerable amount of extra overhead, since each model needs a lot more vertices and for each vertex a color attribute as well.

However, to get a fair bit of realism we'd have to have many vertices so we could specify a lot of colors. We learned that to add more detail to our objects we can use colors for each vertex to create some interesting images.
