2011-11-08 1 views
1

나는 2 개의 다른 짜임새를 사용하여 체스 판을 렌더링 중이다. 하나는 검은 사각형이고 다른 하나는 하얀 사각형입니다. 그러나 각각의 사각형 대신 자신의 질감을 가지고, 그들은 모두 내가 바인딩 된 마지막 텍스처 인 glBindTexture(GL_TEXTURE_2D, id);을 사용합니다. 이 코드를 실행하면, 모두 쿼드 바인드 된 흰색 질감이glBindTexture를 어떻게 사용합니까?

glEnable(GL_TEXTURE_2D);  
glBegin(GL_QUADS); 
    // square 0, 0 (front left) 
    glBindTexture(GL_TEXTURE_2D, textureBlackSquare->texID); 
    glNormal3f(0, 1, 0); 
    glTexCoord2f(0, 0); glVertex3f(-8.0, 0.5, 8.0); 
    glTexCoord2f(1, 0); glVertex3f(-6.0, 0.5, 8.0); 
    glTexCoord2f(1, 1); glVertex3f(-6.0, 0.5, 6.0); 
    glTexCoord2f(0, 1); glVertex3f(-8.0, 0.5, 6.0); 
glEnd(); 

glBegin(GL_QUADS); 
    // square 1, 0   
    glBindTexture(GL_TEXTURE_2D, textureWhiteSquare->texID); 
    glTexCoord2f(0, 0); glVertex3f(-6.0, 0.5, 8.0); 
    glTexCoord2f(1, 0); glVertex3f(-4.0, 0.5, 8.0); 
    glTexCoord2f(1, 1); glVertex3f(-4.0, 0.5, 6.0); 
    glTexCoord2f(0, 1); glVertex3f(-6.0, 0.5, 6.0); 
glEnd(); 

:

이 내 접근 방식입니다. 각 쿼드마다 고유 한 텍스처를 갖게하려면 어떻게해야합니까?

+0

질문 제목을 정교하게 기입하십시오. 아무도 현재 귀하의 질문을 인식하지 못합니다. 이것은 일회성을위한 지원 사이트가 아닌 _ 커뮤니티입니다. –

+0

다시 한 번 사과 드리며, 제 제목에 무엇을 넣을 지 잘 모르겠습니다. 제 문제가 문장이나 두 문장으로 설명 될 수있는 간단한 수정이라고 생각하고 있습니다. 처음에 문제가 무엇인지 확실하지 않을 때 문제의 범위를 예측하기 란 어렵습니다. – mikestaub

답변

10

glBegin/End 중간에 glBindTexture으로 전화 할 수 없습니다. begin/end 내에서만 정점 함수를 호출 할 수 있습니다.

또한 8x8 바둑판처럼 하나의 텍스처를 만든 다음 전체 바둑판을 그리기 위해 단일 쿼드를 렌더링하는 것이 어떻습니까? the documentation 가입일

+0

내 프로그램이 실제로 대화 형이고 텍스처가 각 사각형에 대해 동적으로 업데이트되어야하기 때문에 텍스처를 각 사각형에 별도로 바인딩하려고했습니다. – mikestaub

3

: glBindTexture는 사이의 glBeginglEnd의 실행과 상응하는 실행을 실행하면

GL_INVALID_OPERATION 생성된다.

오류를 확인하는 것을 잊었으므로 프로그램이 유효하지 않음을 놓쳤습니다.

+2

** ** ** "glBindTexture"라는 인터넷 검색을 통해 해당 매뉴얼 페이지를 검색하고 코드가 작동하지 않는 이유를 설명 한 다음 여기에 글을 쓰려면 1 분 14 초가 걸렸습니다. –

+0

실수로, GL_INVALID_OPERATION을 알지 못해서 그것을 확인하지 못했습니다. 프로그램은 잘 실행되고 텍스처를 바인딩합니다. 예상 한 순서대로가 아닙니다. 이것은 내가 질감에 대해 이해하지 못하는 것이 사소한 것이라고 생각하게했습니다. – mikestaub

+1

@pixelpusher : ... 문서에서 항상 가장 좋은 시간입니다. –

2

glBegin-glEnd 블록 내에서 텍스처를 바인딩 할 수 없습니다. 또한 텍스처 스위칭은 GPU에 요청할 수있는 가장 값 비싼 것 중 하나이므로 가능한 경우 텍스처를 전환하지 않도록해야합니다 (텍스처 스위치는 모든 텍셀 페치 캐시를 무효화합니다).

대신 장면 개체를 사용하는 질감으로 정렬하고이를 사용하여 그룹화하십시오. 따라서 첫 번째 텍스처 (예 : 흰색)를 사용하여 모든 바둑판 쿼드를 렌더링 한 다음 두 번째 텍스처 (검정색)를 사용하는 모든 쿼드를 렌더링합니다.

관련 문제