Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Shader con GLSL
Forum - C/C++ - Shader con GLSL

Avatar
ivan_j_147 (Normal User)
Newbie


Messaggi: 3
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 16:41
Martedì, 03/01/2012
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 il 03/01/2012 alle 16:46
PM