Like many of OpenGL's enums, their behind-the-scenes int value is linearly incremented, so if we were to have an array or vector of texture locations we could loop over them by starting with GL_TEXTURE_CUBE_MAP_POSITIVE_X and incrementing the enum by 1 each iteration, effectively looping through all the texture targets:įor(unsigned int i = 0 i < textures_faces.size() i++)ĭata = stbi_load(textures_faces.c_str(), &width, &height, &nrChannels, 0) Ġ, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data Since we have 6 faces OpenGL gives us 6 special texture targets for targeting a face of the cubemap: This means we have to call glTexImage2D once for each face of the cubemap. This time however, we have to set the texture target parameter to match a specific face of the cubemap, telling OpenGL which side of the cubemap we're creating a texture for. GlBindTexture(GL_TEXTURE_CUBE_MAP, textureID) īecause a cubemap contains 6 textures, one for each face, we have to call glTexImage2D six times with their parameters set similarly to the previous chapters. This time binding it to GL_TEXTURE_CUBE_MAP: The result is a texture coordinate that accesses the proper individual face texture of the cubemap.Ī cubemap is a texture like any other texture, so to create one we generate a texture and bind it to the proper texture target before we do any further texture operations. We thus consider all vertex positions of the cube to be its texture coordinates when sampling a cubemap. This way we can sample the cubemap using the cube's actual position vectors as long as the cube is centered on the origin. If we imagine we have a cube shape that we attach such a cubemap to, this direction vector would be similar to the (interpolated) local vertex position of the cube. As long as a direction is supplied, OpenGL retrieves the corresponding texels that the direction hits (eventually) and returns the properly sampled texture value. The magnitude of the direction vector doesn't matter. Sampling a texture value from the cube map with an orange direction vector looks a bit like this: Imagine we have a 1x1x1 unit cube with the origin of a direction vector residing at its center. You may be wondering what the point is of such a cube? Why bother combining 6 individual textures into a single entity instead of just using 6 individual textures? Well, cube maps have the useful property that they can be indexed/sampled using a direction vector. We've been using 2D textures for a while now, but there are more texture types we haven't explored yet and in this chapter we'll discuss a texture type that is a combination of multiple textures mapped into one: a cube map.Ī cubemap is a texture that contains 6 individual 2D textures that each form one side of a cube: a textured cube.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |