幅、高さ、深さが異なる場合に glTexImage3D を正しく使用する方法を理解するのに問題があります。トリプルポインターで3 を回避し、すべてに細心のnew
注意を払うには、非常に役立つ可能性があると考えたので、使用しました。delete
boost::multiarray
boost::multi_array<GLubyte, 3> texture3DVolume;
texture3DVolume.resize(boost::extents[textureSizeX][textureSizeY][textureSizeZ]);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &(this->textureID));
glBindTexture(GL_TEXTURE_3D, this->textureID);
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);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_3D);
glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, this->textureSizeX,this->textureSizeY, this->textureSizeZ, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, texture3DVolume.data());
int textureSizeX=512;
int textureSizeY=512
int textureSizeZ=511;
511 では歪んだテクスチャが得られます。テクスチャ座標は、私が使用するすべての頂点 ([-0.5,0.5]x[-0.5,0.5]x[-0.5,0.5]
立方体の頂点)に対して、非常に単純なシェーダーで作成されます。
// vertex shader...
texture_coordinate = (v.xyz+vec3(1.0))*0.5;
// then in the fragment shader
gl_FragColor = texture(my_color_texture, texture_coordinate);
しかし、私の結果は歪んでいます。データの配置方法に問題があるのか 、それとも何に問題があるのか 本当にわかりませんboost::multiarray
...私の結果は次のとおりです。
ご覧のとおり、球は歪んでいますが、これは が原因width==height
です!=depth
。これがデータの配置方法やストライドの問題であるかどうかをよりよく理解したいと思います。
設定depth=512
すると、正しく比例した立方体が得られます。