def loadShader(self):
     self.shader = Shader()
     self.shader.initShaderFromGLSL(["glsl/tu02/vertex.glsl"],
                                    ["glsl/tu02/fragment.glsl"])
     self.MVP_ID = glGetUniformLocation(self.shader.program, "MVP")
     self.OFFSET_ID = glGetUniformLocation(self.shader.program, "OFFSET")
     self.Texture_ID = glGetUniformLocation(self.shader.program,
                                            "myTextureSampler")
Пример #2
0
 def loadShader(self):
     self.shader = Shader()
     self.shader.initShaderFromGLSL(
         ["glsl/tu09/TextVertexShader.vertexshader.glsl"],
         ["glsl/tu09/TextVertexShader.fragmentshader.glsl"])
     self.HALFSCREENSIZE_ID = glGetUniformLocation(self.shader.program,
                                                   "HALFSCREENSIZE")
     self.Texture_ID = glGetUniformLocation(self.shader.program,
                                            "myTextureSampler")
 def loadShader(self):
     self.shader = Shader()
     self.shader.initShaderFromGLSL(
         ["glsl/tu07/StandardShading.vertexshader.glsl"], ["glsl/tu07/StandardShading.fragmentshader.glsl"])
     self.MVP_ID = glGetUniformLocation(self.shader.program, "MVP")
     self.ModelMatrix_ID = glGetUniformLocation(self.shader.program, "M")
     self.ViewMatrix_ID = glGetUniformLocation(self.shader.program, "V")
     self.Texture_ID =  glGetUniformLocation(self.shader.program, "myTextureSampler")
     self.Light_ID =  glGetUniformLocation(self.shader.program, "LightPosition_worldspace")
     self.OFFSET_ID = glGetUniformLocation(self.shader.program, "LOCATION_OFFSET")
Пример #4
0
    def init_context(self):
        self.context = self.GLContext()

        self.shader = shader = Shader()
        shader.initShaderFromGLSL(["glsl/tu02/vertex.glsl"],
                                  ["glsl/tu02/fragment.glsl"])

        self.context.MVP_ID = glGetUniformLocation(shader.program, "MVP")
        self.context.TextureID = glGetUniformLocation(shader.program,
                                                      "myTextureSampler")

        texture = textureLoader("resources/tu03/uvmap.dds")
        #texture = textureLoader("opengl_tutorial/models/tu02/uvtemplate.dds")

        self.context.textureGLID = texture.textureGLID

        model = objLoader("resources/tu03/cube.obj").to_array_style()
        self.context.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.context.vertexbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(model.vertexs) * 4,
                     (GLfloat * len(model.vertexs))(*model.vertexs),
                     GL_STATIC_DRAW)

        if (texture.inversedVCoords):
            for index in range(0, len(model.texcoords)):
                if (index % 2):
                    model.texcoords[index] = 1.0 - model.texcoords[index]

        self.context.uvbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.context.uvbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(model.texcoords) * 4,
                     (GLfloat * len(model.texcoords))(*model.texcoords),
                     GL_STATIC_DRAW)
Пример #5
0
    def loadShader(self):
        self.shader = Shader()
        self.shader.initShaderFromGLSL(
            ["glsl/tu10/NormalMapping.vertexshader.glsl"],
            ["glsl/tu10/NormalMapping.fragmentshader.glsl"])

        self.MatrixID = glGetUniformLocation(self.shader.program, "MVP")
        self.ViewMatrixID = glGetUniformLocation(self.shader.program, "V")
        self.ModelMatrixID = glGetUniformLocation(self.shader.program, "M")
        self.ModelView3x3MatrixID = glGetUniformLocation(
            self.shader.program, "MV3x3")
        self.DiffuseTextureID = glGetUniformLocation(self.shader.program,
                                                     "DiffuseTextureSampler")
        self.NormalTextureID = glGetUniformLocation(self.shader.program,
                                                    "NormalTextureSampler")
        self.SpecularTextureID = glGetUniformLocation(
            self.shader.program, "SpecularTextureSampler")
        self.LightID = glGetUniformLocation(self.shader.program,
                                            "LightPosition_worldspace")
Пример #6
0
    def init_context(self):
        self.context = self.GLContext()

        self.shader = shader = Shader()

        self.UV2d = UV2D()
        shader.initShaderFromGLSL(["glsl/tu02/vertex.glsl"],
                                  ["glsl/tu02/fragment.glsl"])
        # shader var ids
        self.context.MVP_ID = glGetUniformLocation(shader.program, "MVP")
        self.context.Texture_ID = glGetUniformLocation(shader.program,
                                                       "myTextureSampler")

        # texture = textureLoader("resources/tu03/uvmap.dds")
        # model = objLoader("resources/tu03/cube.obj").to_single_index_style()
        texture = textureLoader("resources/tu04/uvmap.dds")
        model = objLoader("resources/tu04/suzanne.obj").to_single_index_style()
        self.context.texturebuffer = texture.textureGLID
        if (texture.inversedVCoords):
            for index in range(0, len(model.texcoords)):
                if (index % 2):
                    model.texcoords[index] = 1.0 - model.texcoords[index]

        #print "ccc",len(model.texcoords)
        self.context.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.context.vertexbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.vertexs) * 4,
                     (GLfloat * len(model.vertexs))(*model.vertexs),
                     GL_STATIC_DRAW)

        self.context.uvbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.context.uvbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.texcoords) * 4,
                     (GLfloat * len(model.texcoords))(*model.texcoords),
                     GL_STATIC_DRAW)

        self.context.elementbuffer = glGenBuffers(1)
        self.context.elementbufferSize = len(model.indices)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.context.elementbuffer)

        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.indices) * 2,
                     (GLushort * len(model.indices))(*model.indices),
                     GL_STATIC_DRAW)

        self.UV2d.bindUV(self.context.uvbuffer, self.context.elementbuffer,
                         self.context.elementbufferSize)
class meshFromArray(meshWithRender):
    def __init__(self, vertex_array, color_array):
        self.vertex_data = vertex_array
        self.color_data = color_array

    def loadShader(self):
        self.shader = Shader()
        self.shader.initShaderFromGLSL(["glsl/tu01/vertex.glsl"],
                                       ["glsl/tu01/fragment.glsl"])
        self.MVP_ID = glGetUniformLocation(self.shader.program, "MVP")

    def loadObject(self):
        self.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.vertexbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(self.vertex_data) * 4,
                     (GLfloat * len(self.vertex_data))(*self.vertex_data),
                     GL_STATIC_DRAW)

        self.vertexLen = len(self.vertex_data)

        self.colorbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.colorbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(self.color_data) * 4,
                     (GLfloat * len(self.color_data))(*self.color_data),
                     GL_STATIC_DRAW)

    def loadTexture(self):
        self.texture = None

    def rendering(self, MVP, View, Projection):

        self.shader.begin()
        glUniformMatrix4fv(self.MVP_ID, 1, GL_FALSE, glm.value_ptr(MVP))

        glEnableVertexAttribArray(0)
        glBindBuffer(GL_ARRAY_BUFFER, self.vertexbuffer)
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, None)

        glEnableVertexAttribArray(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.colorbuffer)
        glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, None)

        glDrawArrays(GL_TRIANGLES, 0, self.vertexLen)

        glDisableVertexAttribArray(0)
        glDisableVertexAttribArray(1)
        self.shader.end()
Пример #8
0
    def init_context(self):
        self.context = self.GLContext()

        # vertex = glGenVertexArrays(1) # pylint: disable=W0612
        # glBindVertexArray(vertex)

        self.shader = shader = Shader()
        shader.initShaderFromGLSL(["glsl/tu02/vertex.glsl"],
                                  ["glsl/tu02/fragment.glsl"])

        self.context.MVP_ID = glGetUniformLocation(shader.program, "MVP")
        self.context.TextureID = glGetUniformLocation(shader.program,
                                                      "myTextureSampler")

        texture = textureLoader("resources/tu02/uvtemplate.tga")
        #texture = textureLoader("resources/tu02/uvtemplate.dds")

        self.context.textureGLID = texture.textureGLID

        self.context.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.context.vertexbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(g_vertex_buffer_data) * 4,
                     (GLfloat *
                      len(g_vertex_buffer_data))(*g_vertex_buffer_data),
                     GL_STATIC_DRAW)

        if (texture.inversedVCoords):
            for index in range(0, len(g_uv_buffer_data)):
                if (index % 2):
                    g_uv_buffer_data[index] = 1.0 - g_uv_buffer_data[index]

        self.context.uvbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.context.uvbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(g_uv_buffer_data) * 4,
                     (GLfloat * len(g_uv_buffer_data))(*g_uv_buffer_data),
                     GL_STATIC_DRAW)
Пример #9
0
    def init_context(self):
        self.context = self.GLContext()

        self.shader = shader = Shader()
        shader.initShaderFromGLSL(["glsl/tu01/vertex.glsl"],
                                  ["glsl/tu01/fragment.glsl"])

        self.context.MVP_ID = glGetUniformLocation(shader.program, "MVP")

        self.context.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.context.vertexbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(g_vertex_buffer_data) * 4,
                     (GLfloat *
                      len(g_vertex_buffer_data))(*g_vertex_buffer_data),
                     GL_STATIC_DRAW)

        self.context.colorbuffer = glGenBuffers(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.context.colorbuffer)
        glBufferData(GL_ARRAY_BUFFER,
                     len(g_color_buffer_data) * 4,
                     (GLfloat *
                      len(g_color_buffer_data))(*g_color_buffer_data),
                     GL_STATIC_DRAW)
Пример #10
0
    def init_context(self):
        self.context = self.GLContext()

        self.shader = shader = Shader()
        shader.initShaderFromGLSL(["glsl/tu02/vertex.glsl"],
                                  ["glsl/tu02/fragment.glsl"])
        # shader var ids
        self.context.MVP_ID = glGetUniformLocation(shader.program, "MVP")
        self.context.Texture_ID = glGetUniformLocation(shader.program,
                                                       "myTextureSampler")

        texture = textureLoader("resources/tu05/AK-47_01_D_Fix.png")
        self.context.texturebuffer = texture.textureGLID

        model = MeshUE4().getMesh()
        self.context.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.context.vertexbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.vertexs) * 4,
                     (GLfloat * len(model.vertexs))(*model.vertexs),
                     GL_STATIC_DRAW)

        self.context.uvbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.context.uvbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.texcoords) * 4,
                     (GLfloat * len(model.texcoords))(*model.texcoords),
                     GL_STATIC_DRAW)

        self.context.indices = glGenBuffers(1)
        self.context.indicesSize = len(model.indices)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.context.indices)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.indices) * 2,
                     (GLushort * len(model.indices))(*model.indices),
                     GL_STATIC_DRAW)
Пример #11
0
glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3)
glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 3)
glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)

window = glfw.create_window(1024, 768, "title of the window", None, None)

glfw.make_context_current(window)

glClearColor(0.0, 0, 0.4, 0)
glDepthFunc(GL_LESS)
glEnable(GL_DEPTH_TEST)

vertex = glGenVertexArrays(1)  # pylint: disable=W0612
glBindVertexArray(vertex)

shader = Shader()
shader.initShaderFromGLSL(["glsl/tu01/vertex.glsl"],
                          ["glsl/tu01/fragment.glsl"])

MVP_ID = glGetUniformLocation(shader.program, "MVP")

Projection = Matrix44.perspective_projection(math.radians(45.0), 800.0 / 480.0,
                                             0.1, 100.0)
View = Matrix44.look_at(
    (4, 3, -3),  # Camera is at (4,3,-3), in World Space
    (0, 0, 0),  #and looks at the (0.0.0))
    (0, 1, 0))  #Head is up (set to 0,-1,0 to look upside-down)

Model = Matrix44.identity()
MVP = Projection * View * Model
#print context.MVP
Пример #12
0
 def loadShader(self):
     self.shader = Shader()
Пример #13
0
class NormalMapping(meshWithRender):
    def __init__(self, meshName, textureName, location=[0.0, 0.0, 0.0]):
        self.meshName = meshName
        self.textureName = textureName
        self.location = location

    def indexVBO_TBN(self, vertex, uv, normal, tangents, bitangents):
        class Container(object):
            pass

        indices = []
        out_vertexs = []
        out_uvs = []
        out_normals = []
        out_tangents = []
        out_bitangents = []
        newindex = 0

        def getSimilarVertexIndex(in_vertex, in_uv, in_normal, vertex_list,
                                  uv_list, normal_list):
            def is_near(v1, v2):
                return fabs(v1 - v2) < 0.01

            for idx in range(0, len(vertex_list) / 3):
                vertex_in_list = vertex_list[idx * 3:idx * 3 + 3]
                uv_in_list = uv_list[idx * 2:idx * 2 + 2]
                normal_in_list = normal_list[idx * 3:idx * 3 + 3]

                if (is_near(in_vertex[0], vertex_in_list[0])
                        & is_near(in_vertex[1], vertex_in_list[1])
                        & is_near(in_vertex[2], vertex_in_list[2])
                        & is_near(in_uv[0], uv_in_list[0])
                        & is_near(in_uv[1], uv_in_list[1])
                        & is_near(in_normal[0], normal_in_list[0])
                        & is_near(in_normal[1], normal_in_list[1])
                        & is_near(in_normal[2], normal_in_list[2])):
                    return True, idx

            return False, 0

        for idx in range(0, len(vertex) / 3):
            current_v = vertex[idx * 3:idx * 3 + 3]
            current_uv = uv[idx * 2:idx * 2 + 2]
            current_normal = normal[idx * 3:idx * 3 + 3]

            found, idx_found = getSimilarVertexIndex(current_v, current_uv,
                                                     current_normal,
                                                     out_vertexs, out_uvs,
                                                     out_normals)
            if found:
                indices.append(idx_found)
            else:
                indices.append(newindex)
                out_vertexs = out_vertexs + current_v
                out_uvs = out_uvs + current_uv
                out_normals = normal + current_normal
                out_tangents = out_tangents + tangents[idx * 3:idx * 3 + 3]
                out_bitangents = out_bitangents + bitangents[idx * 3:idx * 3 +
                                                             3]
                newindex += 1

        outobj = Container()
        outobj.indices = indices
        outobj.vertexs = out_vertexs
        outobj.texcoords = out_uvs
        outobj.normals = out_normals
        outobj.tangents = out_tangents
        outobj.bitangents = out_bitangents

        return outobj

    def computeTangentBasis(self, vertex, uv, normal):

        tangents = []
        bitangents = []
        for idx in range(0, len(vertex) / 9):

            offset = idx * 9
            v0 = vertex[offset:offset + 3]
            v1 = vertex[offset + 3:offset + 6]
            v2 = vertex[offset + 6:offset + 9]

            offset = idx * 6
            uv0 = uv[offset:offset + 2]
            uv1 = uv[offset + 2:offset + 4]
            uv2 = uv[offset + 4:offset + 6]
            #print v0,v1,v2
            deltaPos1 = glm.vec3([v1[0] - v0[0], v1[1] - v0[1], v1[2] - v0[2]])
            deltaPos2 = glm.vec3([v2[0] - v0[0], v2[1] - v0[1], v2[2] - v0[2]])

            deltaUV1 = glm.vec2([uv1[0] - uv0[0], uv1[1] - uv0[1]])
            deltaUV2 = glm.vec2([uv2[0] - uv0[0], uv2[1] - uv0[1]])

            r = 1.0 / (deltaUV1.x * deltaUV2.y - deltaUV1.y * deltaUV2.x)
            tangent = (deltaPos1 * deltaUV2.y - deltaPos2 * deltaUV1.y) * r
            bitangent = (deltaPos2 * deltaUV1.x - deltaPos1 * deltaUV2.x) * r

            tangents.extend([tangent.x, tangent.y, tangent.z])
            tangents.extend([tangent.x, tangent.y, tangent.z])
            tangents.extend([tangent.x, tangent.y, tangent.z])

            bitangents.extend([bitangent.x, bitangent.y, bitangent.z])
            bitangents.extend([bitangent.x, bitangent.y, bitangent.z])
            bitangents.extend([bitangent.x, bitangent.y, bitangent.z])

        return tangents, bitangents

    def loadShader(self):
        self.shader = Shader()
        self.shader.initShaderFromGLSL(
            ["glsl/tu10/NormalMapping.vertexshader.glsl"],
            ["glsl/tu10/NormalMapping.fragmentshader.glsl"])

        self.MatrixID = glGetUniformLocation(self.shader.program, "MVP")
        self.ViewMatrixID = glGetUniformLocation(self.shader.program, "V")
        self.ModelMatrixID = glGetUniformLocation(self.shader.program, "M")
        self.ModelView3x3MatrixID = glGetUniformLocation(
            self.shader.program, "MV3x3")
        self.DiffuseTextureID = glGetUniformLocation(self.shader.program,
                                                     "DiffuseTextureSampler")
        self.NormalTextureID = glGetUniformLocation(self.shader.program,
                                                    "NormalTextureSampler")
        self.SpecularTextureID = glGetUniformLocation(
            self.shader.program, "SpecularTextureSampler")
        self.LightID = glGetUniformLocation(self.shader.program,
                                            "LightPosition_worldspace")

    def loadObject(self):

        from utils.objLoader import objLoader
        model = objLoader(self.meshName).to_array_style()

        tangents, bitangents = self.computeTangentBasis(
            model.vertexs, model.texcoords, model.normals)

        self.model = model = self.indexVBO_TBN(model.vertexs, model.texcoords,
                                               model.normals, tangents,
                                               bitangents)

        self.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.vertexbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.vertexs) * 4,
                     (GLfloat * len(model.vertexs))(*model.vertexs),
                     GL_STATIC_DRAW)

        self.normalbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.normalbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.normals) * 4,
                     (GLfloat * len(model.normals))(*model.normals),
                     GL_STATIC_DRAW)

        self.tangentbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.tangentbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.tangents) * 4,
                     (GLfloat * len(model.tangents))(*model.tangents),
                     GL_STATIC_DRAW)

        self.bitangentbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.bitangentbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.bitangents) * 4,
                     (GLfloat * len(model.bitangents))(*model.bitangents),
                     GL_STATIC_DRAW)

        self.indicesbufferSize = len(model.indices)

        self.indicesbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.indicesbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.indices) * 2,
                     (GLushort * len(model.indices))(*model.indices),
                     GL_STATIC_DRAW)

    def loadTexture(self):
        from utils.textureLoader import textureLoader
        DiffuseTexture = textureLoader(self.textureName[0])
        NormalTexture = textureLoader(self.textureName[1])
        SpecularTexture = textureLoader(self.textureName[2])

        model = self.model
        # if(DiffuseTexture.inversedVCoords):
        for index in range(0, len(model.texcoords)):
            if (index % 2):
                model.texcoords[index] = 1.0 - model.texcoords[index]

        self.DiffuseTexture = DiffuseTexture.textureGLID
        self.NormalTexture = NormalTexture.textureGLID
        self.SpecularTexture = SpecularTexture.textureGLID

        self.uvbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.uvbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(model.texcoords) * 4,
                     (GLfloat * len(model.texcoords))(*model.texcoords),
                     GL_STATIC_DRAW)

    def rendering(self, MVP, View, Projection):
        self.shader.begin()
        ModelMatrix = glm.mat4(1.0)
        #print View
        ModelViewMatrix = glm.mat4(View) * ModelMatrix

        ModelView3x3Matrix = glm.mat3(ModelViewMatrix)
        glUniformMatrix4fv(self.MatrixID, 1, GL_FALSE, glm.value_ptr(MVP))
        glUniformMatrix4fv(self.ModelMatrixID, 1, GL_FALSE,
                           glm.value_ptr(ModelMatrix))
        glUniformMatrix4fv(self.ViewMatrixID, 1, GL_FALSE, glm.value_ptr(View))
        glUniformMatrix3fv(self.ModelView3x3MatrixID, 1, GL_FALSE,
                           glm.value_ptr(ModelView3x3Matrix))

        lightPos = glm.vec3(0.0, 0.0, 4.0)
        glUniform3f(self.LightID, lightPos.x, lightPos.y, lightPos.z)

        glActiveTexture(GL_TEXTURE0)
        glBindTexture(GL_TEXTURE_2D, self.DiffuseTexture)
        glUniform1i(self.DiffuseTextureID, 0)

        glActiveTexture(GL_TEXTURE1)
        glBindTexture(GL_TEXTURE_2D, self.NormalTexture)
        glUniform1i(self.NormalTextureID, 1)

        glActiveTexture(GL_TEXTURE2)
        glBindTexture(GL_TEXTURE_2D, self.SpecularTexture)
        glUniform1i(self.SpecularTextureID, 2)

        glEnableVertexAttribArray(0)
        glBindBuffer(GL_ARRAY_BUFFER, self.vertexbuffer)
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, None)

        glEnableVertexAttribArray(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.uvbuffer)
        glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, None)

        glEnableVertexAttribArray(2)
        glBindBuffer(GL_ARRAY_BUFFER, self.normalbuffer)
        glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, None)

        glEnableVertexAttribArray(3)
        glBindBuffer(GL_ARRAY_BUFFER, self.tangentbuffer)
        glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 0, None)

        glEnableVertexAttribArray(4)
        glBindBuffer(GL_ARRAY_BUFFER, self.bitangentbuffer)
        glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, 0, None)

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.indicesbuffer)

        glDrawElements(
            GL_TRIANGLES,  # mode
            self.indicesbufferSize,  #// count
            GL_UNSIGNED_SHORT,  #  // type
            None  #// element array buffer offset
        )

        glDisableVertexAttribArray(0)
        glDisableVertexAttribArray(1)
        glDisableVertexAttribArray(2)
        glDisableVertexAttribArray(3)
        glDisableVertexAttribArray(4)
Пример #14
0
class Draw2DText(meshWithRender):
    def __init__(self, text_str, x, y, Xsize, Ysize):
        (self.text_str, self.x, self.y, self.Xsize,
         self.Ysize) = (text_str, x, y, Xsize, Ysize)

    def loadShader(self):
        self.shader = Shader()
        self.shader.initShaderFromGLSL(
            ["glsl/tu09/TextVertexShader.vertexshader.glsl"],
            ["glsl/tu09/TextVertexShader.fragmentshader.glsl"])
        self.HALFSCREENSIZE_ID = glGetUniformLocation(self.shader.program,
                                                      "HALFSCREENSIZE")
        self.Texture_ID = glGetUniformLocation(self.shader.program,
                                               "myTextureSampler")

    def loadObject(self):

        vertex_array = []
        uv_array = []
        lineCount = 0
        for line in self.text_str:
            for idx in range(0, len(line)):
                xoffset = idx * self.Xsize
                yoffset = lineCount * self.Ysize
                vertex_up_left = [
                    self.x + xoffset, self.y + yoffset + self.Ysize
                ]
                vertex_up_right = [
                    self.x + xoffset + self.Xsize,
                    self.y + yoffset + self.Ysize
                ]
                vertex_down_right = [
                    self.x + xoffset + self.Xsize, self.y + yoffset
                ]
                vertex_down_left = [self.x + xoffset, self.y + yoffset]
                vertex_array = vertex_array + vertex_up_left + vertex_down_left + vertex_up_right
                vertex_array = vertex_array + vertex_down_right + vertex_up_right + vertex_down_left

                character = ord(line[idx])
                uv_x = (character % 16) / 16.0
                uv_y = (character / 16) / 16.0

                uv_up_left = [uv_x, uv_y]
                uv_up_right = [uv_x + 1.0 / 16.0, uv_y]
                uv_down_right = [uv_x + 1.0 / 16.0, uv_y + 1.0 / 16.0]
                uv_down_left = [uv_x, uv_y + 1.0 / 16.0]
                uv_array = uv_array + uv_up_left + uv_down_left + uv_up_right
                uv_array = uv_array + uv_down_right + uv_up_right + uv_down_left
            lineCount += 1
        self.vertexbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.vertexbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(vertex_array) * 4,
                     (GLfloat * len(vertex_array))(*vertex_array),
                     GL_STATIC_DRAW)

        self.uvbuffer = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.uvbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,
                     len(uv_array) * 4, (GLfloat * len(uv_array))(*uv_array),
                     GL_STATIC_DRAW)

        self.vertex_array = vertex_array

    def loadTexture(self):
        from utils.textureLoader import textureLoader
        texture = textureLoader("resources/tu09/Holstein.DDS")
        self.texturebuffer = texture.textureGLID

    def rendering(self, MVP, View, Projection):
        self.shader.begin()

        glActiveTexture(GL_TEXTURE0)
        glBindTexture(GL_TEXTURE_2D, self.texturebuffer)
        glUniform1i(self.Texture_ID, 0)

        glEnableVertexAttribArray(0)
        glBindBuffer(GL_ARRAY_BUFFER, self.vertexbuffer)
        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, None)

        glEnableVertexAttribArray(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.uvbuffer)
        glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, None)

        glEnable(GL_BLEND)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
        glDrawArrays(GL_TRIANGLES, 0, len(self.vertex_array))
        glDisable(GL_BLEND)
        glDisableVertexAttribArray(0)
        glDisableVertexAttribArray(1)
        self.shader.end()
class basicShading(meshWithRender):
    def __init__(self,meshName,textureName,location=[0.0,0.0,0.0]):
        self.meshName = meshName
        self.textureName = textureName
        self.location = location
    def loadShader(self):
        self.shader = Shader()
        self.shader.initShaderFromGLSL(
            ["glsl/tu07/StandardShading.vertexshader.glsl"], ["glsl/tu07/StandardShading.fragmentshader.glsl"])
        self.MVP_ID = glGetUniformLocation(self.shader.program, "MVP")
        self.ModelMatrix_ID = glGetUniformLocation(self.shader.program, "M")
        self.ViewMatrix_ID = glGetUniformLocation(self.shader.program, "V")
        self.Texture_ID =  glGetUniformLocation(self.shader.program, "myTextureSampler")
        self.Light_ID =  glGetUniformLocation(self.shader.program, "LightPosition_worldspace")
        self.OFFSET_ID = glGetUniformLocation(self.shader.program, "LOCATION_OFFSET")
    def loadObject(self):

        from utils.objLoader import objLoader            
        model = objLoader(self.meshName).to_single_index_style()
        self.model = model
        self.vertexbuffer  = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,self.vertexbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,len(model.vertexs)*4,(GLfloat * len(model.vertexs))(*model.vertexs),GL_STATIC_DRAW)

        # used normal
        self.normalbuffer  = glGenBuffers(1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,self.normalbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,len(model.normals)*4,(GLfloat * len(model.normals))(*model.normals),GL_STATIC_DRAW)
      

        self.indicesbufferSize = len(model.indices)

        self.indicesbuffer  = glGenBuffers(1)        		
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,self.indicesbuffer)
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,len(model.indices)*2,(GLushort * len(model.indices))(*model.indices),GL_STATIC_DRAW)

    def loadTexture(self):
            from utils.textureLoader import textureLoader
            texture = textureLoader(self.textureName)	
            model = self.model
            if(texture.inversedVCoords):
                for index in range(0,len(model.texcoords)):
                    if(index % 2):
                        model.texcoords[index] = 1.0 - model.texcoords[index]

            self.texturebuffer = texture.textureGLID

            self.uvbuffer  = glGenBuffers(1)
            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,self.uvbuffer)            
            glBufferData(GL_ELEMENT_ARRAY_BUFFER,len(model.texcoords)*4,(GLfloat * len(model.texcoords))(*model.texcoords),GL_STATIC_DRAW)

    def rendering(self, MVP,View,Projection):
        self.shader.begin()
        glUniformMatrix4fv(self.MVP_ID,1,GL_FALSE, glm.value_ptr(MVP))
        glUniformMatrix4fv(self.ModelMatrix_ID,1,GL_FALSE,glm.value_ptr(glm.mat4(1.0)))   
        glUniformMatrix4fv(self.ViewMatrix_ID,1,GL_FALSE,glm.value_ptr(View))     
        glUniform3f(self.OFFSET_ID,self.location[0],self.location[1],self.location[2])

        lightPos = glm.vec3(0.0,0.0,4.0)
        glUniform3f(self.Light_ID, lightPos.x, lightPos.y, lightPos.z)

        glActiveTexture(GL_TEXTURE0)
        glBindTexture(GL_TEXTURE_2D, self.texturebuffer)
        glUniform1i(self.Texture_ID, 0) 		#// Set  "myTextureSampler" sampler to use Texture Unit 0

        glEnableVertexAttribArray(0)
        glBindBuffer(GL_ARRAY_BUFFER, self.vertexbuffer)
        glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,None)

        glEnableVertexAttribArray(1)
        glBindBuffer(GL_ARRAY_BUFFER, self.uvbuffer)
        glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,0,None)

        glEnableVertexAttribArray(2)
        glBindBuffer(GL_ARRAY_BUFFER, self.normalbuffer)
        glVertexAttribPointer(2,3,GL_FLOAT,GL_FALSE,0,None)
        
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.indicesbuffer)
        
        glDrawElements(
            GL_TRIANGLES,      # mode
            self.indicesbufferSize,    #// count
            GL_UNSIGNED_SHORT, #  // type
            None          #// element array buffer offset
        )		
        glDisableVertexAttribArray(0)
        glDisableVertexAttribArray(1)
        glDisableVertexAttribArray(1)
Пример #16
0
 def loadShader(self):
     self.shader = Shader()
     self.shader.initShaderFromGLSL(["glsl/tu01/vertex.glsl"],
                                    ["glsl/tu01/fragment.glsl"])
     self.MVP_ID = glGetUniformLocation(self.shader.program, "MVP")