[C++, OpenGL]Nakładanie obrazu PNG na teskture. Jest błąd

Witam,

próbuję nałożyć na czworokąt w OpenGL teksturę. Znalazłem ten poradnik:

http://r3dux.org/2010/11/single-call-op … -in-devil/

Natomast jest problem, gdyż gdy wstawiam tą podaną funkcję

// Function load a image, turn it into a texture, and return the texture ID as a GLuint for use

GLuint loadImage(const char* theFileName)

{

	ILuint imageID; // Create an image ID as a ULuint


	GLuint textureID; // Create a texture ID as a GLuint


	ILboolean success; // Create a flag to keep track of success/failure


	ILenum error; // Create a flag to keep track of the IL error state


	ilGenImages(1, &imageID); // Generate the image ID


	ilBindImage(imageID); // Bind the image


	success = ilLoadImage(theFileName); // Load the image file


	// If we managed to load the image, then we can start to do things with it...

	if (success)

	{

		// If the image is flipped (i.e. upside-down and mirrored, flip it the right way up!)

		ILinfo ImageInfo;

		iluGetImageInfo(&ImageInfo);

		if (ImageInfo.Origin == IL_ORIGIN_UPPER_LEFT)

		{

			iluFlipImage();

		}


		// Convert the image into a suitable format to work with

		// NOTE: If your image contains alpha channel you can replace IL_RGB with IL_RGBA

		success = ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE);


		// Quit out if we failed the conversion

		if (!success)

		{

			error = ilGetError();

			std::cout << "Image conversion failed - IL reports error: " << error << " - " << iluErrorString(error) << std::endl;

			exit(-1);

		}


		// Generate a new texture

		glGenTextures(1, &textureID);


		// Bind the texture to a name

		glBindTexture(GL_TEXTURE_2D, textureID);


		// Set texture clamping method

		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);

		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);


		// Set texture interpolation method to use linear interpolation (no MIPMAPS)

		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);


		// Specify the texture specification

		glTexImage2D(GL_TEXTURE_2D, // Type of texture

					 0, // Pyramid level (for mip-mapping) - 0 is the top level

					 ilGetInteger(IL_IMAGE_BPP),	// Image colour depth

					 ilGetInteger(IL_IMAGE_WIDTH),	// Image width

					 ilGetInteger(IL_IMAGE_HEIGHT),	// Image height

					 0, // Border width in pixels (can either be 1 or 0)

					 ilGetInteger(IL_IMAGE_FORMAT),	// Image format (i.e. RGB, RGBA, BGR etc.)

					 GL_UNSIGNED_BYTE, // Image data type

					 ilGetData()); // The actual image data itself

 	}

  	else // If we failed to open the image file in the first place...

  	{

		error = ilGetError();

		std::cout << "Image load failed - IL reports error: " << error << " - " << iluErrorString(error) << std::endl;

		exit(-1);

  	}


 	ilDeleteImages(1, &imageID); // Because we have already copied image data into texture data we can release memory used by image.


	std::cout << "Texture creation successful." << std::endl;


	return textureID; // Return the GLuint to the texture so you can use it!

}

(nie wykonuję jej nawet) to wyświetlają się błędy:

I teraz pytanie: dlaczego są te błędy? Co jest nie tak?

Nie linkujesz biblioteki ilu:

Update 09/2011: To use any DevIL functionality in your C++ project, you need to link in libIL, libILU and libILUT (in that order), and then initialise DevIL before you use it with:[...]

Do linkera dodaj: -lIL -ILU -lILUT, czy jakoś tak.

Dodaj do linkera libki od DevIL’a.

EDIT: @up: to tylko w GCC, VC++ inne opcje przyjmuje(konf. projektu->Linker->Additional Libraries).

@up; po treści komunikatu wnioskuję że to jednak MinGW. Poza tym niektóre IDE do MinGWa też obsługują same wpisanie nazwy biblioteki (pliku biblioteki).

Razi miał rację :slight_smile:

Co prawda tekstury się wczytują, lecz są one… A z resztą sami zobaczcie:

ojej.png

To miała być tekstura przedstawiająca trawę :stuck_out_tongue: A jest jakaś zielona “paćka”.

Zastanawiam się, czy przy tworzeniu obiektów nie trzeba wskazać coś typu: rozłożenie tekstury. Bo jak na razie nie zmieniałem nic, tylko mam tą funkcję.

Dodane 23.11.2011 (Śr) 16:59

Ok. Już wszystko dobrze.

Dzięki wielkie za pomoc! !!