2012-08-18 2 views
0

이미 0도, 90도, 180도, 270도회전 포인트 스프라이트

조각 쉐이더

precision lowp float; 

uniform sampler2D us_tex; 
uniform mat3 um_tex; 

void main() 
{ 
    vec2 tex_coords = (um_tex * vec3(gl_PointCoord, 1.0)).xy; 
    gl_FragColor = texture2D(us_tex, tex_coords); 
} 

2 * 2 매트릭스 연산 (내가 GLM에 대해 알고에 포인트 스프라이트를 회전시킬 수 있습니다 - 그것은 좋아요, 학술 목적

m3 r; 
rot_m3(r, 90.0f); 
... 
glUniformMatrix3fv(/*um_tex uniform*/, 1, GL_FALSE, res); 
glDrawArrays(GL_POINTS, 0, /*particles count*/); 
... 
,369) (ParticlesDraw에 자신의 매트릭스)

typedef GLfloat m3[9]//3*3 matrix 

#define DEG_TO_RAD(x) (x * M_PI/180.0f) 

void ident_m3(m3 res) 
{ 
memset(res, 0, sizeof(m3)); 
res[0] = res[4] = res[8] = 1.0f; 
} 

void trans_m3(m3 res, const p2* pos) 
{ 
ident_m3(res); 
res[7] = pos->x; 
res[8] = pos->y; 
} 

void mult_m3(m3 res, const m3 m1, const m3 m2) 
{ 
res[0] = m1[0] * m2[0] + m1[3] * m2[1] + m1[6] * m2[2]; 
res[1] = m1[1] * m2[0] + m1[4] * m2[1] + m1[7] * m2[2]; 
res[2] = m1[2] * m2[0] + m1[5] * m2[1] + m1[8] * m2[2]; 

res[3] = m1[0] * m2[3] + m1[3] * m2[4] + m1[6] * m2[5]; 
res[4] = m1[1] * m2[3] + m1[4] * m2[4] + m1[7] * m2[5]; 
res[5] = m1[2] * m2[3] + m1[5] * m2[4] + m1[8] * m2[5]; 

res[6] = m1[0] * m2[6] + m1[3] * m2[7] + m1[6] * m2[8]; 
res[7] = m1[1] * m2[6] + m1[4] * m2[7] + m1[7] * m2[8]; 
res[8] = m1[2] * m2[6] + m1[5] * m2[7] + m1[8] * m2[8]; 
} 

을 처리하는 1,363,210

또한 전 (X POS 번역 POS (-x, -y, -z)

  • 회전
  • 번역 POS 주위에 회전 할 통상 스프라이트 (X, Y, Z)

    1. 알고 , y, z)

    결과 행렬 = (행렬 행렬 * 행열 행렬) * Anti-Traslate 행렬.

    내가 45 포인트 스프라이트를 회전하려면, 32,64,72 예를 들어, 어느 정도 (지금은 회전하지, 마지막 프레임 45 ° 오른쪽) problem

    그러나이 경우 , 난의 중심에 번역 할 수 있습니다 tex (0.5, 0.5), 그러나 anti-translate는 무엇이 될까요? - (0.0, 0.0)?
    나는 이런 식으로 시도해 보았지만, 예를 들어 30 회전, 45 회전, 내 텍스처가 64 * 64 인 경우에도 작동하지 않습니다. 회전을 위해 gl_PointSize를 64.0으로 설정해야합니까?

  • 답변

    2

    이 :

    1. 는 POS (X, Y, Z)

    아닌가요 번역 POS (-x, -y, -z)

  • 회전
  • 번역 이것과 같은 것 :

    Result Matrix = (Rot Matrix * Translate Matrix) * Anti-Traslate Matrix.

    점 (x, y, z) 주위를 회전하려면 다음을 수행해야합니다.

    1. 행렬 T1 = Translate (x, y, z);
    2. 매트릭스 R1 = 회전();
    3. 매트릭스 T2 = 변환 (-x, -y, -z);

      Result Matrix = T1 * R1 * T2

      : 같은 일이다

  • 관련 문제