예제 #1
0
파일: examples.py 프로젝트: FR98/engine-3d
def model_with_triangle():
    render = Render(2000, 2000)
    render.light = render.vector(0, 0, 1)
    render.load_model_3D('./models/Biplane/OBJ/HiPoly/Biplane.obj',
                         scale=render.vector(200, 200, 200),
                         rotate=render.vector(0, 0, 0))
    render.glFinish()
예제 #2
0
파일: examples.py 프로젝트: FR98/engine-3d
def model_dutch_angle():
    render = Render(2000, 2000)
    render.light = render.vector(0, 0, 1)
    render.active_texture = Texture('./models/Face/model.bmp')
    render.active_shader = shaders.grayscale
    render.load_model_3D('./models/Face/model.obj',
                         scale=render.vector(200, 200, 200),
                         rotate=render.vector(35, 25, 0))
    render.glFinish('output/dutch_angle.bmp')
예제 #3
0
파일: examples.py 프로젝트: FR98/engine-3d
def model_high_angle():
    render = Render(2000, 2000)
    render.light = render.vector(0, 0, 1)
    render.active_texture = Texture('./models/Face/model.bmp')
    render.active_shader = shaders.randomPattern
    render.load_model_3D('./models/Face/model.obj',
                         scale=render.vector(200, 200, 200),
                         rotate=render.vector(35, 350, 0))
    render.glFinish('output/high_angle.bmp')
예제 #4
0
파일: examples.py 프로젝트: FR98/engine-3d
def model_texture():
    render = Render(2000, 2000)
    render.light = render.vector(0, 0, 1)
    render.active_texture = Texture('./models/Face/model.bmp')
    render.active_shader = shaders.randomPattern
    render.load_model_3D('./models/Face/model.obj',
                         scale=render.vector(200, 200, 200),
                         rotate=render.vector(0, 0, 0))
    render.glFinish()
    render.glZBuffer()
예제 #5
0
파일: examples.py 프로젝트: FR98/engine-3d
def proyecto1():
    render = Render(1080, 1080)
    background = Texture('./models/fondos/fondo.bmp')
    render.viewPort = background.pixels
    render.lookAt(render.vector(1, 1, 1), render.vector(0, 0, 0))

    render.light = render.vector(0, 0, 1)

    render.active_shader = shaders.underwater
    render.load_model_3D('./models/Biplane/OBJ/HiPoly/Biplane.obj',
                         scale=render.vector(18, 18, 18),
                         rotate=render.vector(20, 225, 0),
                         translate=render.vector(-0.5, -0.15, 0))

    render.active_shader = shaders.grayscale
    render.active_texture = Texture('./models/beriev/Beriev_2048.bmp')
    render.load_model_3D('./models/beriev/BerievA50.obj',
                         scale=render.vector(2, 2, 2),
                         rotate=render.vector(340, 90, 0),
                         translate=render.vector(0.25, 0.8, 0))

    render.active_shader = shaders.toon
    render.active_texture = Texture('./models/f104/Albedo.bmp')
    render.load_model_3D('./models/f104/F-104.obj',
                         scale=render.vector(7.5, 7.5, 7.5),
                         rotate=render.vector(340, 90, 0),
                         translate=render.vector(-0.1, 0.7, -0.25))

    render.active_shader = shaders.randomPattern
    render.active_texture = Texture('./models/f16/Albedo.bmp')
    render.load_model_3D('./models/f16/F-16D.obj',
                         scale=render.vector(20, 20, 20),
                         rotate=render.vector(0, 340, 320),
                         translate=render.vector(0.5, 0, -0.75))

    render.active_shader = shaders.randomPattern
    render.active_texture = Texture('./models/dilophosaurus/skin.bmp')
    render.load_model_3D('./models/dilophosaurus/dilophosaurus.obj',
                         scale=render.vector(100, 100, 100),
                         rotate=render.vector(35, 25, 0),
                         translate=render.vector(0.25, -0.6, -0.25))

    render.active_shader = shaders.heat
    render.active_texture = Texture('./models/dilophosaurus/skin.bmp')
    render.load_model_3D('./models/dilophosaurus/dilophosaurus.obj',
                         scale=render.vector(25, 25, 25),
                         rotate=render.vector(10, 90, 0),
                         translate=render.vector(0, -0.6, -0.5))

    render.glFinish('output/proyecto1.bmp')
예제 #6
0
파일: examples.py 프로젝트: FR98/engine-3d
def poligonos():
    poligono1 = [(165, 380), (185, 360), (180, 330), (207, 345), (233, 330),
                 (230, 360), (250, 380), (220, 385), (205, 410), (193, 383)]
    poligono2 = [(321, 335), (288, 286), (339, 251), (374, 302)]
    poligono3 = [(377, 249), (411, 197), (436, 249)]
    poligono4 = [(413, 177), (448, 159), (502, 88), (553, 53), (535, 36),
                 (676, 37), (660, 52), (750, 145), (761, 179), (672, 192),
                 (659, 214), (615, 214), (632, 230), (580, 230), (597, 215),
                 (552, 214), (517, 144), (466, 180)]
    poligono5 = [(682, 175), (708, 120), (735, 148), (739, 170)]
    render = Render(800, 800)
    render.polygone(poligono1)
    render.polygone(poligono2)
    render.polygone(poligono3)
    render.polygone(poligono4)
    render.polygone(poligono5)
    render.glFinish()
예제 #7
0
t = Texture('models/space.bmp')
r.active_texture = t
r.paintBackground()

t = Texture('models/surface.bmp')
r.active_texture = t
r.load('models/earth.obj', [0, 0.2, 0], [0.2, 0.2, 1], [0, 0, 0])
r.draw_arrays('TRIANGLE')
t = Texture('models/moon.bmp')
r.active_texture = t
r.active_shader = unlit
r.load('models/sphere.obj', [0, -0.8, 50], [2, 1, 1], [0, 0, 0])
r.draw_arrays('TRIANGLE')
r.light = norm(V3(1, 1, 1))
t = Texture('models/saturnmap.bmp')
r.active_texture = t
r.active_shader = gouradShader
r.load('models/saturn.obj', [-1.5, 1, -50], [1, 1, 1], [0, 0, 0])
r.draw_arrays('TRIANGLE')
t = Texture('models/satelite.bmp')
r.active_texture = t
r.load('models/satelite.obj', [-0.4, 0, 30], [0.025, 0.025, 1], [0, 0, 0.2])
r.draw_arrays('TRIANGLE')
t = Texture('models/viper.bmp')
r.active_texture = t
r.load('models/viper.obj', [0.4, -0.2, 20], [0.1, 0.1, 1], [0.1, 0, -0.2])
r.draw_arrays('TRIANGLE')

r.glFinish()
from gl import Render, color

r = Render(600, 600)

r.glViewport(100, 100, 400, 400)

r.glClearColor(0, 0, 0)
r.glColor(0.45, 0.5, 0)
r.glClear()

r.glLine(-1, 0, 0, 1)
r.glLine(0, 1, 1, 0)
r.glLine(1, 0, 0, -1)
r.glLine(0, -1, -1, 0)
r.glLine(-1, 0, 1, 0)
r.glLine(0, -1, 0, 1)
r.glLine(-1, -1, -1, 1)
r.glLine(-1, 1, 1, 1)
r.glLine(1, 1, 1, -1)
r.glLine(1, -1, -1, -1)
r.glLine(-1, -1, 1, 1)
r.glLine(1, -1, -1, 1)

r.glFinish('output.bmp')
r.drawArrays('SHADER')

r.load('./sphere.obj', translate=(4,-1,2), scale=(0.038,0.038,0.038), rotate=(0,0,0))
r.drawArrays('SHADER')

r.load('./sphere.obj', translate=(3,-1,2), scale=(0.03,0.03,0.03), rotate=(0,0,0))
r.drawArrays('SHADER')

r.load('./sphere.obj', translate=(4,-1,6), scale=(0.085,0.085,0.085), rotate=(0,0,0))
r.drawArrays('SHADER')

r.load('./sphere.obj', translate=(4,0,8), scale=(0.1,0.1,0.1), rotate=(0,0,0))
r.drawArrays('SHADER')

t = Texture('./sun2.bmp')
r.texture = t
r.light = V3(0,0,1)
r.lookAt(V3(1, 0, 1), V3(0, 0, 0), V3(0, 1, 0))
r.load('./Dark Knight.obj', translate=(9, 10, 20), scale=(0.045, 0.045, 0.045), rotate=(0,4*pi/5,pi))
r.drawArrays('GREYSHADER')

r.load('./cube.obj', translate=(0.5, 18, 20), scale=(3, 3.5, 1), rotate=(0,0,pi/2))
r.drawArrays('GREYSHADER')

t = Texture('./fur.bmp')
r.texture = t
r.load('./Alien Animal.obj', translate=(250, 0, 135), scale=(3, 3, 4), rotate=(pi, pi, 0))
r.drawArrays('TRIANGLE')

r.glFinish('proyectoScene.bmp')
예제 #10
0
# Andrea Abril Palencia Gutierrez, 18198
# Lab1: Filling any Polygon --- Graficas por computadora, seccion 20
# 20/07/2020 - 27/07/2020

from gl import Render, color, convertir

imagen = Render(800, 460)
print("Esto suele tardar un poco!!!")
pol1 = [(165, 380), (185, 360), (180, 330), (207, 345), (233, 330), (230, 360), (250, 380), (220, 385), (205, 410), (193, 383)]
imagen.glColor(color(215, 189, 226))
imagen.Poligonos(pol1)
pol2 = [(321, 335), (288, 286), (339, 251), (374, 302)]
imagen.glColor(color(171, 235, 198))
imagen.Poligonos(pol2)
pol3 = [(377, 249), (411, 197), (436, 249)]
imagen.glColor(color(249, 231, 159))
imagen.Poligonos(pol3)
pol4 = [(413, 177), (448, 159), (502, 88), (553, 53), (535, 36), (676, 37), (660, 52), (750, 145), (761, 179), (672, 192), (659, 214), (615, 214), (632, 230), (580, 230), (597, 215), (552, 214), (517, 144), (466, 180)]
imagen.glColor(color(248, 201, 251))
imagen.Poligonos(pol4)
pol5 = [(682, 175), (708, 120), (735, 148), (739, 170)]
imagen.glColor(color(248,249,249))
imagen.Poligonos(pol5)
imagen.glFinish('poligonos.bmp')
print("¡Listo! La imagen esta creada con el nombre de 'poligonos.bmp'.")
예제 #11
0
from gl import Render, colorScale

#We draw our MainGL
mainGl = Render(1000, 500)

#We define our polygons

polygon1 = [(165, 380), (185, 360), (180, 330), (207, 345), (233, 330),
            (230, 360), (250, 380), (220, 385), (205, 410), (193, 383)]
polygon2 = [(321, 335), (288, 286), (339, 251), (374, 302)]
polygon3 = [(377, 249), (411, 197), (436, 249)]
polygon4 = [(413, 177), (448, 159), (502, 88), (553, 53), (535, 36), (676, 37),
            (660, 52), (750, 145), (761, 179), (672, 192), (659, 214),
            (615, 214), (632, 230), (580, 230), (597, 215), (552, 214),
            (517, 144), (466, 180)]
polygon5 = [(682, 175), (708, 120), (735, 148), (739, 170)]
polygon6 = [(100, 100), (100, 400), (800, 400), (800, 100)]

mainGl.glColorRGB(1, 0, 0)
mainGl.glDrawAndPaintPolygon(polygon1)
mainGl.glColorRGB(0, 1, 0)
mainGl.glDrawAndPaintPolygon(polygon2)
mainGl.glColorRGB(0, 0, 1)
mainGl.glDrawAndPaintPolygon(polygon3)
mainGl.glColorRGB(1, 1, 0)
mainGl.glDrawAndPaintPolygon(polygon4)
mainGl.glColorRGB(1, 0, 1)
mainGl.glDrawAndPaintPolygon(polygon5)

mainGl.glFinish('graphic1.bmp')
예제 #12
0
#Andrés Emilio Quinto Villagrán - 18288
#Lab 2 shaders

from gl import Render
#from gl import color

render = Render()
PLANET = "PLANET"

render.load("sphere.obj",
            translate=(400, 400, 0),
            scale=(250, 250, 350),
            shape=PLANET)
render.glFinish(filename="output.bmp")
예제 #13
0
파일: test.py 프로젝트: cesarvin/graficas
from gl import Render, color, V2, V3
from obj import Obj, Texture
from shaders import *

r = Render()
r.glCreateWindow(500, 500)

r.active_texture = Texture('./models/model.bmp')
r.active_shader = gourad

posModel = V3(0, 3, 0)
r.lookAt(posModel, V3(0, 0, -5))
r.glLoadModel('./models/model.obj', posModel, V3(2, 2, 2), V3(0, 0, 0))
r.glFinish('high_angle.bmp')

r.glClear()

posModel = V3(0, -3, 0)
r.lookAt(posModel, V3(0, 0, -5))
r.glLoadModel('./models/model.obj', posModel, V3(2, 2, 2), V3(0, 0, 0))
r.glFinish('low_angle.bmp')

r.glClear()

posModel = V3(0, 0, 0)
r.lookAt(posModel, V3(0, 0, -5))
r.glLoadModel('./models/model.obj', posModel, V3(2, 2, 2), V3(0, 0, 0))
r.glFinish('medium_angle.bmp')

r.glClear()
예제 #14
0
r.glLine(517, 144, 466, 180) 
r.glLine(466, 180, 413, 177)

#Figura 5
r.glLine(682, 175, 708, 120) 
r.glLine(708, 120, 735, 148) 
r.glLine(735, 148, 739, 170) 
r.glLine(739, 170, 682, 175)

print(r.framebuffer[0][0])

x = 0
y = 0
draw = False
last = b'\x00\x00\x00'

for i in (r.framebuffer):
	for j in i:
		if (j != b'\x00\x00\x00' and last == b'\x00\x00\x00'):
			draw = not draw
		if (draw == True and j != b'\xff\xff\xff'):
			r.framebuffer[x][y] =  b'\x51\x78\x35'
		last = j
		y += 1
	draw = False
	y = 0
	x += 1	


r.glFinish("out3.bmp")
예제 #15
0
from gl import Render

r = Render()
r.glInit(800, 600)

r.load('./sphere.obj', [1, 1, 1], [300, 300, 300])

r.glFinish('Planeta.bmp')
예제 #16
0
bitmap.active_texture = Texture('./Models/Textures/Body_Diffuse.bmp')
bitmap.active_shader = moss
bitmap.loadObjModel('./Models/bb-unit.obj', (900, 300, 0), (1.5, 1.5, 1.5),
                    (0, 30, 0))

bitmap.active_texture = Texture('./Models/Textures/arc170fighter.bmp')
bitmap.active_shader = gooch
bitmap.loadObjModel('./Models/Arc170.obj', (2300, 1700, 0), (0.5, 0.5, 0.5),
                    (0, 210, 30))

bitmap.active_texture = Texture('./Models/Textures/XWing2.bmp')
bitmap.active_shader = phong
bitmap.loadObjModel('./Models/X-Fighter.obj', (600, 1200, 0), (0.4, 0.4, 0.4),
                    (0, 25, 15))

bitmap.active_texture = Texture('./Models/Textures/R2D2_Diffuse.bmp')
bitmap.active_shader = toon
bitmap.loadObjModel('./Models/R2-Unit.obj', (3000, 200, 0), (2.5, 2.5, 2.5),
                    (0, -110, 0))

bitmap.active_texture = Texture(
    './Models/Textures/Water_Vaporator_Reflectivity.bmp')
bitmap.active_shader = sand
bitmap.loadObjModel('./Models/Vaporator.obj', (210, 280, 0), (3, 3, 3),
                    (0, 0, 0))

bitmap.glFinish('output.bmp')
# bitmap.glZBuffer('outputZbuffer.bmp')

print("El bitmap se genero exitosamente, revisa la carpeta contenedora")
from shaders import *

r = Render(768, 432)

r.active_texture = Texture('./models/model.bmp')
r.active_shader = phong

posModel = V3(0, 0, -5)

# Medium shot

r.lookAt(posModel, V3(0, -1, 0))

r.loadModel('./models/model.obj', posModel, V3(1, 1, 1), V3(0, 0, 0))

r.glFinish('medium.bmp')

# Low angle

r = Render(768, 432)

r.active_texture = Texture('./models/model.bmp')
r.active_shader = phong

posModel = V3(0, 0, -5)

r.lookAt(posModel, V3(0, -5, 0))

r.loadModel('./models/model.obj', posModel, V3(1, 1, 1), V3(0, 0, 0))

r.glFinish('low.bmp')
예제 #18
0
from gl import Render
from gl import color

bmpFile = Render()
bmpFile.glCreateWindow(800, 600)  # Screen size
bmpFile.glViewport(20, 20, 50, 150)
bmpFile.glClear()
bmpFile.glClearColor(0, 0, 0)  # Black
bmpFile.glColor(0.53, 0.80, 0.92)  # Added random color
bmpFile.glVertex(-1, -1)  # Point on left lower corner
bmpFile.glVertex(0, 0)  # Point on center
bmpFile.glVertex(1, 1)  # Point on right upper corner
bmpFile.glFinish()
예제 #19
0
                ##  it validates the coordinates given above
                if ((point_x < -1 or point_x > 1)
                        or (point_y < -1 or point_y > 1)):
                    print("\nPor favor escoger valores entre -1 y 1\n")
                else:
                    is_values_ok = True

                    ##  this function draws the point into the image
                    render.glVertex(point_x, point_y)
        else:
            print("Por favor escoja una opción válida!")

    ##      this function saves all the data edited above and writes all the changes into the image
    elif (option == 4):
        render.glFinish(filename)

    ##  this option will let you quit the program, it has a warnin message before quitting
    elif (option == 5):
        print(
            "Si se sale del programa y no ha guardado la imagen no se notará ningún cambio!"
        )
        exit = input("Desea salir del programa? (Si o No): ")

        if (exit.upper() == "SI"):
            wants_to_continue = False
        elif (exit.upper() != "NO"):
            print("Por favor escoja una opción válida!")

    else:
        print("Por favor escoja una opción válida!")
예제 #20
0
            g = float(g)
            b = input("Ingrese el valor b del color deseado (de 0 a 1): ")
            b = float(b)

            if((r < 0 or r > 1) or (g < 0 or g > 1) or (b < 0 or b > 1)):
                print("\nPor favor escoger valores entre 0 y 1\n")
            else:
                is_values_ok = True

                ##  changes the color of the lines
                render.glColor(r, g, b)

    ##  draws a face mask
    elif(option == 3):
        r.loadModel('./models/mask.obj', (5000, 2300), (300, 300))
        r.glFinish(filename)
        print("Termiado!\nPara ver todas las líneas, hacerle zoom a la imagen! \n")

    ##  draws a sunglasses
    elif(option == 4):
        r.loadModel('./models/Glasses.obj', (2200, 1500), (65, 65))
        r.glFinish(filename)
        print("Termiado!\n")

    ##  draws an f1 car
    elif(option == 5):
        r.loadModel('./models/f1.obj', (5000, 2300), (750, 750))
        r.glFinish(filename)
        print("Termiado!\n")
        print("Termiado!\nPara ver todas las líneas, hacerle zoom a la imagen! \n")
예제 #21
0
파일: examples.py 프로젝트: FR98/engine-3d
def biplane():
    render = Render(2000, 2000)
    render.load_model_2D('./models/Biplane/OBJ/HiPoly/Biplane.obj',
                         render.vector(0, 0), render.vector(200, 200))
    render.glFinish()
예제 #22
0
#Michael Chan 18562
#Graficas por computadora
#SR4FlatShading
from gl import Render

modelName = input('Ingrese el path del modelo: ')

r = Render()
r.glInit(800, 600)
r.load(modelName, [2, 2, 1], [150, 150, 150])
r.glFinish("SR4.bmp")
mainGl=Render(1000,500)

#We define our polygons

polygon1=[(165, 380), (185, 360), (180, 330), (207, 345), (233, 330), (230, 360), 
        (250, 380), (220, 385), (205, 410), (193, 383)]
polygon2=[(321, 335), (288, 286), (339, 251), (374, 302)]
polygon3=[(377, 249), (411, 197), (436, 249)]
polygon4=[(413, 177), (448, 159), (502, 88), (553, 53), (535, 36), (676, 37), (660, 52),
            (750, 145), (761, 179), (672, 192), (659, 214), (615, 214), (632, 230), 
            (580, 230),(597, 215), (552, 214), (517, 144), (466, 180)]
polygon5=[(682, 175), (708, 120), (735, 148), (739, 170)]
polygon6=[(100, 100), (100, 400), (800,400 ), (800, 100)]

mainGl.glColorRGB(1,0,0)
mainGl.glDrawAndPaintPolygonOddEven(polygon1)
mainGl.glColorRGB(0,1,0)
mainGl.glDrawAndPaintPolygonOddEven(polygon2)
mainGl.glColorRGB(0,0,1)
mainGl.glDrawAndPaintPolygonOddEven(polygon3)
mainGl.glColorRGB(1,1,0)
mainGl.glDrawAndPaintPolygonOddEven(polygon4)
mainGl.glColorRGB(1,0,1)
mainGl.glDrawAndPaintPolygonOddEven(polygon5)





mainGl.glFinish('graphicOddEven.bmp')
예제 #24
0
r.glLoadModel('./models/barril2.obj', V3(5.4, -1.5, 17), V3(1, 1.2, 1),
              V3(0, 0, 0))
#
# Cuarto soldado:
# shader:   greyScale
#
r.active_shader = greyScale
r.glLoadModel('./models/barril2.obj', V3(6.8, -1.5, 17), V3(1, 1, 1),
              V3(0, 0, 0))
print('Barriles cargados...')

#
# Se agrega el modelo del carro viejo con textura y shader.
# obj:      rusted_car.bmp
# textura:  rusted_car.obj
# shader:   phong
#
print('Cargando modelo de carro viejo...')
r.light = V3(0, 0, 1)
r.active_texture = Texture('./models/rusted_car.bmp')
r.active_shader = phong
r.glLoadModel('./models/rusted_car.obj', V3(10, -14, 31), V3(1, 1, 1),
              V3(30, 0, 0))
print('Carro viejo cargada...')

#
# finaliza la escena y se crea el archivo
##
print('\nEscena creada, grabando archivo...\n')
r.glFinish('escena.bmp')
예제 #25
0
from gl import Render

render = Render()
render.glColor(0.130, 0.240, 0.750)  #Color Azul Mustang

render.load('./cuerpo.obj', translate=[600, 300], scale=[100, 100])
render.glFinish()
예제 #26
0
# Andrea Abril Palencia Gutierrez, 18198
# SR6: Transformations --- Graficas por computadora, seccion 20
# 17/08/2020 - 24/08/2020

from gl import Render
from obj import Obj
from textura import Texture

modelo = Render(800, 800)
textura = Texture('./models/model.bmp')
posModel = (0, 0, 3)
modelo.lookAt(posModel, (-2, -2, -0.25))
# modelo.loadModel('./models/model.obj', posModel, (1,1,1),(0,0,0))
modelo.loadModel('./models/model.obj', posModel, (1, 1, 1), textura, (0, 0, 1))
modelo.glFinish('modelo_obj.bmp')
print("¡Listo! La imagen esta creada con el nombre de 'modelo_obj.bmp'.")
# Laboratorio 3 Tests.py

#Import our gl library
import math
from gl import Render, colorScale
from obj import Obj

#We draw our Raptor
mainGl = Render(1400, 1400)
mainGl.loadObjModel('raptor.obj', 700, 500)
mainGl.glFinish('graphic.bmp')

#We draw our Dinosaur
mainGl2 = Render(1400, 1400)
mainGl2.loadObjModel('dinosaur.obj', 700, 700, 5, 5)
mainGl2.glFinish('graphic2.bmp')

#We draw our Trex
mainGl3 = Render(1400, 1400)
mainGl3.loadObjModel('trex.obj', 700, 500, 3, 3)
mainGl3.glFinish('graphic3.bmp')

#We draw our Laptop
mainGl4 = Render(1400, 1400)
mainGl4.loadObjModel('laptop.obj', 700, 500, 25, 25)
mainGl4.glFinish('graphic4.bmp')

#We draw our Roulette
mainGl5 = Render(5000, 5000)
mainGl5.loadObjModel('roulette.obj', 2500, 500, 1, 1)
mainGl5.glFinish('graphic5.bmp')
예제 #28
0
파일: Main.py 프로젝트: DouglasDL28/gl
from gl import Render, color, V2, V3
from obj import Obj, Texture
import glMath

from shaders import *

import random

r = Render(1000, 1000)

r.active_texture = Texture('./models/earthDay.bmp')
r.active_texture2 = Texture('./models/earthNight.bmp')

r.active_shader = toon

luz = V3(0, 0, 1)
r.light = glMath.normalize(luz)

r.loadModel('./models/earth.obj', V3(500, 500, 0), V3(1, 1, 1))

r.glFinish('toon.bmp')