前提・実現したいこと
PyOpenGLにてマルチテクスチャを用いたマッピングを行いたいと思い、試しに一部透過された異なる2つのテクスチャを重ねて表示しようと試みました。
発生している問題
この際、GL_TEXTURE0とGL_TEXTURE1の2つのテクスチャユニットにそれぞれのテクスチャをバインドしたのですが、実行してみるとGL_TEXTURE1の方のテクスチャが正しく表示されていませんでした。そこで比較用にソースコードのようにそれぞれのテクスチャユニットに対する設定や使用するテクスチャ画像を同じにして、片方のみを有効にしてそれぞれ実行してみたところ、GL_TEXTURE0のみを有効にした場合は正しくマッピングされていたのに対して、GL_TEXTURE1のみを有効にした場合は画像の左上の画素の値で全体が塗りつぶされるような結果となりました。その結果からサイズの設定などが適切ではないのではなどと考え調べてみたのですが解決策を得ることができませんでした。GL_TEXTURE0とそれ以外のテクスチャユニットとではどのような違いがあり、また、GL_TEXTURE0以外に対しては追加で設定しなければならないことなどはあるのでしょうか?
知識不足ゆえに分かりにくい文章となってしまいましたが、どうか回答よろしくお願いします。
該当のソースコード
python
1#初期化 2def init(): 3 global texture 4 print(glGetString(GL_VERSION)) # 4.5.0 - Build 22.20.16.4749 5 texturename = ["test1.png","test2.png","test3.png"] 6 texture=glGenTextures(2) 7 8 #テクスチャユニット0 9 glActiveTexture(GL_TEXTURE0) 10 img = Image.open(texturename[2]) 11 w,h = img.size 12 print(img.size) #(128,128) 13 glBindTexture(GL_TEXTURE_2D, texture[0]) 14 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w,h, 0,GL_RGBA, GL_UNSIGNED_BYTE, img.tobytes()) 15 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) 16 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) 17 18 #テクスチャユニット1 19 glActiveTexture(GL_TEXTURE1) 20 img = Image.open(texturename[2]) 21 w,h = img.size 22 print(img.size) #(128,128) 23 glBindTexture(GL_TEXTURE_2D, texture[1]) 24 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w,h, 0,GL_RGBA, GL_UNSIGNED_BYTE, img.tobytes()) 25 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) 26 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) 27 28 glActiveTexture(GL_TEXTURE0) 29
補足情報(FW/ツールのバージョンなど)
Python 3.7.0
OpenGL 4.5.0
あなたの回答
tips
プレビュー