0

画像を単一のポリゴンにテクスチャ マップしようとしています。画像は正しく読み取られていますが、画像の赤い面だけがテクスチャ化されています。

QGLWidget 内でこれを行っています

画像を読み取った後に画像を確認しましたが、そのコンポーネントは正しく読み取られています。つまり、緑と青のプレーンに有効な値が得られました。

ここにコードがあります

QImageReader    *theReader = new QImageReader();

theReader->setFileName(imageFileName);
QImage  theImageRead = theReader->read();
if(theImageRead.isNull())
    {
        validTile = NOT_VALID_IMAGE_FILE;
        return;
    }
else
    {
        int newW = 1;
        int newH = 1;
        while(newW < theImageRead.width())
            {
                newW *= 2;
            }
        while(newH < theImageRead.height())
            {
                newH *= 2;
            }
        theImageRead = theImageRead.scaled(newW, newH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
// values checked in theImageRead are OK here
        glGenTextures(1,&textureObject);
        theTextureImage = QGLWidget::convertToGLFormat(theImageRead);
// values checked in theTextureImage are OK here
        glBindTexture(GL_TEXTURE_2D, textureObject);
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,newW, newH, 0, GL_RGBA, GL_UNSIGNED_BYTE,theTextureImage.bits() );
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glFlush();
        validTile = VALID_TEXTURE;
        return;
    }

then I draw like this:

{

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,textureTiles[tN]->getTextureObject() );
glBegin(GL_QUADS);

                    glTexCoord2f(0.0,0.0);
                    glVertex2f(textureTiles[tN]->lowerLeft.x(), textureTiles[tN]->lowerLeft.y());

                    glTexCoord2f(1.0,0.0);
                    glVertex2f(textureTiles[tN]->lowerRight.x(), textureTiles[tN]->lowerRight.y());

                    glTexCoord2f(1.0,1.0);
                    glVertex2f(textureTiles[tN]->upperRight.x(), textureTiles[tN]->upperRight.y());

                    glTexCoord2f(0.0,1.0);
                    glVertex2f(textureTiles[tN]->upperLeft.x(), textureTiles[tN]->upperLeft.y());

glEnd();

glDisable(GL_TEXTURE_2D);

}

テクスチャが (r,0,0,1) の値であるかのように解釈される原因となるものを見た人はいますか? (r,g,b,a)?

QT 4.7.1、Ubuntu 10.04、openGl 2.something またはその他

助けてくれてありがとう

4

2 に答える 2

7

私も同様の問題を抱えています。テクスチャ化されたクワッドを描画する前に、glの色を白と不透明に「リセット」する必要があることがわかりました。そうしないと、色がめちゃくちゃになってしまいます。このような:

...
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,textureTiles[tN]->getTextureObject() );

glColor4f(1.0, 1.0, 1.0, 1.0); // reset gl color

glBegin(GL_QUADS);
...
于 2011-01-12T22:40:56.337 に答える
2

これは非常に一般的な問題です。まず、MIN/MAG フィルターを何かに設定します。これは、デフォルトではミップマップが使用され、ミップマップが提供されていないため、テクスチャが不完全であるためです。

不完全なテクスチャをサンプリングすると、通常は白になります。デフォルトのテクスチャ環境で glColor を呼び出すと、頂点の色にテクスチャの色が乗算されます。おそらく glColor(red) のようなものがあり、赤 * 白 = 赤なので、赤が表示されます。

これを修正するには、MIN/MAG フィルターを GL_LINEAR または GL_NEAREST に設定します。

于 2011-01-11T16:54:40.070 に答える