2011-12-14 3 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 

나는 이것이 문제라고 생각하지 않지만 각 객체의 텍스처 좌표를 수동으로 계산하고있다. ('sorrounding sphere'와 객체 중심의 벡터의 교차점을 계산한다. 각각의 버텍스).

코드의 다른 부분을 보려면 여기로 문의하십시오. 힌트 나 조언을 많이 부탁드립니다.

편집이 : 아마 문제가 나는 그것이 표면에 질감을 적용하기 위해서는, glBegin(GL_POINTS)와 함께 glTexCoord2f()을 사용하고 있다는 것입니다, GL_QUADS, GL_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 

또한, I는 그냥 showSides()를 호출하기 전에 메인 시각화 기능 glEnable(GL_TEXTURE_2D) 변위 : I는 물체의 측면을 계산하는 함수 glTexCoord2f()에 대한 호출을 옮겼다.

관련 문제