2016-04-28 6 views
1

私のアプリケーションのOpenGLコードをOpenSceneGraphを使用するコードに置き換えます。OpenGLからOpenSceneGraphへの移行:特定のテクスチャの寸法の場合に表示が正しくない

私は大きな画像(5000x5000pxより高い解像度)を扱っているため、画像は小さなタイルに分割されています。

タイルを描画するOpenGLコードはglTexImage2D(GL_TEXTURE_2D, ..., imageData)を使用します。ここで、imageDataはタイルバイト配列です。

OpenSceneGraphでは、同じimageDataosg::Imageを作成し、このosg::Imageを使って簡単なクワッドをテクスチャにします。

問題は、特定のosg::Imageディメンションの結果が醜いことです。

タイルが256x128の場合はすべて問題ありません。私は問題が何であるかを理解したいと思います

enter image description here

のOpenGL enter image description here

とどのように元の画像loogsだ。しかし、ここで、それは254x130タイルとOSGのためにどのように見えるのです::画像。 OpenSceneGraphはOpenGLに基づいているので、私が書いたOpenSceneGraphコードは古いOpenGLのものと同じだと思います。さらに、私はタイルサイズを変更することができないので、実際には254x130のタイルで動作させる必要があります。

画像作成コード:

`osg::Image * image = new osg::Image(); 
//width, height, textFormat, pixelFormat, type and data 
//are the ones that were used with glTexImage2D 
image->setImage(width, height, 1, textFormat, pixelFormat, type, data, NO_DELETE); 
osg::Texture2D * texture = new osg::Texture2D; 
texture->setImage(image); 
stateset->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);` 
+0

osg :: Imageを作成、割り当て、塗りつぶしする方法についていくつかのコードを教えてください - 白黒であるとさえ間違ったイメージですか? – rickyviking

+0

元のメッセージにいくつかのコードを追加しました。灰色のイメージは緑色のイメージのように見えます。私はまた、すべてのタイルが傾いていることに気づいた。 – Krag

答えて

0

私はそれが最も可能性が高い画素データとあなたはsetImageに渡す形式/タイプ()の間に不一致だと思います。あなたのテクスチャが上下反転されている場合は例えば
は、あなたの画像データが色ごとに1バイトでRGBであれば、あなたは

image->setImage(w, h, 1, GL_RGBA8, GL_RGB, GL_UNSIGNED_BYTE, data, osg::Image::NO_DELETE); 

を呼び出す必要があり、それは、OpenGLは常に左下隅にテクスチャの原点を考えているためですので、あなたsetImage()を呼び出す前に(またはジオメトリのUV座標を反転する)イメージデータを反転する必要があります。

+0

私はその方向で何らかのテストを行いました。いいえ、ピクセルデータ、フォーマット、タイプはOKです。ピクセルデータ、フォーマットタイプ、およびソースイメージの固定セットの場合、表示を破壊する唯一の要因は、OpenSceneGraphであり、4タイルサイズの倍数ではありません。 – Krag

関連する問題