def getTransform(showTransform, theta):

    if showTransform == TR_STANDARD:
        return tr.identity()

    elif showTransform == TR_ROTATE_ZP:
        return tr.rotationZ(theta)

    elif showTransform == TR_ROTATE_ZM:
        return tr.rotationZ(-theta)

    elif showTransform == TR_TRANSLATE:
        return tr.translate(0.3 * np.cos(theta), 0.3 * np.cos(theta), 0)

    elif showTransform == TR_UNIFORM_SCALE:
        return tr.uniformScale(0.7 + 0.5 * np.cos(theta))

    elif showTransform == TR_NONUNIF_SCALE:
        return tr.scale(1.0 - 0.5 * np.cos(1.5 * theta),
                        1.0 + 0.5 * np.cos(2 * theta), 1.0)

    elif showTransform == TR_REFLEX_Y:
        return tr.scale(1, -1, 1)

    elif showTransform == TR_SHEARING_XY:
        return tr.shearing(0.3 * np.cos(theta), 0, 0, 0, 0, 0)

    else:
        # This should NEVER happend
        raise Exception()
        if (controller.fillPolygon):
            glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
        else:
            glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)

        theta = 0.3 * np.sin(glfw.get_time())

        # Clearing the screen in both, color and depth
        glClear(GL_COLOR_BUFFER_BIT)

        glUseProgram(pipeline.shaderProgram)
        # Drawing the shapes
        glUniformMatrix4fv(
            glGetUniformLocation(pipeline.shaderProgram, "transform"), 1,
            GL_TRUE,
            np.matmul(tr.shearing(0, theta, 0, 0, 0, 0), tr.uniformScale(1.5)))

        # Binding samplers to both texture units
        glUniform1i(glGetUniformLocation(pipeline.shaderProgram, "upTexture"),
                    0)
        glUniform1i(
            glGetUniformLocation(pipeline.shaderProgram, "downTexture"), 1)

        # Sending the mouse vertical location to our shader
        glUniform1f(glGetUniformLocation(pipeline.shaderProgram, "mousePosY"),
                    controller.mousePos[1])
        pipeline.drawCall(gpuShape)

        # Once the render is done, buffers are swapped, showing only the complete scene.
        glfw.swap_buffers(window)
        # Rendering the rendered texture to the viewport as a simple quad
        #######################
        glBindFramebuffer(GL_FRAMEBUFFER, 0)
        glDisable(GL_DEPTH_TEST)
        glClearColor(0.85, 0.85, 0.85, 1.0)
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

        if (controller.fillTexture):
            glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
        else:
            glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)

        glUseProgram(textureShaderProgram.shaderProgram)
        glUniformMatrix4fv(
            glGetUniformLocation(textureShaderProgram.shaderProgram,
                                 "transform"), 1, GL_TRUE,
            tr.matmul([
                tr.translate(0.3 * np.cos(theta), 0, 0),
                tr.shearing(0.3 * np.cos(theta), 0, 0, 0, 0, 0)
            ]))
        textureShaderProgram.drawCall(gpuQuad)

        # Once the render is done, buffers are swapped, showing only the complete scene.
        glfw.swap_buffers(window)

    # freeing GPU memory
    gpuRainbowCube.clear()
    gpuQuad.clear()

    glfw.terminate()
Exemple #4
0
                spiral.vertices[m], spiral.vertices[m + 1],
                spiral.vertices[m + 2], 1
            ]
            new_vert = tr.matmul([tr.scale(0.02, 0.02, 1), current_vert])
            spiral.vertices[m] = new_vert[0]
            spiral.vertices[m + 1] = new_vert[1]
            spiral.vertices[m + 2] = new_vert[2]
        GPUspiral = es.GPUShape().initBuffers()
        pipeline.setupVAO(GPUspiral)
        GPUspiral.fillBuffers(spiral.vertices, spiral.indices, GL_STREAM_DRAW)

        # Si el jugador esta infectado, aparece una espiral rotando encima de su modelo y se distoricona la vision
        if player.infected:
            for entity in entityList:
                entity.pos[0] += math.cos(t1) * delta * 0.2 * entity.pos[1]
            full_scene.transform = tr.shearing(
                math.cos(t1) * 0.2, 0, 0, 0, 0, 0)
            decoration_scene.transform = tr.shearing(
                math.cos(t1) * 0.2, 0, 0, 0, 0, 0)
            fullStoreNode.transform = tr.shearing(
                math.cos(t1) * 0.2, 0, 0, 0, 0, 0)
            glUseProgram(pipeline.shaderProgram)
            glUniformMatrix4fv(
                glGetUniformLocation(pipeline.shaderProgram, "transform"), 1,
                GL_TRUE,
                tr.matmul([
                    tr.translate(player.pos[0], player.pos[1] + 0.1, 0),
                    tr.rotationZ(t1)
                ]))
            pipeline.drawCall(GPUspiral, GL_LINE_STRIP)

        # Se quitan de la lista de entidades aquellas que salieron de la pantalla esta iteracion