0

私がやろうとしているのは、ロードして使用するのが簡単なカスタム モデルとテクスチャ ファイルを作成することです。基本的に、ファイルは XYZ 値と RGB 値を表す float のリストです。のように: 0.5 0.234 0.1 ... ...

問題は、フロートの配列をテクスチャで機能させることができないことです。配列を定義する方法は次のとおりです。

float* textureMap;

これを初期化する方法は次のとおりです。

const int SIZE = (128*128*3);

textureMap = (float*)malloc(sizeof(textureMap)*SIZE);

for (int i =0; i<SIZE; i++) { textureMap[i] = 0.0f; }

Glutを使用して、配列をデータでペイントして埋めることができるウィンドウを作成しました。ご覧のとおり、すべてのRGB値が0.0fに初期化されているため、少なくともオブジェクトが黒として表示されることを期待していますが、そのままですデフォルトの灰色であり、テクスチャ配列と同じ色になることはありません。

テクスチャを作成するための私の呼び出しは次のとおりです。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 130, 130, 0, GL_RGB, GL_FLOAT, textureMap);

OpenGl 公式 Web ページのガイドラインに従って、幅と高さを 2^n + 2 にしましたが、フロートの配列を構築しようとしている方法を考えると、これが正しいかどうかはわかりません。

また、glGetError() の呼び出しを試みましたが成功しませんでした (つまり、エラーはスローされず、幅と高さを -1 に設定することでエラーをスローできることを確認しました)。

glBegin() を呼び出す前にテクスチャをバインドしていることを確認し、これらの呼び出しでエラーが発生していないことを確認しましたが、役に立ちませんでした。

提案/指針はありますか?他の誰かが以前に独自のテクスチャ フォーマットを定義しようとしたことがありますか?

ところで、現時点では三角形の代わりに四角形を使用していますが、それで問題ありませんか?

4

2 に答える 2

2

まず、レンダリングの前に を呼び出してテクスチャ マッピングが有効になっていることを確認しますglEnable(GL_TEXTURE_2D)(現時点ではシェーダーを使用していないと仮定します。それ以外の場合は、そこでエラーを探します)。

次に、サイズ 130x130 のテクスチャを作成し、サイズ 128x128 のデータで埋めることは明らかに間違っています。これらのガイドラインを誤解しているようです (おそらく、テクスチャの境界線について何か言っているかもしれませんが、あなたの例では境界線がないので、128x128 で問題ありません)。

于 2011-05-31T12:20:46.887 に答える
0

SOLVED! The problem was that I needed to call glTexImage2D(...) in the same function that draws the polygons (doh!). What I had been doing was whenever my texture was edited in the painting window i called glTexImage2D(...) in that same function then told the 3D window to refresh using glutPostWindowRedisplay(...).

Ironically, calling glTexImage2D(...) in the init function also works but only the first time for obvious reasons.

Thanks everybody!

于 2011-06-11T14:26:29.580 に答える