Мне удалось заставить мою игру читать в формате PNG и успешно текстурировать мои объекты.Честно говоря, я не могу на 100% описать, как это работает на самом деле - и теперь я бы хотел расширить его до загрузки нескольких текстур и использования указанной мной.
Вот моя функция загрузки PNG:
//Loads PNG to texture
GLuint loadPNG(string name) {
nv::Image img;
GLuint myTextureID;
if (img.loadImageFromFile(name.c_str())) {
glGenTextures(1, &myTextureID);
glBindTexture(GL_TEXTURE_2D, myTextureID);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, img.getInternalFormat(), img.getWidth(), img.getHeight(), 0, img.getFormat(), img.getType(), img.getLevel(0));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16.0f);
}
else {
MessageBox(NULL, L"Failed to load texture", L"Sorry!", MB_OK | MB_ICONINFORMATION);
}
return myTextureID;
}
В моей основной функции я определяю текстуру следующим образом:
//Load in player texture
testTexture = loadPNG("test.png");
, где testTexture
- глобальная переменная типа GLuint
.И рисование моих прямоугольников в моем основном цикле draw
выполняется следующим образом:
//Used to draw rectangles
void drawRect(gameObject &p) {
glEnable(GL_TEXTURE_2D);
//Sets PNG transparent background
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//glBindTexture(GL_TEXTURE_2D, myTexture);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex2f(p.x, p.y);
glTexCoord2f(1.0, 0.0); glVertex2f(p.x + p.width, p.y);
glTexCoord2f(1.0, 1.0); glVertex2f(p.x + p.width, p.y + p.height);
glTexCoord2f(0.0, 1.0); glVertex2f(p.x, p.y + p.height);
glEnd();
glDisable(GL_TEXTURE_2D);
}
Это прекрасно работает, текстурируя все мои объекты с определенной текстурой.Тем не менее, я хотел бы иметь возможность определять больше текстур и использовать их.Я попытался переместить:
glBindTexture(GL_TEXTURE_2D, myTextureID);
из функции loadPNG
в мой drawRect
, как:
glBindTexture(GL_TEXTURE_2D, testTexture);
Однакоэто не накладывает никакой текстуры вообще.Если у кого-то есть идеи, я бы очень признателен за помощь.Спасибо!