1

私が知っているように、OpenGLは3.0以降NPOTテクスチャを高度にサポートしています。今、私はNPOTテクスチャを正確に対応するデータで割り当てることができないという奇妙な現象に直面しています。言葉はわかりやすい。私のテストコードは以下の通りです。

glGenTextures(1, &texVoxels);
glBindTexture(GL_TEXTURE_3D, texVoxels);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

int width = 513;
int height = 513;
int depth = 513;
unsigned char *data = new unsigned char[width*height*depth];
memset(data, 0, sizeof(unsigned char)*width*height*depth);

glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE8, width, height,depth, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);

delete []data;
data = NULL;

上記のコードのように、2 ^N+1のNPOTキュービックテクスチャを割り当てる必要があります。ただし、プログラムはglTexImage3D()でエラーを終了します。このエラーは、「必要なテクスチャよりも小さいデータのサイズ」が原因だと思います。十分な大きさのデータを割り当てると、プログラムは合格するからです。

どうすればNPOTテクスチャを使用して、このようなデータを割り当てることができますか?データのサイズがプログラムが通過するのに十分な大きさである場合でも、データがテクスチャの場所にどのように正確に対応しているかは本当にわかりません。

PS。私のグラフィックカードは、OpenGL3.3をサポートするquadrofx4800です。

4

1 に答える 1

3

おそらく、ピクセル ストレージ パラメータを設定する必要があります。最も重要なのは、行の配置です。を追加してみてください

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

電話する前にglTexImage3D

于 2012-10-15T09:33:07.857 に答える