2012-08-14 3 views
2

높이가 h 인 실린더 표면에 균일 한 바둑판 텍스처를 적용하고 반경 (a,b)을 적용하고 싶습니다.실린더의 텍스처 맵핑

나는이 쉐이더 구현했습니다

:

버텍스 쉐이더 :

varying vec2 texture_coordinate; 
float twopi = 6.283185307; 
float pi=3.141592654; 

float ra = 1.5; 
float rb= 1.0; 

void main() 
{ 
// Transforming The Vertex 
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 
// -pi/2 < theta < pi/2 
float theta = (atan2(rb*gl_Vertex.y , ra*gl_Vertex.x)+pi*0.5)/pi; 

// Passing The Texture Coordinate Of Texture Unit 0 To The Fragment Shader 
    texture_coordinate = vec2( theta , -(-gl_Vertex.z+0.5)); 
} 

조각 쉐이더 :

varying vec2 texture_coordinate; 
uniform sampler2D my_color_texture; 
void main() 
{ 
    // Sampling The Texture And Passing It To The Frame Buffer 
    gl_FragColor = texture2D(my_color_texture, texture_coordinate); 
} 

나는 다음과 같은 옵션을 지정한 클라이언트 측에서 동안 :

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

내 텍스처는 3768x1200 바둑판입니다. 이제 바둑판을 균일하게 유지하기 위해 텍스처를 적용하고 싶습니다 (스트레치가없는 사각형). 그러나 곡선 부분의 타일이 늘어날수록 표면의 곡선이 덜어 진 부분에서만 올바른 종횡비를 얻을 수 있습니다.

텍스처를 왜곡하고 늘리지 않고 텍스처를 적용하는 방법을 이해하고 싶습니다. 텍스처를 늘리지 않고 텍스처를 반복하여 적용하는 것이 좋습니다.

In the first image the tiles on the less curved part are square

while where the curvature is higher they are more stretched

나는 또한이 개 국경이 교차 질감의 경계에 이상한 깜빡 거림의 문제가

, 어떻게 그것을 해결하기 위해 (이 두 번째 이미지에서 볼 수있다)?

+1

귀하의 문제에 대해 명확하지 않습니다. 정사각형이 "정사각형"이 아니라고 말하지만, 귀하가 질문을 오해하지 않는 한, 원근감있는 각도로 무언가를 볼 때 기대했던대로입니다 . – jcoder

+0

아니요 여기서 원근감은 개체의 모양을 표시하기위한 것입니다.필자가 원하는 것은 타원의 경계에서 타일을 늘리는 것을 방지하기 위해 어떤 종류의 텍스처 좌표 함수를 사용해야하는지입니다. 텍스처 자체를 수정해야합니까? – linello

+0

텍스처를 카메라의 오브젝트에 투영 한 것처럼 텍스처를 매핑하려고합니까? – Bojangles

답변

2

텍스처 좌표를 수정하여 개체에서 약간 "축소"할 수 있습니다. 당신이 할 수없는 것은 텍스쳐 좌표를 비선형으로 스케일링하기 위해 매개 변수화하는 것입니다.

  1. 퀀 샘플링이 텍스처를 수정하는 것은 더 비원 (동적 수용 좌표 있지만 저해상도 다듬기를 사용할 때 품질이 낮고, 그것이 가장 간단한 해결책 :

    그래서, 옵션은 구현, 비록). 질감을 확장 할

  2. 사용 단편 쉐이더 비선형 좌표 (아마도 약간 더 복잡하지만, 동적 사용 필터링 텍스처 크기에 따라 상당히 양호한 결과를 제공하고, 텍스처 콘텐츠 (!))
  3. 텍스처 수정 (정적 솔루션 - 주어진 Ra/Rb 비율에 대해서만 작동하지만 품질은 가능한 가장 우수합니다).

테두리의 깜박임에 관해서는 텍스처에 대한 밉맵을 생성해야합니다.

자세한 정보가 필요한 경우 알려주십시오.

+0

프래그먼트 셰이더를 사용하여 텍스처 좌표를 수정하는 방법은 무엇입니까? 't' 그대로의's' 구성 요소를 수정하여 texture_coordinate에 직접 작업해야합니까? 김프에서 텍스처를 변형하는 방법을 찾으려고했지만 간단한 방법을 찾을 수 없습니다. 이런 종류의 플러그인에 사용할 수있는 플러그인이 있습니까? 그리고 밉맵은 어떻습니까? 'gluBuild2DMipmaps'를 사용하고 있는데, 여전히 깜빡 거리는 효과가 있습니다. – linello

+0

어떻게 수정합니까? 그들에게 비선형 함수를 적용하십시오, 그렇습니다,'s'을 수정하십시오, 그러나 조각 쉐이더에서하십시오. 흠, 나는'gluBuild2DMipmaps'을 한번도 사용하지 않았습니다. Red Book에 올바르게 표시되는지 확인하는 방법이 있습니다. 나는 그들이 제대로 초기화되었는지 확신 할 수 없다면 이것을 시도 할 수 있다고 생각합니다. 그리고 텍스쳐를 수정하는 것 - 확실히 쉽지는 않을 것이며, 아마 2D가 아닌 3D 툴이 필요할 것입니다. –

+0

제 제안 중 하나가 효과가 있습니까? 나에게 알려줘. –