質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

789閲覧

画像読み込みでピクセル配列で場所を指定して画像を登録する方法

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/09/01 11:06

提示コードですが以下の///コメント部なのですが画像ファイルの一部を指定して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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/09/02 01:57

どこかで質問して → それを唐突に消して → 別の箇所で同じ質問を… という行為を常習的に行っている様子ですが,非常に迷惑です. 「ある時刻において複数個所に質問が同時に存在しなければマルチポストではない」とかなんとか考えているのかもしれませんが, マルチポストの定義はどうあれ,行為の迷惑さ具合は同等レベルです. とにかく最初に投稿した箇所で最後までやってください. 参考:少なくとも私ともう1人の方があなたのやり方に苦言を呈しています. https://ja.stackoverflow.com/questions/90740
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問