2D テクスチャと Rectangle Texture の両方を描画する関数を作成しようとしています。
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)
また、ViewPort の幅/高さの代わりに、X と Y が 1 の場所を使用してみました。幅/高さを使用してみましたが、まだ何もありません。テクスチャの幅と高さを試しました。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);
それは動作します..私が間違っていることは何ですか?