我正在尝试制作一个绘制二维纹理和矩形纹理的函数。
它完美地绘制了 2D 的。但是,在绘制任何 Rectangle 纹理时,它会将它们绘制成完全白色的..
GLuint LoadImage(std::string ImageTitle, GLenum Target)
{
Image Img(("Images/" + ImageTitle).c_str());
std::vector<std::uint8_t> Buffer;
ImageToBuffer(Buffer, Img);
GLuint ID;
glGenTextures(1, &ID);
glBindTexture(Target, ID);
glTexParameteri(Target, GL_TEXTURE_WRAP_S, Target == GL_TEXTURE_2D ? GL_REPEAT : GL_CLAMP_TO_EDGE);
glTexParameteri(Target, GL_TEXTURE_WRAP_T, Target == GL_TEXTURE_2D ? GL_REPEAT : GL_CLAMP_TO_EDGE);
glTexParameteri(Target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(Target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(Target, 0, GL_RGB, Img.Width(), Img.Height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, Buffer.data());
return ID;
}
void DrawTexture(GLenum Target, GLuint ID, float X1, float Y1, float X2, float Y2)
{
GLfloat ViewPort[4];
glGetFloatv(GL_VIEWPORT, ViewPort);
glEnable(Target);
glBindTexture(Target, ID);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(X1, Y1);
glTexCoord2f(0, Target == GL_TEXTURE_2D ? 1 : ViewPort[3]);
glVertex2f(X1, Y2);
glTexCoord2f(Target == GL_TEXTURE_2D ? 1 : ViewPort[2], Target == GL_TEXTURE_2D ? 1 : ViewPort[3]);
glVertex2f(X2, Y2);
glTexCoord2f(Target == GL_TEXTURE_2D ? 1 : ViewPort[2], 0);
glVertex2f(X2, Y1);
glEnd();
glDisable(Target);
}
我还尝试使用glTextCoordf(X, Y)
X 和 Y 为 1 而不是 ViewPort Width/Height。尝试使用宽度/高度,仍然没有。尝试纹理宽度和高度。我也尝试将 Rect 作为 2D 加载。没运气。
没有任何效果:S 然而它以某种方式适用于 Texture2D。
我像这样使用它:
GLuint ID = LoadImage("RECT_116.png", GL_TEXTURE_RECTANGLE);
//Do other stuff here..
DrawTexture(GL_TEXTURE_RECTANGLE, ID, X1, Y1, X2, Y2);
它失败了,但是当我在 2D 纹理上执行此操作时:
GLuint ID = LoadImage("2D_116.png", GL_TEXTURE_2D);
//Do other stuff here..
DrawTexture(GL_TEXTURE_2D, ID, X1, Y1, X2, Y2);
它有效..任何想法我做错了什么?