2013-03-30 5 views
0

나는 내가 분명히 잘못한 것을 알고있다. 어쨌든 나는 애니메이션을 만들기 위해 텍스처를 얻으려는 코드를 작성했는데, 무엇이 잘못되었거나 잘못했는지를 정말로 확신하지 못했습니다. 여기 질감이 움직이지 않는다

내 텍스처를로드하는 코드입니다 :

if(PVRTTextureLoadFromPVR(c_szTextureFile, &m_uiTexture[0]) != PVR_SUCCESS) 
    { 
     PVRShellSet(prefExitMessage, "ERROR: Cannot load the texture\n"); 
     return false; 
    } 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 


    //This loads in the second texture 
    if(PVRTTextureLoadFromPVR(c_szTextureFile2, &m_uiTexture[1]) != PVR_SUCCESS) 
    { 
     PVRShellSet(prefExitMessage, "ERROR: Cannot load the texture2\n"); 
     return false; 
    } 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

을 여기에 질감이 여기

int time_Loc = glGetUniformLocation(m_ShaderProgram.uiId, "Time"); //This stores the location of the uniform 
float updateTexture; 
float timeElapsed = difftime(time(NULL), Timer) * 1000; 
if(timeElapsed > 16.0f) 
{ 
    glUniform1f(time_Loc, updateTexture++); // passes the updated value to shader 
} 

을 조정하고 업데이트하려고 시도 내 타이머 기능 것은 내가 통과하고 내 쉐이더입니다 데이터를

uniform sampler2D sTexture; 

uniform sampler2D sTexture2;

가변 배지 vec2 TexCoord; 다양한 배지 vec2 TexCoord2;

//This gets updated within the main code 
uniform highp float Time; 

void main() 
{ 
    mediump vec4 tex1 = texture2D(sTexture, TexCoord + Time); 
    mediump vec4 tex2 = texture2D(sTexture2, TexCoord2 + Time); 

    gl_FragColor = tex2 * tex1; 
} 
+0

왜 이런 짓을 했을까? 'gl_FragColor = tex2 * tex1; '그리고 왜 안되지? 'gl_FragColor = 0.5 * tex2 + 0.5 * tex1; ' – DanP

+0

죄송합니다. Dan 2.0은 ES 2.0을 처음 접했을뿐입니다. 당신이 알고있는 것을 구현할 것입니다. – DorkMonstuh

+0

아니, 넌 틀리지 않아. 단지 vec4 * vec가 0.5 * vec4 + 0.5 * vec4와 다릅니다. 첫 번째는 색상 마스킹에 유용하고 두 번째는 두 개의 텍스처를 혼합하기위한 것입니다. 올바른 것은 성취하고자하는 바에 달려 있습니다. :) Btw, 텍스처를 바꾸어서 애니메이션을 사용하고 싶다면'uniform int u_mode;를 사용하는 것이 더 쉽지 않을까요? 그렇다면'if (u_mode == 0) gl_FragColor = tex1; else gl_FragColor = tex2;'? – DanP

답변

0

texture2D의 두 번째 매개 변수는 0 -> 1에서 잘립니다. 절대 또는 픽셀이 아닙니다. TexCoord를 가지고 있는데, (0-> 1, 0-> 1) 범위에 있다고 가정합니다. 그런 다음 updateTexture ++를 통해 C 코드에서 증가하는 float 값을 "추가"합니다. 그것도 초기화되지 않습니다!

이와 비슷한 더 많은 것을보십시오 :

셰이더에서 다음
float updateTexture = 0.0f; 
    ... 
    if(timeElapsed > 16.0f) 
    { 
    updateTexture += 0.01; // arbitrary increment 
    if(updateTexture > 1.0) updateTexture = 0.0f; // wrap, if you want 
    glUniform1f(time_Loc, updateTexture); // passes the updated value to shader 
    } 

이 VEC2에 float를 추가하는 것보다 더 명시 적으로 뭔가를 할 :

... 
    mediump vec4 tex1 = texture2D(sTexture, vec2(TexCoord.x + Time, TexCoord.y + Time)); 
    ... 
+0

안녕하세요, 도와 주셔서 감사합니다. 당신이 말한대로 수행했는데, 내 감촉을 움직이지 않는 것 같아요, 그것은 단지 색만 변하는 것 같습니다. ? 필요한 경우 더 많은 코드를 제공 할 수 있습니다. – DorkMonstuh

관련 문제