vertex shader
#version 330
uniform mat4 M;
uniform mat4 V;
uniform mat4 P;
in vec4 vertex; //wspolrzedne wierzcholka w przestrzeni modelu
void main(void)
{
gl_Position=M*V*P*vertex; //oblicz wspolrzedne wierzcholka w przestrzeni przyciecia
}
fragment shader
#version 330
out vec4 pixelColor; //Zmienna wyjsciowa fragment shadera. Zapisuje sie do niej ostateczny (prawie) kolor piksela
void main(void)
{
pixelColor=vec4(1,0,0,0);
}
fragment kodu odpowiedzialny za rysowanie
void drawObject(GLuint vao, ShaderProgram *shaderProgram, mat4 mP, mat4 mV, mat4 mM) {
//Włączenie programu cieniującego, który ma zostać użyty do rysowania
//W tym programie wystarczyłoby wywołać to raz, w setupShaders, ale chodzi o pokazanie,
//że mozna zmieniać program cieniujący podczas rysowania jednej sceny
shaderProgram->use();
//Przekaż do shadera macierze P,V i M.
//W linijkach poniżej, polecenie:
// shaderProgram->getUniformLocation("P")
//pobiera numer slotu odpowiadającego zmiennej jednorodnej o podanej nazwie
//UWAGA! "P" w powyższym poleceniu odpowiada deklaracji "uniform mat4 P;" w vertex shaderze,
//a mP w glm::value_ptr(mP) odpowiada argumentowi "mat4 mP;" TYM pliku.
//Cała poniższa linijka przekazuje do zmiennej jednorodnej P w vertex shaderze dane z argumentu mP niniejszej funkcji
//Pozostałe polecenia działają podobnie.
glUniformMatrix4fv(shaderProgram->getUniformLocation("P"),1, false, glm::value_ptr(mP));
glUniformMatrix4fv(shaderProgram->getUniformLocation("V"),1, false, glm::value_ptr(mV));
glUniformMatrix4fv(shaderProgram->getUniformLocation("M"),1, false, glm::value_ptr(mM));
//glUniform4f(shaderProgram->getUniformLocation("lightPos0"), 0,0,-5,1); //Przekazanie współrzędnych źródła światła do zmiennej jednorodnej lightPos0
//Uaktywnienie VAO i tym samym uaktywnienie predefiniowanych w tym VAO powiązań slotów atrybutów z tablicami z danymi
glBindVertexArray(vao);
//Narysowanie obiektu
glDrawArrays(GL_TRIANGLES,0,vertexCount);
//Posprzątanie po sobie (niekonieczne w sumie jeżeli korzystamy z VAO dla każdego rysowanego obiektu)
glBindVertexArray(0);
}
Dopiero zaczynam zabawe w OpenGLu z shaderami. Przed chwilą pobrałem ze strony dość skomplikowany shader którego nie rozumiem, ale który działał. Uprościłem go sobie. Chciałbym sobie napisać jak najprostszy shader (flatten shader) który tylko przemnaża wierzcholki przez macierz MVP i ustala na sztywno ich kolor. Niestety to co tu napisałem mi nie działa. Dlaczego tak może być?