Example #1
0
def renderFrame(xOffset, width, height, time, textures, vao):
    global g_camera
    global g_yFovDeg
    global g_model

    lightPosition = lu.vec3(0, 0, 0)

    sunPosition = lu.vec3(0, 0, 0)
    mercuryPosition = getPosition(80, 0.01, time)
    saturnPosition = getPosition(300, 0.05, time)
    experimentPosition = getPosition(150, 0.02, time)
    moonPosition = getPosition(25, 0.1, time)

    # This configures the fixed-function transformation from Normalized Device Coordinates (NDC)
    # to the screen (pixels - called 'window coordinates' in OpenGL documentation).
    #   See: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glViewport.xhtml
    glViewport(xOffset, 0, width, height)
    # Set the colour we want the frame buffer cleared to,
    glClearColor(0.0, 0.0, 0.0, 1.0)
    # Tell OpenGL to clear the render target to the clear values for both depth and colour buffers (depth uses the default)
    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)

    worldToViewTransform = g_camera.getWorldToViewMatrix([0, 1, 0])
    viewToClipTransform = lu.make_perspective(g_yFovDeg, width / height, 0.1,
                                              1500.0)

    glEnable(GL_BLEND)
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

    Sphere.drawSphereWithTexture(
        experimentPosition, 20.0, "planet1.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/planetFragmentShader.glsl")
    Sphere.drawSphereWithTexture(
        mercuryPosition, 10.0, "planet2.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/planetFragmentShader.glsl")
    Sphere.drawSphereWithTexture(
        saturnPosition, 10.0, "fire.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/planetFragmentShader.glsl")

    randomNo = random.random()

    Sphere.drawSphereWithTexture(
        sunPosition, 15.0, "sun.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/sunFragmentShader.glsl")
    Sphere.drawSphereWithTexture(
        sunPosition, 16.0 + 1 * randomNo, "sun.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/cheekyShader.glsl")
    Sphere.drawSphereWithTexture(
        sunPosition, 17.0 + 2 * randomNo, "sun.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/cheekyShader.glsl")
    Sphere.drawSphereWithTexture(
        sunPosition, 18.0 + 3 * randomNo, "sun.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/cheekyShader.glsl")
    Sphere.drawSphereWithTexture(
        sunPosition, 20.0 + 5 * randomNo, "sun.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/cheekyShader.1.glsl")
    Sphere.drawSphereWithTexture(
        sunPosition, 24.0 + 9 * randomNo, "sun.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/cheekyShader.2.glsl")

    Sphere.drawSphereWithTexture(
        sunPosition, 700, "stars3.png", viewToClipTransform,
        worldToViewTransform, textures, vao,
        lu.transformPoint(worldToViewTransform, lightPosition),
        "shaders/allVertexShader.glsl", "shaders/sunFragmentShader.1.glsl")

    glDisable(GL_BLEND)