提示コードのコメント部内部のコードですがグレースケールの色が来た場合G_RED
と指定したのですがこれは正しいのでしょうか?
GL_RED_INTEGER
とGL_RED
どっちを指定すればいいか知りたいです。RoughnessMap
のテクスチャです。
公式リファレンス: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml
cpp
1 2// ##################################### テクスチャをロード ##################################### 3FrameWork::Texture FrameWork::LoadTexture(const char* fileName) 4{ 5 Texture texture; 6 7 glm::ivec2 size; 8 int channel; 9 10 unsigned char* data = NULL; 11 data = stbi_load(fileName, &size.x, &size.y, &channel, 0); 12 13 texture.size = size; 14 15 16 if (data == NULL) 17 { 18 std::cerr << "画像が見つかりません: " << fileName << std::endl; 19 assert(0); 20 } 21 22 glGenTextures(1, &texture.ID); //テクスチャIDの生成 23 glBindTexture(GL_TEXTURE_2D, texture.ID); // IDバインド 24 25 //テクスチャ生成 26 27 if (channel == 4) 28 { 29 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.x, size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 30 } 31 else if (channel == 3) 32 { 33 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.x, size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, data); 34 } 35////////////////////////////////////////////////////////////////////////////////////////////////////////////// 36 else if (channel == 2) 37 { 38 glTexImage2D(GL_TEXTURE_2D, 0, GL_RG, size.x, size.y, 0, GL_RG, GL_UNSIGNED_BYTE, data); 39 } 40 else if (channel == 1) 41 { 42 glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, size.x, size.y, 0, GL_RED, GL_UNSIGNED_BYTE, data); 43 } 44///////////////////////////////////////////////////////////////////////////////////////////////////////////// 45 else 46 { 47 std::cerr << "未対応の形式のチャンネル数です: " << fileName <<" "<< "チャンネル数: "<<channel<< std::endl; 48 assert(0); 49 } 50 51 // テクスチャの補間設定 52 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 53 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 54 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); // we clamp to the edge as the blur filter would otherwise sample repeated texture values! 55 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 56 glGenerateMipmap(GL_TEXTURE_2D); 57 glBindTexture(GL_TEXTURE_2D, 0); 58 59 stbi_image_free(data); 60 61 return texture; 62 63}
あなたの回答
tips
プレビュー