提示コードのコメント部内部のコードですが header変数で128バイトのunsigned char型変数を使って.ddsファイルのヘッダーファイルを読み込んでいるのですが。このheader変数の4バイトをint型に変換したいのですがそれをするにはどうしたらいいのでしょうか?
提示コードのような形になると思うのですが上手く実装できません。この値は255になります。
参考サイト: https://dench.flatlib.jp/ddsformat
cpp
1 2 unsigned long headerSize = 0; 3 unsigned long header[128 / 8] = { 0 }; 4 fread(header, sizeof(unsigned long), 128 / 8, file); //ヘッダーサイズ 5 6 printf(" ああああ %lu\n",header[3]); 7 8
上記のようなやり方で画像のYの大きさの出力を試しましたが上手く出力されません。
cpp
1 2 for (int i = 0; i < textureNum; i++) 3 { 4 printf("%d\n",i); 5 texture.push_back(Image{ FrameWork::Texture{glm::ivec2(0,0),0},"\0" }); 6 7 unsigned char *data = NULL; 8 glm::ivec2 size = glm::ivec2(0,0); 9 unsigned char channel = 0; 10 char textureName[TEXTURE_FILE_PATH_SIZE] = {'\0'}; 11 unsigned long headerSize = 0; 12/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 13 unsigned char header[128]; 14 fread(textureName, sizeof(char), TEXTURE_FILE_PATH_SIZE, file); //テクスチャ名 15 fread(header, sizeof(unsigned char), 128, file); //ヘッダーサイズ 16 17 printf("zああああ %d\n",header[12] | header[13] | header[14] | header[15]); 18/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 19 20 21 22 23 24 25 26 glGenTextures(1, &texture.back().image.ID); //テクスチャIDの生成 27 glBindTexture(GL_TEXTURE_2D, texture.back().image.ID); //IDバインド 28 29 texture.back().image.size = size; 30 31 //テクスチャ生成 32 if (channel == (unsigned char)4) 33 { 34 data = (unsigned char*)malloc(static_cast<size_t>(size.x * size.y * 4)); 35 fread(data, sizeof(unsigned char), static_cast<size_t>(size.x * size.y * 4), file); 36 glCompressedTexImage2D(GL_TEXTURE_2D, 50, GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, size.x,size.y,0,(size.x * size.y * 4),data); 37 } 38 else if (channel == (unsigned char)3) 39 { 40 data = (unsigned char*)malloc(static_cast<size_t>(size.x * size.y * 3)); 41 fread(data, sizeof(unsigned char), static_cast<size_t>(size.x* size.y * 3), file); 42 glCompressedTexImage2D(GL_TEXTURE_2D, 50, GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, size.x, size.y, 0, (size.x * size.y * 3), data); 43 } 44 else if (channel == (unsigned char)2) 45 { 46 data = (unsigned char*)malloc(static_cast<size_t>(size.x * size.y * 2)); 47 fread(data, sizeof(unsigned char), static_cast<size_t>(size.x* size.y * 2), file); 48 glCompressedTexImage2D(GL_TEXTURE_2D, 50, GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, size.x, size.y, 0, (size.x * size.y * 2), data); 49 } 50 else if (channel == (unsigned char)1) 51 { 52 data = (unsigned char*)malloc(static_cast<size_t>(size.x * size.y * 1)); 53 fread(data, sizeof(unsigned char), static_cast<size_t>(size.x* size.y * 1), file); 54 glCompressedTexImage2D(GL_TEXTURE_2D, 50, GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, size.x, size.y, 0, (size.x * size.y * 1), data); 55 } 56 else 57 { 58 std::cerr << "未対応の形式のチャンネル数です: " << textureName << " " << "チャンネル数: " << channel << std::endl; 59 assert(0); 60 } 61 62 63 64 texture.back().name = std::string(textureName); 65 // テクスチャの補間設定 66 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 67 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 68 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 69 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 70 glGenerateMipmap(GL_TEXTURE_2D); 71 glBindTexture(GL_TEXTURE_2D, 0); 72 73 free(data); //解放 74 data = NULL; 75 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。