Пример #1
0
    def setCommonUniforms(self, shader, view, modelToWorldTransform):
        # Concatenate the transformations to take vertices directly from model space to clip space
        modelToClipTransform = view.viewToClipTransform * view.worldToViewTransform * modelToWorldTransform
        # Transform to view space from model space (used for the shading)
        modelToViewTransform = view.worldToViewTransform * modelToWorldTransform
        # Transform to view space for normals, need to use the inverse transpose unless only rigid body & uniform scale.
        modelToViewNormalTransform = lu.inverse(
            lu.transpose(lu.Mat3(modelToViewTransform)))

        # Set the standard transforms, these vary per object and must be set each time an object is drawn (since they have different modelToWorld transforms)
        lu.setUniform(shader, "modelToClipTransform", modelToClipTransform)
        lu.setUniform(shader, "modelToViewTransform", modelToViewTransform)
        lu.setUniform(shader, "modelToViewNormalTransform",
                      modelToViewNormalTransform)

        # These transforms are the same for the current view and could be set once for all the objects
        lu.setUniform(shader, "worldToViewTransform",
                      view.worldToViewTransform)
        lu.setUniform(shader, "viewToClipTransform", view.viewToClipTransform)
        # Lighting parameters as could these
        viewSpaceLightPosition = lu.transformPoint(view.worldToViewTransform,
                                                   g_sunPosition)
        lu.setUniform(shader, "viewSpaceLightPosition", viewSpaceLightPosition)
        lu.setUniform(shader, "globalAmbientLight", g_globalAmbientLight)
        lu.setUniform(shader, "sunLightColour", g_sunLightColour)
        lu.bindTexture(g_TU_shadow, g_shadowTexId)
        lu.setUniform(shader, "shadowMapTexture", g_shadowTexId)
Пример #2
0
    def render(self, view, renderingSystem):
        glUseProgram(self.shader)
        renderingSystem.setCommonUniforms(self.shader, view, lu.Mat4())

        lu.setUniform(self.shader, "terrainHeightScale", self.heightScale)
        lu.setUniform(self.shader, "terrainTextureXyScale",
                      self.textureXyScale)
        xyNormScale = 1.0 / (vec2(self.imageWidth, self.imageHeight) *
                             self.xyScale)
        lu.setUniform(self.shader, "xyNormScale", xyNormScale)
        xyOffset = -(vec2(self.imageWidth, self.imageHeight) +
                     vec2(1.0)) * self.xyScale / 2.0
        lu.setUniform(self.shader, "xyOffset", xyOffset)

        #TODO 1.4: Bind the grass texture to the right texture unit, hint: lu.bindTexture
        loc = glGetUniformLocation(self.shader, "someTexture")
        glUniform1i(loc, 0)
        lu.bindTexture(loc, glGenTextures(1))

        if self.renderWireFrame:
            glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
            glLineWidth(1.0)
        glBindVertexArray(self.vertexArrayObject)
        glDrawElements(GL_TRIANGLES, len(self.terrainInds), GL_UNSIGNED_INT,
                       None)

        if self.renderWireFrame:
            glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
        glBindVertexArray(0)
        glUseProgram(0)
Пример #3
0
    def render(self, view, renderingSystem):
        glUseProgram(self.shader)
        renderingSystem.setCommonUniforms(self.shader, view, lu.Mat4())

        lu.setUniform(self.shader, "terrainHeightScale", self.heightScale)
        lu.setUniform(self.shader, "terrainTextureXyScale",
                      self.textureXyScale)
        xyNormScale = 1.0 / (vec2(self.imageWidth, self.imageHeight) *
                             self.xyScale)
        lu.setUniform(self.shader, "xyNormScale", xyNormScale)
        xyOffset = -(vec2(self.imageWidth, self.imageHeight) +
                     vec2(1.0)) * self.xyScale / 2.0
        lu.setUniform(self.shader, "xyOffset", xyOffset)

        #TODO 1.4: Bind the grass texture to the right texture unit, hint: lu.bindTexture
        lu.bindTexture(self.TU_Grass, self.grassTexture)
        lu.setUniform(self.shader, "grassTexture", self.TU_Grass)

        # 2.1
        # High
        lu.bindTexture(self.TU_High, self.highTexture)
        lu.setUniform(self.shader, "highTexture", self.TU_High)
        # Steep
        lu.bindTexture(self.TU_Steep, self.steepTexture)
        lu.setUniform(self.shader, "steepTexture", self.TU_Steep)
        # Road
        lu.bindTexture(self.TU_Road, self.roadTexture)
        lu.bindTexture(self.TU_Map, self.mapTexture)
        lu.setUniform(self.shader, "roadTexture", self.TU_Road)
        lu.setUniform(self.shader, "mapTexture", self.TU_Map)

        if self.renderWireFrame:
            glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
            glLineWidth(1.0)
        glBindVertexArray(self.vertexArrayObject)
        glDrawElements(GL_TRIANGLES, len(self.terrainInds), GL_UNSIGNED_INT,
                       None)

        if self.renderWireFrame:
            glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
        glBindVertexArray(0)
        glUseProgram(0)
Пример #4
0
    def render(self, view, renderingSystem, depthMap):
        glUseProgram(self.shader)
        renderingSystem.setCommonUniforms(self.shader, view, lu.Mat4())

        lu.setUniform(self.shader, "terrainHeightScale", self.heightScale)
        lu.setUniform(self.shader, "terrainTextureXyScale",
                      self.textureXyScale)
        xyNormScale = 1.0 / (vec2(self.imageWidth, self.imageHeight) *
                             self.xyScale)
        lu.setUniform(self.shader, "xyNormScale", xyNormScale)
        xyOffset = -(vec2(self.imageWidth, self.imageHeight) + vec2(1.0)) / 2.0
        lu.setUniform(self.shader, "xyOffset", xyOffset)
        lu.setUniform(self.shader, "lightPOVTransform", view.depthMVPTransform)
        #depthTexture binding for use in terrain frag shader
        #lu.bindTexture(shadow.TU_depthTexture, depthMap)
        #lu.setUniform(self.shader, "shadowMapTexture", shadow.TU_depthTexture)
        #FINISH HERE
        #TODO 1.4: Bind the grass texture to the right texture unit, hint: lu.bindTexture
        lu.bindTexture(self.TU_Grass, self.terrainTexId)
        lu.bindTexture(self.TU_high, self.highTexId)
        lu.bindTexture(self.TU_road, self.roadTexId)
        lu.bindTexture(self.TU_steep, self.steepTexId)
        lu.bindTexture(self.TU_map, self.terrainDataSampleTexId)
        #bind specs
        lu.bindTexture(self.TU_spec_grass, self.specGrassTexId)
        lu.bindTexture(self.TU_spec_high, self.specHighTexId)
        lu.bindTexture(self.TU_spec_road, self.specRoadTexId)
        lu.bindTexture(self.TU_spec_steep, self.specSteepTexId)
        #set uniform specs
        lu.setUniform(self.shader, "specularGrassTexture", self.TU_spec_grass)
        lu.setUniform(self.shader, "specularHighTexture", self.TU_spec_high)
        lu.setUniform(self.shader, "specularRoadTexture", self.TU_spec_road)
        lu.setUniform(self.shader, "specularSteepTexture", self.TU_spec_steep)
        #
        lu.setUniform(self.shader, "terrainTexture", self.TU_Grass)
        lu.setUniform(self.shader, "highTexture", self.TU_high)
        lu.setUniform(self.shader, "roadTexture", self.TU_road)
        lu.setUniform(self.shader, "steepTexture", self.TU_steep)
        lu.setUniform(self.shader, "terrainDataSample", self.TU_map)

        if self.renderWireFrame:
            glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
            glLineWidth(1.0)
        glBindVertexArray(self.vertexArrayObject)
        glDrawElements(GL_TRIANGLES, len(self.terrainInds), GL_UNSIGNED_INT,
                       None)

        if self.renderWireFrame:
            glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
        glBindVertexArray(0)
        glUseProgram(0)