Oppure

Loading
03/01/12 15:41
ivan_j_147
Ciao a tutti!
Qualche giorno fa ho cominciato a studiare l'argomento shader con openGL, e sto cercando ora di sviluppare un piccolo shader GLSL da applicare ad un programmino scritto in ambiente Visual C++ 2010.
Il concetto è facile, disegno una nave, che sposto pian piano mediante shader.
Il problema che il tutto non funziona!
Vi mostro il codice del vertex shader:

uniform float time;

void main(void)
{
    vec4 vertex = vec4(gl_Vertex);
    vertex.y=vertex.y+float(time);
    gl_Position = gl_ModelViewProjectionMatrix * vertex;
}



Questo è quello del pixel shader:


void main (void)
{
    gl_FragColor = vec4(1.0,0.0,0.0,0.0);
}

Infine, questo è quello che faccio nel mio programma:

GLuint v,f;
GLuint ShaderSettMancato;
float tempoShader;
GLint loc1;

//nella init del programma
caricaShader(strcat(Pat,"\Shaders\SettorePreso.vert";),
strcat(Pat2,"\Shaders\SettorePreso.frag";),ShaderSettMancato);
loc1=glGetUniformLocation(ShaderSettMancato,"time";);

void caricaShader(char *fnVert, char *fnFrag, GLuint &ShaderID)
{char *vs,*fs;
f = glCreateShader(GL_FRAGMENT_SHADER);
v = glCreateShader(GL_VERTEX_SHADER);
vs = textFileRead(fnVert);
fs = textFileRead(fnFrag);
const char * vv = vs;
const char * ff = fs;
glShaderSource(v, 1, &vv, NULL);
glShaderSource(f, 1, &ff, NULL);
free(vs);free(fs);
glCompileShader(v);
glCompileShader(f);
ShaderID = glCreateProgram();
glAttachShader(ShaderID,v);
glAttachShader(ShaderID,f);
glLinkProgram(ShaderID);
}

//procedura di aggiornamento della scena
void AggiornaScena(int val)
{GestioneGioco();
tempoShader=float(tempoShader+1);
glUniform1f(loc1,tempoShader);
glutPostRedisplay();
glutTimerFunc(20,AggiornaScena,0);

//... frammento della procedura Display...
glUseProgram(ShaderSettMancato);
NodoNave.Disegna();
glUseProgram(0);
}


Chiedo scusa se non mi sono spiegato benissimo... qualcuno è in grado di dirmi in cosa sbaglio? grazie 1000!
Ultima modifica effettuata da HeDo 03/01/12 15:46
aaa