//---------------------------------------------------------------------------------------------------------------------- void grassHair::createShader(){ //create our shader program m_shaderProgram = new ShaderProgram(); Shader *vert = new Shader("shaders/grassHairVert.glsl", GL_VERTEX_SHADER); Shader *geom = new Shader("shaders/grassHairGeom.glsl", GL_GEOMETRY_SHADER); Shader *frag = new Shader("shaders/grassHairFrag.glsl", GL_FRAGMENT_SHADER); //attach and link our shaders to our program m_shaderProgram->attachShader(vert); m_shaderProgram->attachShader(geom); m_shaderProgram->attachShader(frag); m_shaderProgram->link(); m_shaderProgram->use(); //get rid of the junk delete vert; delete geom; delete frag; glEnable(GL_DEPTH_TEST); // for removal of hidden surfaces //set up our light GLuint lightPosGrassLoc = m_shaderProgram->getUniformLoc("light.position"); GLuint lightIntGrassLoc = m_shaderProgram->getUniformLoc("light.intensity"); GLuint kdGrassLoc = m_shaderProgram->getUniformLoc("Kd"); GLuint kaGrassLoc = m_shaderProgram->getUniformLoc("Ka"); GLuint ksGrassLoc = m_shaderProgram->getUniformLoc("Ks"); GLuint shininessGrassLoc = m_shaderProgram->getUniformLoc("shininess"); glm::vec4 lightPositon(1.0, 1.0, 1.0, 1.0); glm::vec3 lightIntensity(0.8, 0.8, 0.8); glUniform4f(lightPosGrassLoc, lightPositon.x, lightPositon.y, lightPositon.z, lightPositon.w); glUniform3f(lightIntGrassLoc, lightIntensity.x, lightIntensity.y, lightIntensity.z); glUniform3f(kdGrassLoc, 0.5, 0.5, 0.5); glUniform3f(kaGrassLoc, 0.5, 0.5, 0.5); glUniform3f(ksGrassLoc, 0.5, 0.5, 0.5); glUniform1f(shininessGrassLoc, 100.0); //set our grass size GLuint grassSizeLoc = m_shaderProgram->getUniformLoc("grassSize"); glUniform1f(grassSizeLoc,m_grassSize); //set up our grass texture m_grassTexture = new Texture("textures/grassBlade.png"); m_grassTexture->bind(10); GLuint grassBladeTexLoc = m_shaderProgram->getUniformLoc("grassTexture"); glUniform1i(grassBladeTexLoc, 10); }
//---------------------------------------------------------------------------------------------------------------------- void grassHairClipmap::createShader(){ //create our shader program m_shaderProgram = new ShaderProgram(); Shader *vert = new Shader("shaders/grassHairClipmapVert.glsl", GL_VERTEX_SHADER); Shader *geom = new Shader("shaders/grassHairClipmapGeom.glsl", GL_GEOMETRY_SHADER); Shader *frag = new Shader("shaders/grassHairClipmapFrag.glsl", GL_FRAGMENT_SHADER); //attach and link our shaders to our program m_shaderProgram->attachShader(vert); m_shaderProgram->attachShader(geom); m_shaderProgram->attachShader(frag); m_shaderProgram->link(); m_shaderProgram->use(); //get rid of the junk delete vert; delete geom; delete frag; glEnable(GL_DEPTH_TEST); // for removal of hidden surfaces //set up our light GLuint lightPosGrassLoc = m_shaderProgram->getUniformLoc("light.position"); GLuint lightIntGrassLoc = m_shaderProgram->getUniformLoc("light.intensity"); GLuint kdGrassLoc = m_shaderProgram->getUniformLoc("Kd"); GLuint kaGrassLoc = m_shaderProgram->getUniformLoc("Ka"); GLuint ksGrassLoc = m_shaderProgram->getUniformLoc("Ks"); GLuint shininessGrassLoc = m_shaderProgram->getUniformLoc("shininess"); glm::vec4 lightPositon(1.0, 1.0, 1.0, 1.0); glm::vec3 lightIntensity(0.8, 0.8, 0.8); glUniform4f(lightPosGrassLoc, lightPositon.x, lightPositon.y, lightPositon.z, lightPositon.w); glUniform3f(lightIntGrassLoc, lightIntensity.x, lightIntensity.y, lightIntensity.z); glUniform3f(kdGrassLoc, 0.5, 0.5, 0.5); glUniform3f(kaGrassLoc, 0.5, 0.5, 0.5); glUniform3f(ksGrassLoc, 0.5, 0.5, 0.5); glUniform1f(shininessGrassLoc, 100.0); //set our grass size GLuint grassSizeLoc = m_shaderProgram->getUniformLoc("grassSize"); GLuint grassHeightLoc = m_shaderProgram->getUniformLoc("grassHeight"); GLuint heightMapLoc = m_shaderProgram->getUniformLoc("geoTexture"); GLuint heightScaleLoc = m_shaderProgram->getUniformLoc("heightScale"); m_timeLoc = m_shaderProgram->getUniformLoc("time"); GLuint windDirLoc = m_shaderProgram->getUniformLoc("windDir"); GLuint windStrengthLoc = m_shaderProgram->getUniformLoc("windStrength"); GLuint scaleLoc = m_shaderProgram->getUniformLoc("scale"); glUniform1f(heightScaleLoc,4); glUniform4f(scaleLoc, 2, 2, 2, 1.0); glUniform1f(windStrengthLoc,0.01); glUniform3f(windDirLoc,1.0,0.0,0.0); glUniform1f(m_timeLoc,clock()/CLOCKS_PER_SEC); glUniform1f(grassHeightLoc,m_grassHeight); glUniform1f(grassSizeLoc,m_grassSize); //set up our grass texture m_grassTexture = new Texture("textures/grassBlade.png"); m_grassTexture->bind(10); GLuint grassBladeTexLoc = m_shaderProgram->getUniformLoc("grassTexture"); glUniform1i(grassBladeTexLoc, 10); m_heightmapTex->bind(2); glUniform1i(heightMapLoc,2); // fog uniforms GLuint fogMaxLoc = m_shaderProgram->getUniformLoc("fogMax"); GLuint fogMinLoc = m_shaderProgram->getUniformLoc("fogMin"); glUniform1f(fogMaxLoc, 4.0); glUniform1f(fogMinLoc, 3.0); }