2013-04-20 2 views
3

큐브와 같은 3D 오브젝트의 표면에 텍스처를 배치하려면 해당 큐브의 꼭지점을 사용하여이 텍스처의 배치를 설명 할 수 있습니다.3D 표면에 여러 이미지 배치

하지만 동일한 평면에 여러 개의 개별 이미지를 배치하려면 어떻게해야합니까? 또는 단지 하나의 이미지라고 가정합니다. 그러나 꼭지점이있는 서페이스의 가장자리에 표시하고 싶지는 않지만 표면의 가운데와 작은 곳에 표시하려고합니다. 실제 이미지를 런타임에 동적으로 선택하고 배치해야합니다. 그렇지 않으면 단일 텍스처로 오프라인으로 압축 할 수 있습니다.

나는 접근 방식을 가지고 있지만 나는 거기 더 나은 방법이다, 또는이 충분히 수용 할 경우 여부에 조언을 구하려면 :

내 생각 엔 0의 깊이 (여러 별도의 2D 쿼드를 만드는 것입니다) 각각은 그들과 관련된 텍스처를 가지고 있고 그것들 위에 놓여있다. (그들은 물론 텍스처 좌표가 다른 텍스처 아틀라스 일 수도있다.)

그런 다음이 큐브가 큐브와 같은 3D 개체의 표면에 표시되도록 변형합니다. 물론 큐브가 변형 될 때마다 이러한 쿼드가 적절히 변형되어 큐브에 첨부 된 것처럼 보이도록 매트릭스 계층 구조를 유지해야합니다.

이것은 반드시 어려운 것은 아니지만 텍스처링을 처음 접했고 이것이 이와 같은 일반적인 경우인지 알고 싶습니다.

+0

당신이하려는 것은 평범한 관행이 아니기 때문에 사람들이 일반적으로하지 않는 일에 대해 "정상적인 관행"이 무엇인지 말하기는 어렵습니다. 텍스처는 일반적으로있는 그대로 사용되도록 제작되었습니다. 벽면의 일부에 무언가가 필요한 경우 텍스처 아티스트가 벽의 텍스처에 실제로 배치하거나 모델러가 벽에 포함 된 폴리곤을 배치하여 텍스처 아티스트가 특수한 것을 추가합니다. –

+1

@ NicolBolas이 글을 연구하면서, 내가 묻는 것은 비트 맵 글꼴과 다른 글립을 표면에 렌더링하는 것과 크게 다르지 않다는 것을 알게되었다. 각 글립은 동일한 텍스처에서 가져온 다른 이미지이다. 내가 찾은 한 가지 인기있는 구현은 실제로 내가 위에서 제안한 것 (다른 유형의 이미지가 아닌 텍스처의 글리프 이미지 제외)을 본질적으로 수행하는 것이므로 너무 드문 일이 아니라고 생각합니다. – johnbakers

+0

@SebbyJohanns 서페이스를 구성하는 텍스처의 콜라주보다 서페이스의 3D 데칼처럼? – james82345

답변

0

하지만 동일한 평면에 여러 개의 개별 이미지를 배치하려면 어떻게해야합니까?

여러 텍스쳐를 사용하십시오. 각각 텍스쳐 좌표를 가지고 있습니다. OpenGL 구현은 많은 텍스쳐 유닛을 제공 할 것입니다. 각각은 서로 다른 질감을 제공 할 수 있습니다.

glActiveTexture(GL_TEXTURE_0 + i); 
glBindTexture(…); 
glUniform1i(texturesampler[i], i); // texturesampler[i] contains the sampler uniform location of the bound program. 

아니면 그냥 하나의 이미지 겠지,하지만 난 그게 정점은 표면의 가장자리에 표시하지 않으려는 것이 아니라 어딘가에 작은 표면의 중간이다.

여기서 GL_CLAMP ... 텍스처 랩 모드가 사용됩니다. 텍스츄어 지정 것과

glTexParameteri(GL_TEXTURE_WRAP_{S,T,R}, GL_CLAMP[_TO_{EDGE,BORDER}]); 

간격, 대신에 단지 에지 픽셀을 반복하여, 하나의 시간을 표시 할 화상을 반복 [1 0] 외부로 정점 좌표. 가장자리 픽셀을 투명하게 만들면 마치 이미지가없는 것처럼 보입니다.

+0

필자가 연구 한 바에 따르면, 내가 묻는 것은 다른 글립을 비트 맵 글꼴에서 표면으로 렌더링하는 것과 크게 다르지 않다. 각 글립은 동일한 텍스처에서 가져온 다른 이미지이다. 내가 발견 한 한 가지 인기있는 구현은 실제로 위에서 언급 한 것들을 본질적으로 수행하는 것입니다 (다른 유형의 이미지가 아닌 텍스처의 글리프 이미지 제외). – johnbakers

1

씬을 렌더링하고 텍스처로 저장 한 다음 표면에 텍스처를 사용할 수 있습니다.

glCopyTexImage2D() 또는 glCopyTexSubImage2D()을 확인하십시오.

또는 아마도 프레임 버퍼 개체를 사용해보십시오.

+0

흥미로운 기능,이 특정 예에서는 현명하지는 않지만 다른 요구에 유용한 기술처럼 보입니다. 내가 여기서 사용했다면, 나는 여전히 내가하고있는 일을해야 할 것이다. 그러나 이미지가 업데이트 될 때마다 텍스쳐를 복사하는 오버 헤드가 발생한다. 나는 종종 이미지를 업데이트하려고 계획하고 있기 때문에 이것은 우아하지 않을 수도있다. – johnbakers

+0

또 다른 방법은 다른 텍스처 이미지의 데이터를 결합하여 텍스처를 다시 만드는 것이다. 당신은 이미지 데이터를 메모리에 버퍼링해야 할 것이다. 아마 오버 헤드도 많이 걸릴 것이다. 나는 현재의 접근 방식이 아마도 최고라고 생각합니다. 덕분에 – james82345

+0

; 나는 여기에있는 큰 총들 중 일부가 통찰력을 제공하기를 기대하고있다. OpenGL 또는 그래픽 전반에서 무언가를 성취하기 위해 거의 항상 여러 접근법을 배웠습니다. – johnbakers

관련 문제