2012-11-06 11 views
6

Sto appena iniziando ad imparare OpenGL. Con tutte le esercitazioni che ho visto, dimostrano di usare uno shader di frammenti per impostare il colore di tutti gli oggetti in vista. Quello che non ho ancora trovato è come useresti uno shader di frammenti su uno solo degli oggetti, dando diversi oggetti a diversi colori. Come si fa a farlo?Come applicare uno shader di frammenti a un solo oggetto in OpenGL?

Per fornire uno sfondo alla domanda, sto disegnando una scena semplice con una casa e una strada in 2d. Ho scoperto come impostare i colori di ciascuno dei miei oggetti (il corpo principale della casa, la finestra, ecc.) Usando la pipeline grafica fissa, semplicemente non capisco come impostare i colori usando i framment shader.

Qualsiasi chiarimento sarebbe molto apprezzato, compresa la correzione se sto fraintendendo qualcosa.

+0

Fai un colore uniforme e cambiare l'uniforme prima di disegnare un nuovo oggetto con lo shader. –

risposta

3

Per fornire uno sfondo alla domanda, sto disegnando una scena semplice con una casa e una strada in 2d. Ho scoperto come impostare i colori di ciascuno dei miei oggetti (il corpo principale della casa, la finestra, ecc.) Usando la pipeline grafica fissa, semplicemente non capisco come impostare i colori usando i framment shader.

As RobertRouhani said, rendere il colore uniforme e modificarlo per ciascun oggetto.


Come applicare uno shader frammento di un solo oggetto in OpenGL?

È possibile modificare semplicemente il programma shader con glUseProgram e eseguire il rendering delle chiamate dopo l'utilizzo del diverso shader.

vedere questo: https://gamedev.stackexchange.com/questions/22216/using-multiple-shaders

3

Prima di disegnare un oggetto con glDrawArrays o glDrawElements, passare il colore a uno shader come variabile.

http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml

Esempio frammento GLSL Shader:

uniform vec4 u_color; 

void main(void) 
{ 
    gl_FragColor = u_color; 
} 

vorrei espandere su questa risposta, ma sto essere pigro. Spero che aiuti un po '. Ci sono molti tutorial online, basta cercare glsl, glUniform4f, ecc.

Problemi correlati