1

私は Cocoa スクリーンセーバー、単純な opengl シーン、特別なことは何も書いていません。パターン付きのRGB gifがたくさんありますが、1つを除いてすべてうまく機能します。

スクリーンセーバーのプレビューに表示されるもの (テクスチャを使用して単一のクワッドをレンダリングする):

スクリーンセーバーのプレビュー

テクスチャ自体 (それに応じてスケーリング):

ここに画像の説明を入力

いくつかのコード:

テックスローディング:

NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:[texImg TIFFRepresentation]];
if(bitmap) {
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, (GLsizei)[texImg size].width, 
                 (GLsizei)[texImg size].height, 0, GL_RGB, GL_UNSIGNED_BYTE,
                 [bitmap bitmapData]) ;

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}

GL初期化:

glEnable(GL_TEXTURE_2D);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
4

1 に答える 1

2

ピクセルパックの問題のようです。

テクスチャを作成する前に、この線を設定してみてください。

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

あなたはこれがここで何をするかについて読むことができます:

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml

http://www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/(セクション8を読む)

ただし、基本的にデフォルトでは、openglはピクセルの行が4バイトの倍数であると想定しています。これは、ピクセルあたり1/2/3バイトを使用する場合は常に正確であるとは限りません。

テクスチャの作成後に4(デフォルト)に戻すこともお勧めします。

于 2012-05-11T17:42:49.910 に答える