gitsunekei1445 / GameEngineV.1

Main repository my team project .
1 stars 0 forks source link

ฟังก์ชั่นการเรนเดอร์ โมเดล 3 มิติ จาก ไฟล์ WaveFront (.obj) #20

Open gitsunekei1445 opened 4 years ago

gitsunekei1445 commented 4 years ago
 def render_model(pathModel,pathTextures):

        Render.textures = glGenTextures(2)

        Render.model_indices,model_buffer = ObjLoader.load_model("Bin/Grassv2.obj")

        Render.shader = compileProgram(compileShader(GLSL.vertex_src_loaderModel, GL_VERTEX_SHADER), compileShader(GLSL.fragment_src_loaderModel, GL_FRAGMENT_SHADER))

        # VAO and VBO
        Render.VAO = glGenVertexArrays(2)
        VBO = glGenBuffers(2)

        # Chibi VAO
        glBindVertexArray(Render.VAO[0])
        # Chibi Vertex Buffer Object
        glBindBuffer(GL_ARRAY_BUFFER, VBO[0])
        glBufferData(GL_ARRAY_BUFFER, model_buffer.nbytes, model_buffer, GL_STATIC_DRAW)

        # glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO)
        # glBufferData(GL_ELEMENT_ARRAY_BUFFER, chibi_indices.nbytes, chibi_indices, GL_STATIC_DRAW)

        # chibi vertices
        glEnableVertexAttribArray(0)
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, model_buffer.itemsize * 8, ctypes.c_void_p(0))
        # chibi textures
        glEnableVertexAttribArray(1)
        glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, model_buffer.itemsize * 8, ctypes.c_void_p(12))
        # chibi normals
        glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, model_buffer.itemsize * 8, ctypes.c_void_p(20))
        glEnableVertexAttribArray(2)

        load_texture("Bin/Grass.png", Render.textures[0]);

        glUseProgram(Render.shader)
        glEnable(GL_DEPTH_TEST)
        glEnable(GL_BLEND)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

        projection = pyrr.matrix44.create_perspective_projection_matrix(45, 1280 / 720, 0.1, 100)
        Render.model_pos = pyrr.matrix44.create_from_translation(pyrr.Vector3([0, 0, 0]))

        # eye, target, up
        view = pyrr.matrix44.create_look_at(pyrr.Vector3([0, 0, 8]), pyrr.Vector3([0, 0, 0]), pyrr.Vector3([0, 1, 0]))

        Render.model_loc = glGetUniformLocation(Render.shader, "model")
        proj_loc = glGetUniformLocation(Render.shader, "projection")
        view_loc = glGetUniformLocation(Render.shader, "view")

        glUniformMatrix4fv(proj_loc, 1, GL_FALSE, projection)
        glUniformMatrix4fv(view_loc, 1, GL_FALSE, view)