Visual Python


Krmiljenje oken

Krmiljenje vsebine okna


Sprva imamo odprto le eno okno z imenom "scene". Če v našem programu preprosto tvorimo objekte, na primer krogle, bodo ti umeščeni v to okno.

Metoda display() tvori okno s podanimi atributi, ga tudi izbere (da postane "selected display") in ga vrne v uporabo. Naslednji primer tvori dodatno okno velikosti 600 x 200. Ime mu bo Graf hitrosti". Okno bo na položaju (5,0,0). Barva ozadja bo modra:

scena2 = display (title='Graf hitrosti',
     width=600, height=200,
     center=(5,0,0), background=(0,0,1))


Metoda select()
postavi podano okno za izbrano okno ("selected display"). To pomeni, da bodo objekti privzeto risani v tem oknu. Primer:

scena3.select()


Metoda display._selected() vrne referenco na okno, v katerem trenutno tvorimo objekte (će še nismo tvorili nobenega okna, vrne "None").


Atribut foreground pomeni barvo na novo tvorjenih objektov, na primer kakšne krogle ipd.  Privzeta barva je bela. Primer uporabe:

scene.foreground = (1,0,0)  # barva tvorjenih objektov bo rdeca


Atribut background pomeni barvo ozadja v navedenem oknu. Privzeta barva ozadja je črna.

Atribut stereo predstavlja stereoskopsko možnost. Primer:

scene.stereo = 'redblue'

V tem primeru bo tvorjena rdeča scena za levo oko in modra za desno. Tako sceno lahko opazujemo z rdeče-modrimi stereoskopskimi očali. Če uporabimo

scene.stereo = 'active'

bi dobili izmenični sliki, primerni za stereoskopska očala "shutter glasses". Ukaz

scene.stereo = 'passive'
bi prikazal sceno v oknu dvojne širine, kar je smiselno, če uporabimo dva projektorja s polariziranimi stekli.  Privzeto pa je vrednost tega atributa 'nostereo'

Atribut stereodepth: Če damo temu atributu na primer vrednost 2 (privzeto je 1), dobimo občutek, da je scena povsem pred fizičnim zaslonom, kar drastično poveča stereoskopski učinek.

Atribut ambient pove količino neusmerjene, ambientne svetlobe. Privzeto je to enako 0.2. Poglej še druge atribute osvetljevanja.

Atribut lights: Seznam vektorjev, ki predstavljajo smeri od izvorov svetlobe. Magnituda vektorja pomeni jakost svetlobe. Primer:

scene.lights = [vector(1,0,0)]
scene.ambient = 0

V tem primeru bo scena osvetljena samo z desne strani. Ambientne svetlobe ne bo. Oba atribute moramo uporabljati previdno, saj lahko sceno tudi presvetlimo. 

cursor.visible: s tem lahko naredimo, da je kurzor miške viden ali neviden.To je včasih uporabno, na primer če objekte "vlečemo" z miško".

objects: Seznam v oknu vidnih objektov. Nevidni objekti niso v tem seznamu. Primer, kako vse objekte tipa "box" v sceni pobarvamo rdeče: 

    for obj in scene2.objects:
    if obj.__class__ == box  # lahko pisemo box ali 'box'
        obj.color = color.red

O  tem, kako dobimo položaj kamere, pa piše na strani o interakciji z miško.

 

Krmiljenje okna

x, y : Položaj okna na zaslonu, merjeno v pikslih od zgornjega levega roba. Primer:

scene.y = 200   # okno bo 200 pikslov pod vrhom zaslona

width, height : Širina in višina okna, podano v pikslih. Primer:

scene.height = 200

title: Besedilo, ki predstavlja naslov okna. Primer:

scene.title = 'Orbite planetov'

visible: S tem atributom zgotovimo, da je okno z dano sceno vidno ali nevidno. Primer:

scena2.visible = 0     # okno scena2 bo nevidno

fullscreen: S tem atributom zagotovimo, da je imenovana scena prikazana čez celoten zaslon. Iz tega režima izstopimo z gumbom Escape. Primer uporabe:

scena2.fullscreen = 1   # Scena2 bo prikazana cez cel zaslon

exit: Če je  "scena2.exit = 0", se program ne zaključi, ko okno zapremo. Normalno, privzeto velja "scena2.exit = 1" in z zaprtjem okna zaključimo tudi program.  

 

Krmiljenje pogleda

center: To je točka, v katero gleda kamera. Ta točka se ne spreminja, četudi spreminjamo položaj kamere. Če spremenimo "scene.center", bo kamera gledala v novo točko, razen če spremenimo "scene.forward" (ta atribut je opisan malo naprej). Privzeti center pogleda je (0,0,0).

autocenter:  Pogled, torej "scene.center" je stalno osveževan glede na središče najmanjše kocke (box), poravnane z osmi in ki vsebuje sceno. Drugače rečeno: Če program premika celotno sceno, bo središče te scene stalno v središču okna. 

forward: to je vektor, ki kaže v isto smer, v katero gleda kamera, torej od trenutne lokacije kamere (ki jo podaja " scene.mouse.camera") proti središču scene ("scene.center"). Če spremenimo vektor "forward", se spremeni položaj kamere tako, da še vedno gleda v središče scene. Privzeta vrednost je (0,0,-1).

fov Ime tega atributa pomeni "Field of view" oziroma zorni kot kamere. Podan je v radianih. Definiran je z maksimalno vrednostjo vodoravnega in navpiočnega zornega kota. Privzeto vrednost ima  pi/3.0 radianov (60 stopinj).

range Območje našega zanimanja za sceno vzdolž posameznih osi. To je vedno enako "1.0/scale", kar pomeni, da sta ta dva atributa soodvisna. Spreminjamo enega ali drugega. Pvivzeto velja  (10,10,10).

scale: Skalirni faktor, ki umeri območje zanimanja v kroglo enote (kroglo s polmerom 1). Privzeta vrednost je  (0.1,0.1,0.1).

uniform:  Pove, kako so umerjane posamezne osi.

scene.uniform = 0   # Posamezne osi imajo razlicne, neodvisne enote skaliranja
scene.uniform = 1  # vse osi imajo enake enot (privzeto je scene.uniform = 1)

up:  Vektor, ki predstavlja v sceni smer navzgor. Ta vektor bi na zaslon vedno projiciral navpično črto. Kamera se vedno vrti okoli te osi. Privzeto je vektor "up" poravnan z osjo y. 

Med  vektorjema "up" in "forward" obstaja  soodvisnost. Privzeto kaže kamera v smeri -z (0,0,-1). V tem primeru lahko za vektor "up" deklariramo os x ali y, ne pa osi z.Če naj bi navzgor kazala os z, moramo najprej nastaviti "forward" na kaj drugega (na primer na (1,0,0)).

autoscale: s tem atributom vklopimo ali izklopimo avtomatsko skaliranje. Privzeto velja "scene.autoscale = 1".

userzoom: s tem atributom vklopimo ali izklopimo možnost, da uporabnik sliko povečuje ali zmanjšuje. Privzeto je ta atribut enak 1. Primer:

scene.userzoom = 0   # uporabnik slike ne more povecevati

userspin: Če je ta atribut enak 0, uporabnik scene ne more vrteti. Privzeto je ta atribut enak 1.