イメージを1つのポリゴンにテクスチャマップしようとしています。私のイメージは正しく読み込まれていますが、イメージの赤い平面だけがテクスチャされています。OpenGLテクスチャにはテクスチャの赤色成分のみが表示されます
私はそれが読み込まれた後、私は画像をチェックして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)の値であるかのように私のテクスチャがinterprededことが原因となる何かを見ていますか? (r、g、b、a)?
QT 4.7.1、Ubuntuの10.04、OpenGLの2.somethingまたは任意のヘルプ
あなたが忘れてしまったどこかで 'glColor()'コールがありますか? – genpfault
内部的にOpenGLはinternalFormatパラメータをとり、必要な計算をデータに適用して、要求された形式でデータを取得します。この結果(私が正しくドキュメントを理解している場合)は、GLが関係する限り、常にRGBAイメージです。テスト目的のために、関数呼び出しでGL_RGBの代わりに明示的にinternalFormatをGL_RGBAに設定するとどうなりますか? – badgerr
何も違いはありません – jhowland