私はテクスチャレンダリングの仕組みを理解し、pyopenglを使ってその作業をしています。pyopenglのレンダリングテクスチャ
赤い本からチュートリアルまで、私はいくつかのドキュメントを読んだことがありますが、私のプログラムではテクスチャがレンダリングされません。描画されたオブジェクトの表面の色が変わります(暗くなります)。 、画像ファイルを読み込む機能テクスチャのプロパティを設定し、それを可能にし、
def generateTexture(texPath):
im = Image.open(texPath)
texData = im.tostring('raw', 'RGBX', 0, -1)
texName = [0]
glGenTextures(1, texName)
glBindTexture(GL_TEXTURE_2D, texName[0])
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, texData)
glEnable(GL_TEXTURE_2D)
return texName
と、オブジェクトの頂点の可視化リストを作成する機能、
def showVertices(obj):
Vertices_List = glGenLists(1)
glNewList(Vertices_List,GL_COMPILE)
texNames = generateTexture('tex_stone.jpg')
glBindTexture(GL_TEXTURE_2D, texNames[0])
glColor3f(1.0,1.0,1.0)
glBegin(GL_POINTS)
i=0
while i < obj.nv:
glNormal3f(obj.vnormals[i].x, obj.vnormals[i].y, obj.vnormals[i].z)
glTexCoord2f(obj.texcoords[i].x, obj.texcoords[i].y)
glVertex3f(obj.vertices[i].x,obj.vertices[i].y,obj.vertices[i].z)
i = i + 1
glEnd()
glEndList()
return Vertices_List
:ここ
は、関連するコードです
私はこれが問題ではないと思っていますが、私は各オブジェクトのテクスチャ座標を手動で計算しています( '周囲の球'とオブジェクトの中心からのベクトルの交点を計算します)それぞれの頂点を描画します)。
コードの他の部分を見たい場合は、お尋ねください。ヒントやアドバイスをいただければ幸いです。
EDIT:?たぶん、問題は、私はglBegin(GL_POINTS)
との組み合わせでglTexCoord2f()
を使用すると、それは表面にテクスチャを適用するためには、GL_QUADS
、GL_TRIANGLES
または任意の他の面に使用されるべきであるということですか事は、私のオブジェクトの辺が決定されたポリゴンタイプではないことです:主に三角形ですが、四辺形もあります。
これはそうだった。 'glTexCoord2f()'への呼び出しを、オブジェクトの辺を計算する関数に移しました: – freieschaf
重複した返事をおかけして申し訳ありません。私はまだstackoverflowインターフェイスに精通していません。 – freieschaf