2011-12-14 13 views
0

私はテクスチャレンダリングの仕組みを理解し、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_QUADSGL_TRIANGLESまたは任意の他の面に使用されるべきであるということですか事は、私のオブジェクトの辺が決定されたポリゴンタイプではないことです:主に三角形ですが、四辺形もあります。

+0

これはそうだった。 'glTexCoord2f()'への呼び出しを、オブジェクトの辺を計算する関数に移しました: – freieschaf

+0

重複した返事をおかけして申し訳ありません。私はまだstackoverflowインターフェイスに精通していません。 – freieschaf

答えて

0

さて、それでした。

def showSides(obj): 
Sides_List = glGenLists(1) 
glNewList(Sides_List,GL_COMPILE) 
texNames = generateTexture('tex_pattern.jpg') 
glColor3f(1.0,1.0,0.0) 
i = 0 
while i < obj.ns: 
    j = 0 
    glBegin(GL_POLYGON)   
    while j < len(obj.sides[i]): 
     glNormal3f(obj.vnormals[obj.sides[i][j]].x, obj.vnormals[obj.sides[i][j]].y, obj.vnormals[obj.sides[i][j]].z) 
     glTexCoord2f(obj.texcoords[obj.sides[i][j]].x, obj.texcoords[obj.sides[i][j]].y) 
     glVertex3f(obj.vertices[obj.sides[i][j]].x, obj.vertices[obj.sides[i][j]].y, obj.vertices[obj.sides[i][j]].z) 
     j = j + 1 
    glEnd() 
    i = i + 1 
glEndList() 
return Sides_List 

また、私はちょうどそれがshowSides()を呼び出す前に、メインの可視化機能にglEnable(GL_TEXTURE_2D)を変位:私は、オブジェクトの側面を計算する関数へglTexCoord2f()への呼び出しを移動しました。

関連する問題