OpenGL ではテクスチャが 2 の累乗でなければならないため、OpenGL で問題が発生しています。私がやっていることは次のとおりです。
I PNGLIB または SOIL を使用して、PNG ファイルを unsigned char の配列にロードします。アイデアは、この配列を実行して、自分に関連する部分を「選択」できるということです。たとえば、人をロードしたと想像してください。ただし、頭を別のテクスチャに保存したいだけです。したがって、配列をループして、必要な部分のみを選択します。
最初の質問: 配列内のデータは RGBA モードで格納されていると思いますが、データが行方向または列方向で埋められているかどうかはまだわかりません。この情報を知ることは可能ですか?
2 番目の質問:常に 2 の累乗のテクスチャを作成する必要があるため、幅 513 ピクセルの画像があり、幅 1024 ピクセルのテクスチャが必要になる場合があります。そのため、ピクセルが本来あるべき場所にないため、画像が完全に「破壊」されたように見えます。テクスチャは、配列に入力された関連データとは異なるサイズです。では、画像の内容を再度取得するために配列を再編成するにはどうすればよいでしょうか? 次のことを試しましたが、うまくいきません。
unsigned char* new_memory = 0;
int index = 0;
int new_index = 0;
new_memory = new unsigned char[new_tex_width * new_tex_height * 4];
for(int i=0; i<picture.width; i++) // WIDTH
{
for(int j=0; j<picture.height; j++) // HEIGHT
{
for(int k=0; k<4; k++) // DEPTH
new_memory[new_index++] = picture.memory[index++];//picture.memory[i + picture.height * (j + 4 * k)];
}
new_index += new_tex_height - picture.height;
}
glGenTextures(1, &png_texture);
glBindTexture(GL_TEXTURE_2D, png_texture);
glTexImage2D(GL_TEXTURE_2D, 0, 3, new_tex_width, new_tex_height, 0 , GL_RGBA, GL_UNSIGNED_BYTE, new_memory);