2012-12-15 5 views
0

저는 OpenGL ES에 익숙하지 않습니다. 저는 학습 곡선의 일부로 기본적인 것들을하려고 노력하고 있습니다. 두 개의 glDrawArrays 호출로 두 개의 메시, 구 및 큐브를 렌더링 할 수있었습니다. 큐브와 구 주위를 감싸기 위해 다른 텍스처를로드하려고 시도하지만 실제로로드 된 텍스처가 두 메쉬 모두에 래핑됩니다. 왜 이런 일이 일어날 지 아는 사람이 있습니까? 여기 OpenGL ES 2.0에서 각 메쉬마다 다른 텍스처를로드하는 방법은 무엇입니까?

메쉬에 대한 코드이다

glEnable(GL_DEPTH_TEST); 

glGenVertexArraysOES(1, &vertexArray); 
glBindVertexArrayOES(vertexArray); 

glGenBuffers(1, &vertexBuffer); 
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); 
glBufferData(GL_ARRAY_BUFFER, sizeMeshVerts, meshVerts, GL_STATIC_DRAW); 

glEnableVertexAttribArray(GLKVertexAttribPosition); 
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 4*8, BUFFER_OFFSET(0)); 

glEnableVertexAttribArray(GLKVertexAttribNormal); 
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 4*8, BUFFER_OFFSET(4*3)); 

glEnableVertexAttribArray(GLKVertexAttribTexCoord0); 
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 4*8, BUFFER_OFFSET(4*6)); 

// Texture 
// Create image from file 
NSString *path = [[NSBundle mainBundle] pathForResource:textureImage ofType:@"jpg"]; 
NSData *texData = [[NSData alloc] initWithContentsOfFile:path]; 
UIImage *image = [[UIImage alloc] initWithData:texData]; 

// 새로운 OpenGL은 ES 텍스처 버퍼를 생성 가 // 로부터 픽셀 데이터를 사용하여 버퍼 콘텐츠를 초기화 // 코어 그래픽 이미지의 CGImage 지정된 .

glBindVertexArrayOES(_vertexArray); 

// Render the object with ES2 
glUseProgram(_program); 

// Set the sampler texture unit to 0 
glUniform1i (uniforms[UNIFORM_TEXTURE_MATRIX], 0); 

glDrawArrays(GL_TRIANGLES, 0, numVertices); 

답변

1

당신은 렌더링하기 전에 샘플러로 텍스처 바인딩되지 않은 : 여기

[TextureLoader textureWithCGImage:image.CGImage options:nil error:NULL]; 

glBindVertexArrayOES(0); 

은 무승부 코드입니다. 먼저 textureWithCGImage:에 의해 반환 된 GLKTextureInfo 개체에 대한 참조를 유지해야하며 glBindTexture을 텍스처 이름과 함께 사용하여 현재 samper에 바인딩 할 수 있습니다. 예 :

GLKTextureInfo *tex = [TextureLoader textureWithCGImage:image.CGImage options:nil error:NULL]; 
... 
glBindTexture(GL_TEXTURE_2D, tex.name); 

샘플러에 올바른 질감을 설정하기 위해 각 그리기 호출 전에이 작업을 수행해야합니다. 필요한 각 텍스처를 다른 샘플러에 바인드 한 다음 올바른 샘플러 유니폼을 전달할 수도 있습니다.

+0

좋아요! 이 작품! 정말 고맙습니다 – Pupillam

관련 문제