2012-07-31 2 views
1

텍스쳐 렌더링 과정에 문제가 있습니다. width = height = 512로 장면을 렌더링하면 거의 오류가 없지만 텍스처와 장면이 작을수록 더 많은 오류가 발생합니다. 오류는 텍스처의 영역이 검은 색이며, 의미가 없습니다. 여기 텍스쳐 렌더링 - 세부 묘사 수준

는 스크린 샷입니다

512 * 512 : http://www.ld-host.de/uploads/images/d9452fa0ba28494830fd96f0f15b9eba.png 128 * 128 : 여기

http://www.ld-host.de/uploads/images/a39c141282a622f086d4a96b070a56a3.png 나는 질감으로 렌더링하고 나중에

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    glMatrixMode(GL_MODELVIEW) 
    glLoadIdentity() 
    gluLookAt(0,0,200,0,0,-1,0,1,0) 


    self.fbos = glGenFramebuffersEXT(1) 
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.fbos) 
    self.depthbuffers = (glGenRenderbuffersEXT(1) 
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, self.depthbuffers) 
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, width, height) 
    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, self.depthbuffers)  

    self.textures = glGenTextures(1) 
    glBindTexture(GL_TEXTURE_2D, self.textures) 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR) 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR) 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, None); 
    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, self.textures, 0); 
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.fbos); 

    glEnable(GL_CLIP_PLANE0) 
    glEnable(GL_CLIP_PLANE1) 
    glClipPlane(GL_CLIP_PLANE0, (0,0,1,-1 * self.start + self.diff))  
    glClipPlane(GL_CLIP_PLANE1, (0,0,-1,self.start)) 

    # render the mesh 
    glTranslatef(-64,-64,-64) 
    glEnableClientState(GL_VERTEX_ARRAY) # Enable something in OpenGL 
    glEnableClientState(GL_COLOR_ARRAY) # Enable something in OpenGL 
    glBindBuffer(GL_ARRAY_BUFFER,self.vbo[1]) 
    glColorPointer(3,GL_FLOAT,0,None) # Tell OpenGL that it contains only ColorValues 
    #Now the vertex Buffer with positions 
    glBindBuffer(GL_ARRAY_BUFFER,self.vbo[0]) 
    glVertexPointer(3,GL_FLOAT,0,None) # Tell OpenGL that it contains the Positions for each Points 
    glDrawArrays(GL_TRIANGLES,0,len(self.verts)+len(self.color)) # Merge both 

    glDisableClientState(GL_COLOR_ARRAY); 
    glDisableClientState(GL_VERTEX_ARRAY); 
    glDisable(GL_CLIP_PLANE0) 
    glDisable(GL_CLIP_PLANE1) 
    glBindTexture(GL_TEXTURE_2D,0) 
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 

    #Plane for showing texture 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    glMatrixMode(GL_MODELVIEW) 
    glLoadIdentity() 
    gluLookAt(0,0,1,0,0,0,0,1,0) 
    glClearColor(1,1,1,0) 

    glEnable(GL_TEXTURE_2D) 

    glBindTexture(GL_TEXTURE_2D, self.textures) 
    glBegin(GL_QUADS) 
    glNormal3f(0.0, 1.0, 0.0) 
    glTexCoord2f(0.0, 0.0) 
    glVertex3f(-1, 1, -1) 
    glTexCoord2f(1.0, 0.0) 
    glVertex3f(1, 1, -1) 
    glTexCoord2f(1.0, 1.0) 
    glVertex3f(1, -1, -1) 
    glTexCoord2f(0.0, 1.0) 
    glVertex3f(-1, -1, -1) 
    glEnd(); 
    glDisable(GL_TEXTURE_2D) 

    pygame.display.flip() 

어떻게 할 수있는 텍스처를 사용하는 방법 내 코드입니다 나는 작은 질감을 위해 더 좋은 품질을 얻었습니까? 메쉬에는 구멍이 없지만 때때로 질감이 있습니다.

+0

내가 무엇을 렌더링하려고하는지 잘 모르겠습니다. 512^2 텍스처가 맞고 단지 더 작게 만들고 싶습니까? – kolenda

+0

정확히,하지만 512^2를 렌더링 한 다음 128^2로 크기를 조정하고 싶습니다. 직접 128^2를 렌더링하고 싶습니다. 그러므로 나는 파이 게임 표면의 너비와 높이를 128로 설정했다. OpenGL과 동일하다. 하지만 그때 그 오류가 발생합니다 – glethien

+0

'오류'가 없습니다 - 그것의 단지 작은 버전입니다. 나는 그 안에 마법이 없다고 생각합니다 - 당신은 그 붉은 부분을 더 크게 만들 필요가 있습니다, 그래서 그들은 작은 질감으로 볼 수 있습니다. 사용한 모델/자료를 보여줄 수 있습니까? 이 그림들에서 내가 그린 그림을 상상할 수는 없습니다. – kolenda

답변

2

정확히 어떤 사람이보고 싶어하는지 알 수 없습니다. 삼각형/큐브/등을 그리기는 픽셀/샘플 크기보다 훨씬 작습니다. 따라서 모든 사람들이 볼 수있는 것은 아닙니다.

이것은 일반적인 앨리어싱 문제입니다. 픽셀/샘플의 중앙을 덮지 않는 삼각형은 보이지 않습니다. 이것이 래스터 화의 본질입니다. 앨리어싱을 수정하는 유일한 방법은 사용하는 샘플 수를 늘리는 것입니다. 보다 높은 해상도와 낮은 해상도로 렌더링하거나 MSAA 또는 다른 실제 앨리어싱 기술을 사용할 수 있습니다.

관련 문제