2013-03-08 43 views
1

안녕하세요, 디스플레이에 35 개의 이미지를 그립니다. 나는 7X5 격자로 그려 넣고있다. 이미지는 인터넷에서 다운로드됩니다. 이미지가 다운로드 될 때마다 전체 35 개의 이미지를 그려 봅니다. 그러나 그 중 일부는 아직 다운로드되지 않았습니다. 그래서 대신에 기본 타일을 그립니다. 문제는 이미지를 다운로드 할 때마다 이전에 그린 이미지를 다시 그리는 것입니다. 나는 그것을 줄이고 싶다. 그래서 텍스쳐 아틀라스 같은 것을하려고 생각했습니다. 나는 그것을 수동으로하려고 노력하고있다. 나는 glTexImage2D으로 큰 이미지를 만들고 그것에 서브 이미지를 추가하여 glTexSubImage2D으로 처리하고 있습니다.glTexImage2D 및 glTexSubImage2D를 수행하기 전에 glGenTextures 및 glBindTexture를 호출해야합니까?

glGenTextures(1, tex); 
glBindTexture(GL_TEXTURE_2D, (*tex)); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glTexImage2D(GL_TEXTURE_2D, 0, textureImageInfo->format, textureImageInfo->texWidth, textureImageInfo->texHeight, 0, textureImageInfo->format, GL_UNSIGNED_BYTE, NULL); 
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, textureImageInfo->imageWidth, textureImageInfo->imageHeight, textureImageInfo->format, GL_UNSIGNED_BYTE, textureImageInfo->image); 

나는 35 glTexSubImage2DglTexImage2D 모든 35 개 이미지를 추가 호출합니다. 여기서 나는 더 쉬운 설명을 위해서 오직 하나만 썼다. 그리고 마지막으로 나는이 내가 생성하고 glTexSubImage2D 35 호 35 번 너무 텍스처를 결합해야하나요과 혼란 누구인지 이제

glEnable(GL_TEXTURE_2D); 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glVertexPointer(3, GL_FLOAT, 0, this->tileCoordList); 
glTexCoordPointer(3, GL_FLOAT, 0, this->tileTextureCoordList); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisable(GL_TEXTURE_2D); 

을? 아니면 한 번만하면됩니다. 텍스처를 바인딩하는 것이 무엇인지 이해하지 못하는 실제 문제는 그걸로 무엇이든해야합니다. 감사.

+0

텍스처가 하나뿐이라면 glGenTextures()에서 텍스처 이름 하나를 가져와 glBindTexture()에서 한 번만 호출하면됩니다. – rhashimoto

+0

그래서 glGenTextures() 호출이 35 번 필요합니까? 왜냐하면 나는 35 개의 텍스처 서브 이미지에'glTexSubImage2D'를 추가했기 때문입니다. – Tahlil

+1

아니요. 하나의 질감이 있습니다. 'glTexSubImage'는 하나의 텍스쳐 부분을 채 웁니다. – rhashimoto

답변

8

질감에는 "부 영상"이 없습니다. 텍스처에는 이미지 만 있습니다. glTexImage2D은 텍스처의 특정 이미지에 저장 공간을 할당하고 필요에 따라 해당 이미지에 데이터를 업로드합니다. glTexSubImage2D은 데이터를 이미지에만 업로드합니다. "하위"는 이미지의 부분 인을 업데이트 할 수 있다는 것을 의미합니다.

glTexImage2Dmalloc 다음에 memcpy과 같습니다. glTexSubImage2D은 단지 memcpy입니다. 그래서 glTexImage2D으로 먼저 전화해야합니다.

+0

좋은 설명 주셔서 감사합니다 :) – Tahlil