transform = getTransform(controller.showTransform, theta) if (controller.shape == SP_TRIANGLE): glUniformMatrix4fv( glGetUniformLocation(pipeline.shaderProgram, "transform"), 1, GL_TRUE, transform) pipeline.drawCall(gpuTriangle) elif (controller.shape == SP_QUAD): glUniformMatrix4fv( glGetUniformLocation(pipeline.shaderProgram, "transform"), 1, GL_TRUE, transform) pipeline.drawCall(gpuQuad) elif (controller.shape == SP_CUBE): Rx = tr.rotationX(np.pi / 3) Ry = tr.rotationY(np.pi / 3) transform = tr.matmul([Ry, Rx, transform]) glUniformMatrix4fv( glGetUniformLocation(pipeline.shaderProgram, "transform"), 1, GL_TRUE, transform) pipeline.drawCall(gpuCube) elif (controller.shape == SP_CIRCLE): glUniformMatrix4fv( glGetUniformLocation(pipeline.shaderProgram, "transform"), 1, GL_TRUE, transform) pipeline.drawCall(gpuCircle) else: # This should never happen
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) else: glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) # Drawing shapes glUseProgram(pipeline.shaderProgram) glUniform3f(glGetUniformLocation(pipeline.shaderProgram, "viewPosition"), viewPos[0], viewPos[1], viewPos[2]) glUniformMatrix4fv(glGetUniformLocation(pipeline.shaderProgram, "view"), 1, GL_TRUE, view) glUniformMatrix4fv(glGetUniformLocation(pipeline.shaderProgram, "model"), 1, GL_TRUE, tr.uniformScale(3)) pipeline.drawCall(gpuSuzanne) glUniformMatrix4fv(glGetUniformLocation(pipeline.shaderProgram, "model"), 1, GL_TRUE, tr.matmul([ tr.uniformScale(3), tr.rotationX(np.pi/2), tr.translate(1.5,-0.25,0)]) ) pipeline.drawCall(gpuCarrot) glUseProgram(mvpPipeline.shaderProgram) glUniformMatrix4fv(glGetUniformLocation(mvpPipeline.shaderProgram, "view"), 1, GL_TRUE, view) mvpPipeline.drawCall(gpuAxis, GL_LINES) # Once the drawing is rendered, buffers are swap so an uncomplete drawing is never seen. glfw.swap_buffers(window) # freeing GPU memory gpuAxis.clear() gpuSuzanne.clear() gpuCarrot.clear()