2013-11-24 1 views
0

객체 (입방체)의 크기에 따라 동적으로 텍스처를 반복하고 싶습니다.OpenGL 2.0 객체 크기에 따라 텍스처 크기 조정

필자는 VerticesCube3D 구조를 시도했지만 값을 변경하려고 할 때 충돌이 발생합니다. 나는 반복 내 텍스처 설정을 가지고 있지만 현재는 텍스처를 (I ​​동적 TEX_COORD_MAX을 변경해야하는) 그런 다음 당신이해야하기 때문에 텍스처 (정점 데이터에 좌표를 변경하지 않으

Vertex VerticesCube3D[] = { 
     // Front 
     {{1, -1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, 1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, 1, 0}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, -1, 0}, {1, 1, 1, 1}, {0, 0}}, 
     // Back 
     {{1, 1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{-1, -1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{1, -1, -2}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, 1, -2}, {1, 1, 1, 1}, {0, 0}}, 
     // Left 
     {{-1, -1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{-1, 1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, 1, -2}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, -1, -2}, {1, 1, 1, 1}, {0, 0}}, 
     // Right 
     {{1, -1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, 1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{1, 1, 0}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{1, -1, 0}, {1, 1, 1, 1}, {0, 0}}, 
     // Top 
     {{1, 1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, 1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, 1, -2}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, 1, 0}, {1, 1, 1, 1}, {0, 0}}, 
     // Bottom 
     {{1, -1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, -1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, -1, 0}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, -1, -2}, {1, 1, 1, 1}, {0, 0}} 
    }; 
+0

쉐이더 코드 – marekb

+0

에서 텍스처 좌표 값을 변경할 수 있습니다. 쉐이더의 텍스처에 어떤 값이 전달되는지 예를 들어 보겠습니다. – Burf2000

답변

1

뻗어 그것을 하드웨어에 다시 업로드하십시오). 대신 GPU에서 텍스처 좌표를 변환하려고합니다. 아마도 정점 셰이더에서 가능할 것입니다.

Projective Texture Mapping을 읽으십시오. 이것은 꽤 일반적인 기술이지만 놀랍게도 좋은 튜토리얼의 길을 많이 찾을 수는 없습니다. Here's a university programming assignment에서 조금 설명합니다.

요점 : 텍스처 좌표를 변환하는 텍스처 매트릭스를 정의합니다. 이것은 모델, 뷰 및 프로젝션 매트릭스와 마찬가지로 변환이므로 iOS에서는 GLKMatrix4 함수를 사용하여 생성 할 수 있습니다. 그런 다음 균일 한 변수를 사용하여 해당 행렬을 버텍스 쉐이더에 제공하십시오. 버텍스 쉐이더에서 입력 텍스쳐 좌표 (버텍스 애트리뷰트)에 텍스쳐 행렬을 곱하여 프래그먼트 셰이더에서 사용하기 위해 출력하기 전에 그것을 변환합니다.

텍스처가 정확하게 한 번 오브젝트를 덮도록 텍스처 데이터를 정점 데이터로 정의하면 텍스처 매트릭스를 사용하여 텍스처 크기를 줄일 수 있습니다. 크기가 축소되어 텍스쳐가 parameters are set으로 반복되면 텍스쳐가 객체의면을 따라 타일링됩니다.

관련 문제