2

いくつかの異なるチュートリアルから派生した以下を実行しています (単一のレンダー パスのみ、初期化コードは示されていませんが、テクスチャのないプリミティブに対しては正常に機能します)。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, xSize, 0, ySize, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_SRC_COLOR);

GLuint texture[1];
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

int width = 50;
int height = 50;
void* textureData = malloc(width * height * 4);
CGColorSpaceRef cSp = CGColorSpaceCreateDeviceRGB();
CGContextRef ct = CGBitmapContextCreate(textureData, width, height, 8, width*4, cSp, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGContextSetRGBFillColor(ct, 0, 1, 0, 1);
CGContextFillRect(ct, CGRectMake(0, 0, 50, 50));
CGContextRelease(ct);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

float verts[] = {
0.0f, 0.0f, 0.0f,
50.0f, 0.0f, 0.0f,
0.0f, 50.0f, 0.0f,
50.0f, 50.0f, 0.0f
};

float texCords[] = {
0.0f, 0.0f,
1.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f
};

 glVertexPointer(3, GL_FLOAT, 0, verts);
 glTexCoordPointer(2, GL_FLOAT, 0, texCords);
 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

 glDisable(GL_TEXTURE_2D);

結果は白い正方形です。意図した緑色のものではありません。レンダリングに失敗するコードのエラーを誰かが見つけることができますか?

これを機能させてから、テキストレンダリングに移したいと考えています。

4

1 に答える 1

3

問題は、widthheightが 2 のべき乗でないことです。次の 2 つの解決策があります。

  • テクスチャ矩形拡張を使用します。テクスチャ ターゲットをGL_TEXTURE_RECTANGLE_ARBではなく に設定しGL_TEXTURE_2Dます。この拡張機能を使用する前に有効にする必要があります。長方形のテクスチャはミップマップをサポートしていないことに注意してください。
  • テクスチャの寸法には 2 の累乗を使用します。
于 2010-06-29T00:38:51.720 に答える