Grafični objekti


Osnovni grafični objekti

Katere grafične gradnike sploh imamo, če hočemo pripraviti 3D sceno? Oglejmo si pregled grafičnih gradnikov ali bolje objektov. Za vsak objekt je podan primer njegove tvorbe, torej primer uporabe konskruktorja. V nekaterih primerih je podan tudi opis atributov. Pregled dopolnjuje naslednja stran, ki pove, kaj lahko z objekti sploh počnemo. objekti počnemo.


Več o grafičnih gradnikih lahko preberemo tudi v originalni dokumentaciji VPython.

Krogla (sphere)




Primer tvorbe krogle

krogla = sphere (pos=vector(1,2,1), radius=2)

Primeri sprememb položaja in barve krogle: 

krogla.pos = vector(15,11,9) # spremeni položaj (x,y,z)
krogla.pos.x = 15               # sprememba le  položaja.x
krogla.color = vector(0,0,1)   # krogla bo modra

Kvader (box)





Primer tvorbe kvadra

kvader = box (pos=vector(0,0,0), axis=vector(1,1,1), length=5, height=3, width=4)
#atribut axis pomeni smer kvadra (rotacija v oseh x,y,z)

Valj (cylinder)




Primer tvorbe cilindra

predmet = cylinder (pos= vector(0,-0.5,1), axis= vector (2,1,-1), radius=1)

Središče enega konca cilindra je pri x=0, y=-0.5, z=1. Smer in dolžino cilindra določa vektor (2,1,-1). Polmer cilindra je 1.

Atributi cilindra in njihove privzete vrednosti so:
 pos (0,0,0), x (0), y(0), z(0), axis (1,0,0), length (1), color (1,1,1) kar je color.white, red (1), green (1), blue (1), up (0,1,0).


Stožec (cone)



Stožec ima krožni prerez in se zožuje v vrh. Primer tvorbe stožca:

stozec = cone(pos= vector(-3,1,0), axis=vector(4,0,0),radius=2)

Stožec ima večino atributov in njihovih privzetih vrednosti kot cilinder. Poleg tega ima še atribut radius, ki je polmer širokega konca stožca. Privzeta vrednost je 1.

Piramida (Pyramid)


Piramida ima pravokoten prerez in se zožuje v vrh. Primer tvorbe piramide:

piramida = pyramid (pos= vector(0,-1,0),size= vector(4,4,6))

Piramida ima enake atribute kot cilinder. Poleg tega ima še dodatne atribute:.
height : višina v smeri y,privzeto 1)
width: širina v smeri z, privzeto 1
size (dolžina, višina, širina), privzeto (1,1,1)

Obroč (ring)



Primer tvorbe obroča:

obroc = ring(pos= vector(-1,-1,-1),axis= vector(0,0,1), radius=3, thickness=1)

Atribut axis vpliva le na smer, ne pa na velikost obroča. Dodatna atributa obroča sta:
radius zunanji polmer obroča, privzeto = 1
thickness: debelina obroča(1/10 polmera, če ni drugače določeno)

Elipsoid (ellypsoid)


Primer tvorbe elipsoida

cepelin = ellipsoid (pos= vector(-0.2,-0.1,0),length=10, height=2, width=4, axis= vector(1,1,1))

Dolg elipsoid je podoben cigari, kratek spominja na tableto. Atributi elipsoida so enaki atributom kvadra.


Krivulja (curve)



Primer tvorbe krivulje

krivulja = curve (pos=[vector(0,0,0), vector(1,0,0), vector(2,1,0), vector(1.7,2,0), vector(0,3,0), vector(-2,3,0), vector(-3,1,0), vector(-3.5,0,0)], radius=0.2)

Krivulje prikazujejo preme črte med točkami. Krivuljo lahko podamo z eksplicitnim zaporedjem koordinat, vpisanih med oklepaji, tako kot pri vseh Pythonovih seznamih. Nekateri atributi, kot na primer pos (položaj) ali color (barva) se od točke do točke na krivulji lahko razlikujejo. Te atribute hranimo v številčnih poljih.  števila v takih poljih lahko dostopamo z naslavljanjem n-tega elementa v zaporedju Tako je  krivulja.pos[0] položaj prve točke v krivulji "krivulja.

Več podrobnosti o krivuljah.

Helix (vijačnica)


Tako naredimo vzmet, poravnano z osjo x:

vzmet = helix(pos=vector(-2,0,1), axis=vector (2,0,0), length=5, radius=2, thickness=0.4)

Objekt helix ima naslednje atribute oziroma njihove privzete vrednosti:
 pos (0,0,0), x (0), y(0), z(0), axis (1,0,0), length (1), radius (0.2), coils (5), thickness (radius/20), color (1,1,1) kar je color.white, red (1), green (1), blue (1), in up (0,1,0)

Opomba:  atribut pos za cylinder, arrow, cone, pyramid in  helix ustreza enemu koncu objekta, pri objektih  box, sphere ali ring pa to ustreza središču objekta.

Puščica (arrow)



Puščico naredimo tako:


puscica = arrow (pos=vector(-1,0,1),axis= vector(5,0,0), shaftwidth=1)

Puščica ima enake atribute kot na primer cilinder. Poleg tega pa še naslednje:

shaftwidth, privzeto shaftwidth = 0.1*(dolžina puščice)
headwidth, privzeto headwidth = 2*shaftwidth
headlength, privzeto headlength = 3*shaftwidth

Tekst (text)





3D Tekst tvorimo tako:

besedilo = text (pos= vector(-10,3,0),text='Lep pozdrav', color=color.red, depth=0.3, justify='center')

Oznaka (label)



Objekt label omogoča prikaz oznake v okvirju, s črto povezanem z določeno točko. Slika na levi kaže tekst Earth (zemlja), povezan s kroglo, ki naj bi predstavljala zemljo. V tem primeru bi tekst tvorili tako:


earth = sphere()
earthlabel = label (pos=earth.pos, text='Zemlja', xoffset=20, yoffset=12, space=earth.radius, height=10, border=6)

Posebnost objekta "label" je, da je več atributov navedenih v pikslih zaslona in ne v "svetovnih koordinatah". 






Konstruktorji s privzetimi vrednostmi

Objekte lahko poenostavljeno določimo z naslednjimi privzetimi vrednostmi:

cylinder() je enako kot cylinder(pos= vector(0,0,0), axis= vector(1,0,0), radius=1)

arrow() je enako kot arrow(pos= vector(0,0,0), axis= vector(1,0,0), radius=1)

cone() je enako kot cone(pos=vector(0,0,0), axis= vector(1,0,0), radius=1)

pyramid() je enako kot pyramid(pos= vector(0,0,0), size= vector(1,1,1), axis= vector(1,0,0))

sphere() je enako kot sphere(pos= vector(0,0,0), radius=1 )

ring() je enako kot ring(pos= vector(0,0,0),axis=vector(1,0,0),radius=1)

box() je enako kot box(pos= vector(0,0,0), size= vector(1,1,1))

curve() vzpostavi "prazno" krivuljo, kateri lahko točke priključujemo (append)