提示コードですが以下の///
コメント部なのですが画像ファイルの一部を指定してglTexImage2D()
したいのですがそれをするにはピクセル配列をどのように指定すればいいのでしょうか?
試したこと
画像の半分のサイズxチェンネル数で半分の位置のピクセル配列を指定しましたがうまく描画されません。
画像ファイル
png ファイル
大きさ: 1080x 1080
チャンネル数 4
cpp
1 2/*############################################################################################ 3# テクスチャロード 分割 4############################################################################################*/ 5std::vector<FrameWork::Texture> FrameWork::LoadTexture(const char* fileName,const glm::vec2 size) 6{ 7 std::vector<Texture> texture; 8 texture.resize(0); 9 10 GLuint id; 11 glm::ivec2 textureSize; 12 int channel; 13 14 unsigned char* data = NULL; 15 data = stbi_load(fileName,&textureSize.x,&textureSize.y,&channel,0); 16 17 if (data == NULL) 18 { 19 std::cerr << "画像が見つかりません: " << fileName << std::endl; 20 assert(0); 21 } 22 23 glGenTextures(1, &id); //テクスチャIDの生成 24 glBindTexture(GL_TEXTURE_2D, id); //IDバインド 25 26// std::cout<<"Channel " << channel<<std::endl; 27// std::cout<<"fileSize "<< textureSize.x * textureSize.y * channel <<std::endl; 28// std::cout<<std::endl; 29 30 31 //テクスチャ生成 32 if(channel == 4) 33 { 34//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 35 //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureSize.x, textureSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data[1080 * 200]); 36 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureSize.x, textureSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 37 38 // glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureSize.x / 2 , textureSize.y / 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data[1080 * 4 * 540]); 39//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 40 } 41 else if(channel == 3) 42 { 43 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureSize.x, textureSize.y, 0, GL_RGB, GL_UNSIGNED_BYTE, &data[50]); 44 } 45 else if(channel == 2) 46 { 47 glTexImage2D(GL_TEXTURE_2D, 0, GL_RG, textureSize.x, textureSize.y, 0, GL_RG, GL_UNSIGNED_BYTE, &data[50]); 48 } 49 else if(channel == 1) 50 { 51 glTexImage2D(GL_TEXTURE_2D, 0, GL_R, textureSize.x, textureSize.y, 0, GL_R, GL_UNSIGNED_BYTE, &data[50]); 52 } 53 else 54 { 55 std::cerr<<"未対応: " << fileName <<std::endl; 56 assert(0); 57 } 58 59 60 61 // テクスチャの補間設定 62 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 63 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 64 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 65 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 66 //glGenerateMipmap(GL_TEXTURE_2D); 67 68 glBindTexture(GL_TEXTURE_2D, 0); 69 70 stbi_image_free(data); 71 72 73 glm::ivec2 texSize = glm::ivec2(textureSize.x / size.x,textureSize.y / size.y); 74 75 76 for(int y = 0; y < textureSize.y; y += texSize.y) 77 { 78 for(int x = 0; x < textureSize.x; x += texSize.x) 79 { 80 Texture tex; 81 tex.id = id; 82 tex.channel = channel; 83 tex.size = textureSize; 84 85 texture.push_back(tex); 86 } 87 } 88 89 return texture; 90} 91
どこかで質問して → それを唐突に消して → 別の箇所で同じ質問を…
という行為を常習的に行っている様子ですが,非常に迷惑です.
「ある時刻において複数個所に質問が同時に存在しなければマルチポストではない」とかなんとか考えているのかもしれませんが,
マルチポストの定義はどうあれ,行為の迷惑さ具合は同等レベルです.
とにかく最初に投稿した箇所で最後までやってください.
参考:少なくとも私ともう1人の方があなたのやり方に苦言を呈しています.
https://ja.stackoverflow.com/questions/90740

あなたの回答
tips
プレビュー