2015-01-21 4 views
6

버텍스 쉐이더와 매트릭스 변환 대신 프래그먼트 셰이더에서 텍스처를 회전하려고합니다.GLSL ES의 조각 쉐이더에서 텍스처 회전하기

회전에는 중심점이 있습니다.

사각형 모양의 사각형에서 렌더링 할 때 알고리즘이 잘 작동하지만 쿼드가 사각형 모양 인 경우 렌더링 결과가 엉망이됩니다. 누구든지 문제를 발견 할 수 있습니까?

감사합니다

나 자신을 그것을 밖으로 시도하지 않은,하지만 내 생각 엔 당신이 텍스처를 사용하고 있기 때문에하는 것은, 그것을 해결하기 위해 몇 가지 요소없이 회전에 따라 왜곡의 원인이됩니다 직사각형 공간 좌표 점이다
varying vec2 v_texcoord; 
    uniform sampler2D u_texture; 
    uniform float u_angle; 

    void main() 
    { 
     vec2 coord = v_texcoord; 
     float sin_factor = sin(u_angle); 
     float cos_factor = cos(u_angle); 
     coord = (coord - 0.5) * mat2(cos_factor, sin_factor, -sin_factor, cos_factor); 
     coord += 0.5; 

     gl_FragColor = texture2D(u_texture, coord); 
    } 
+0

! 해결 되었습니까? – Samsy

+0

셰이더 밖에서 회전하는 행렬을 구축하여이 작업을 수행했습니다. http://stackoverflow.com/questions/31417365/how-to-rotate-a-texture-in-a-shader-android 매트릭스 구성 요소를 파악하는 데 도움이되는 http://www.songho.ca/opengl/gl_projectionmatrix.html – HPP

답변

-1

그것.

질감의 너비와 높이를 선언하는 유니폼을 전달해야합니다. 이를 통해 화면 비율을 적용하여 왜곡을 보정 할 수 있습니다. 그래도 난 말했듯이

coord = vec2(coord.x - (0.5 * Resolution.x/Resolution.y), coord.y - 0.5) * mat2(cos_factor, sin_factor, -sin_factor, cos_factor); 

, 나는 그것을 시도하지 않은,하지만 난이 비슷한 쉐이더 과거에이 작업을 수행해야했다 :

coord = (coord - 0.5) * mat2(cos_factor, sin_factor, -sin_factor, cos_factor); 

뭔가처럼 될 수 있습니다. Resolution.x/Resolution.y를 뒤집을 필요가 있습니다.

2

질문에 제공 한 코드의 다음 줄 :

coord = vec2(coord.x - (0.5 * Resolution.x/Resolution.y), coord.y - 0.5) * mat2(cos_factor, sin_factor, -sin_factor, cos_factor); 

은 매우 옳지 않다. 브라켓 팅 오류가 있습니다.

올바른 버전은 다음과 같습니다 나도 그것을 찾고 있어요

coord = vec2((coord.x - 0.5) * (Resolution.x/Resolution.y), coord.y - 0.5) * mat2(cos_factor, sin_factor, -sin_factor, cos_factor); 
+0

이것은 저에게 큰 도움이되었습니다. 감사합니다! – Hobbes

관련 문제