19 - 01 - 2025
Main Menu
Who's online

We have 104 guests and no members online

Latest articles
Visitors
30355830
Today
Yesterday
This Week
This Month
Last Month
All days
6850
9262
50939
160721
288049
30355830

Old stories

Globe i AgetoAgeSqlite

User Rating:  / 0

Jeg har nå studert matematikken bak en 3D visning av en globe og fått den til å rotere om x, y og z aksen. Det er viktig å ha gode og korrekte formler for å vise 3D og var så heldig å finne meget gode formler her.

Nedenfor er et par eksempler på utviklingen. Jeg hadde tidligere tegnet opp hele verden og brukt ca 280 000 geografiske punkter, men før viste jeg det på en plan flate nå kan jeg vise disse punktene på en 3D kule som kan roteres. I skrivende stund er jordkloden gjennomsiktig slik at man ser landene på baksiden men dette er jo enkelt å unngå med å undersøke Z verdien på punktene. Hvis Z verdi er mindre enn null er punktet lenger borte enn planet som deler jordkloden i 2 halvdeler og skal følgelig ikke vises fra denne synsvinkel.

På skjermbildet under har jeg zoomet litt inn på Norge. Min jordklode består av ca 280 000 punkter men jeg kan redigere og legge til flere om ønskelig.

Jeg har ikke lastet opp denne versjonen av AgetoAgeSqlite som har denne Globen da litt enda gjenstår. Men kommer snart.

08-09-2011 - Lastet opp ny versjon av AgetoAgeSqlite med Globe. For å vise landene må man laste ned AtaGlobeData i tillegg og unzippe den til et eller annet sted på pc'n. Så velger man View/Globe og presser "q" på tastaturet da får man opp en fildialog der man velger denne filen (ataGlobeData.txt). Neste gang man velger View/Globe vil filen automatisk lastes.

For å rotere om x-aksen press "x" for y-aksen press "y" og for z-aksen press "z". For å zoome inn press "g" og for å zoome ut press "h". For å bevege seg i til sidene press F8 og F9 (hold nede shift for å bevege mer om gangen). For å bevege seg opp eller ned press F6 og F7 (shift for å bevege mere per gang).

Fantastisk å kunne zoome inn nesten ubegrenset. Jeg kan lett zoome inn så diameteren i globen blir over 500 000 pixler. Hvis jeg har satt oppløsning til 1200 pixler i skjerm bredden blir det ca 416 skjermbredder og sier vi skjermen er 0,5 m bred ser man altså da et bittelite utsnitt av denne globen som da er ca 208 meter i diameter.

Landarealer på baksiden av Globen blir vist i en gråtone og har man lagt til noen Locations med lengde og breddegrad blir disse markert med en grønn liten sirkel. Disse kan slås av/på med å presse "l" ("L").

11-09-2011 - Lastet opp ny versjon av AgetoAgeSqlite der Globen er blitt oppdatert med menyer for å sette farver og litt til. Jeg strevde litt med å finne riktig formel for å finne lengde og breddegrad for musepekeren når man beveger den over globen hvis man hadde rotert globen i alle retninger men det var selvsagt bare å reversere formelen for å finne x,y for en lengde og breddegrad.

12-09-2011 - Har lastet opp en ny oppdatering der Globen tegner kun de land som er på forsiden. Det oppstår litt problemer med dette da kartet mitt består av punkter som det trekkes linjer mellom. På bildet nedenunder er problemet illustrert man ser at en liten del av Afrika ligger på baksiden og det trekkes en rett linje fra de to punkter som ligger på forsiden. Jeg vil nå forsøke å løse dette problemet med å la programmet tegne opp en del av en sirkel med samme radius som globen mellom disse punktene.

13-09-2011 - Lastet opp ny versjon av AgetoAgeSqlite der Globen har blitt vesentlig raskere å bruke ved at programmet nå vil ikke plotte unødvendige detaljer når man ser hele halvkulen på en gang. Detaljene vil likevel ikke være synlig ved så liten målestokk så derfor mister man ikke noe heller. Man kan nå også dobbelklikke en steds markering (eller i nærheten) og få opp skjemaet som beskriver dette stedet. På bildet under har jeg valgt en mørk farve for stedene som er registert (hvor slektninger er født, blitt gift, bodd eller har hvilested)

13-09-2011 kl 23.58 - Lastet opp ny versjon av AgetoAgeSqlite der Globen har fått en forbedring av zoom funksjonen. Nå vil kartet zoomes inn/ut nøyaktig der musepekeren befinner seg. Dvs. hele Globen blir selvfølgelig større/mindre ved zooming men det punktet som ligger under musepekeren vil fortsatt være under musepekeren etter zooming. Jeg ble forresten ganske imponert av meg selv etter at jeg fant en utrolig enkel måte å få til dette på. Posisjonen til sentret i globen får lagt til differansen mellom avstander fra punktet som er under musepekeren til Center i globen før og etter zooming slik at sentret i Globen kanske enkelt bare blir flyttet til riktig sted for at punktet under musepekeren fortsatt skal være under musepekeren etter zooming.

Ny versjon lastet opp med mulighet for å måle distanser på Globen. Kurs og distanse blir beregnet etter storsirkel formler og en linje som følger storsirkelen blir tegnet opp. For å bruke funksjonen flytter man musen til det punktet på globen man vil reise fra og høyreklikker og velger "Measure distance/Set A" deretter flytter man musen til det punkt man vil reise til og høyreklikker og velger "Measure distance/Set B" da vil en linje som følger storsirkelen mellom disse to punkter bli tegnet opp og distansen vil bli vist.

 

 

Lastet opp ny versjon der Globen har blitt oppdatert igjen. Nå med en bedre funksjon som tegner opp en kurs fra et punkt til et annet. På bildet over har jeg satt A til et punkt i midten av Afrika og så har jeg flyttet musa rundt omkring dette punktet og satt forskjellige B steder. Når man setter B punktet kommer det nå opp et vindu der man kan klikke Calculate for å vise posisjoner mellom A og B. Jeg har satt alle avstander til å bli delt opp i 40 deler og så blir posisjonen får disse 40 punktene funnet etter storsirkel formel. Disse kan også skrives til en fil om ønskelig.

Jeg har nå lastet opp ny versjon av AgetoAgeSqlite med oppdatert Globe som nå har farve på landene. Samtidig har kurs og avstandsmåleren blitt forbedret og man får opp et vindu der man kan dele opp avstanden i ønsket antall deler og få beregnet kurs og geografisk posisjon på alle punkter mellom avreisested og fremkomststed. Jeg har definert kursen til å være 0 grader rett mot nord og 90 grader til å være rett mot øst og 180 grader rett mor sør og 270 grader rett mot vest og 360 grader eller 0 rett mot nord igjen. Dette er vel en vanlig definisjon skulle jeg tro.

24-09-2011 - Lastet opp ny versjon av AgetoAgeSqlite der Globen nå får fylt havet først med en dyp blåfarve så blir landene fylt med en gradient brush der man kan velge farvene. Man kan nå velge å vise stedsnavn eller ikke. For å zoome plasser musen der man ønsker og press "g" eller "h".

Jeg vil med det samme presisere at teknikken for denne Globen baserer seg på helt standard grafikk funksjoner innebygget i Windows slik at det vil kjøre på alle pc'er som har XP eller senere versjoner installert. Men det er mulig at jeg om litt tid vil lansere en versjon som vil benytte Direct3D som er det som benyttes i mange spill som krever rask grafikk. Jeg har allerede tatt en titt på dette og er mildt sakt himmelfallen over hvor raskt man kan rotere og snu på grafikken der. Men å programmere Direct3D krever litt innsats både når det gjelder tid og studering av eksempler på bruken av det. Men det gode er at dette biblioteket av prosedyrer og funksjoner er helt gratis og kan fritt lastes ned fra Microsoft for dem som ønsker å ta en titt på dette. Det er forøvrig to grafikk systemer som er aktuelle for programmere av rask grafikk som begge er gratis, det er OpenGL og DirectX. (DirectX er et fellesnavn for subsystemene Direct3D, DirectSound, DirectInput for å nevne det viktigste). Direct3D har innebygget funksjon for å lage en Globe der man spesifiserer ønsket oppløsning av lengde og breddegrader. Jobben min blir da å legge til Texture på Globen dvs. å legge på en overflate. Programmering av spill som bruker DirectX, OpenGl eller annet grafikk system som har direkte kontakt med skjermkortet krever at man har et 3D studio program, man kan selvsagt lage et enkelt spill uten dette men det vil ta lang tid  å programmere hvordan spillet skal se ut og koden vil bli meget komplisert etterhvert, derfor bruker man et 3D studio program der man designer alt sammen, for eks. tegner et hus der man kan gå inn i rommene og male vegger og tak, sette opp bilder på veggene, blomster i vinduene, dette er det man kaller Mesh (skjelett) og farver og hvordan overflaten ser ut er Texture og så eksporter man dataene for dette og setter Direct3D til å vise dette i det programmet man vil vise dette i. Dataene er vektorer og Direct3D kan beregne hvordan huset ser ut fra en ønsket synsvinkel på nesten null komma null, det fine er at man man laster inn disse vektorene og Direct3D vil da ta seg av det meste for å beregne hvordan det vil se ut etterhvert som man beveger seg inn i rommene. Har man et godt program for å designe 3D grafikk er det slett ikke så vanskelig eller tidkrevende å lage en scene der man kan vandre rundt omkring snu og vende på blomstervaser og annet. Jeg glemte en ting... man kan også laste ned 3D modeller som andre har laget og lagt ut gratis, f.eks hvis man ønsker å vise en BMW kan man sikkert finne en ferdig designet BMW som mesh og texture og så vise denne med Direct3D. Hvis man bruker den i et kommersielt program burde man da kontakte den som har laget denne modellen for å spørre om det er greit. Skal jeg drømme litt så vil jeg drømme om å designe en gammel seilskute og så kan man seile til østkysten av USA og så kjøper jeg billett på et gammelt damplokomotiv og reiser ut på prærien for å finne steder mine slektninger bosatte seg på der. Et profesjonelt 3D studio program er dyrt og kommer fort opp i kr 20 000 eller mer men det finnes også programmer som er OpenSource (kildekoden er ikke beskyttet med opphavsrett) og som er brukbare.

02-10-2011 - Lastet opp ny versjon av AgetoAgeSqlite der Globen har blitt oppdatert slik at man kan flytte den med musa i ønsket retning. Det er praktisk når man har zoomet inn og vil se litt lenger opp, ned, venstre eller til høyre. Man kan også  velge farve på havet. På skjermbildet under er de gule og røde markeringene steder der vi har slektninger, de gule er steder med foto. Litt gule og røde blomster pynter opp på kloden ja.

05-10-2011 - Ny oppdatering der man nå ser høyden man ser jordan fra, samtidig har jeg føyd til funksjon Goto som vil sentrere punktet under musen og en "Goto location" der man velger et sted fra databasen som blir sentrert på Globen. Har også rettet en liten feil i location listen.

Ny oppdatering av AgetoAgeSqlite er lastet opp. Nå er det mulighet for å slå av og på gradsirklene på globen. De er jo strengt tatt ikke nødvending for latitude og longitude vises nede til venstre i vinduet for hvor musepekeren befinner seg. Meget lærerikt å utvikle denne globen man lærer en masse om 3D og siden jeg ikke benytter noen modul for 3D grafikk må jeg programmere alt fra A til Å.

11-10-2011 - Lastet opp ny versjon der Globen har fått rettet en liten feil som oppstod når man høyreklikket og valgte Goto altitude (høyde over havet). Jeg hadde i farten snudd en formel feil, og dette er nå rettet. Så har jeg lagt til et høyreklikk valg i location listen som gir anledning til å få Globen til å sprette opp i et nytt vindu og samtidig blir altitude satt til 200 km slik at man ser dette stedet fra 200 km høyde. (dette betinger at stedet har fått satt lengde og breddegrad). Videre kan man nå også gå direkte til ønsket lengde og breddegrad (høyreklikk og velg Goto longitude, latitude). Dette punktet kommer da i senter på globen.

 

12-10-2011 - Ny oppdatering av globen i AgetoAgeSqlite. Jeg har skrevet ny prosedyre som tegner opp lengde og
breddegrad sirkler. Kun linjene på forsiden (halvdel av kulen som man ser) blir tegnet opp. Jeg har brukt rette linjer mellom punktene men dette kan selvfølgelig forandres til krumme linjer i senere versjon. En annen ting som er blitt oppdatert er "Goto altitude" (høyde over havet). Nå blir det punktet som var under musepekeren da man høyreklikket og valgte denne funksjonen satt til å vises på samme sted etter at høyden er satt, slik at man samtidig kan sette høyde over havet og det punkt man er interessert i å se ned på.

15-10-2011 - Lastet opp ny versjon med oppdatert gradsirkler.

17-10-2011 - Ny oppdatering av Globen. Man kan velge om man vil ha hel eller striplet gradsirkellinjer, krummet eller rett og markeringer for steder vil bli vist over disse linjene (ser bedre ut, ja).

Jeg arbeider også med en Globe som vil bruke Direct3D (Direct3D er inkludert i Windows95 eller alle senere versjoner). Jeg har nå skrevet en prosedyre som laster inn dataene (punktene for geometrien på landområdene) og kan rotere dette om x, y og z aksene. Det var nesten som sience fiction å se disse 280 000 linjene bli rotert med Direct3D. Så lett å zoome inn og ut og rotere lynkjapt om man vil.. og Direct3D har innebygget funksjon for å sette en MIN og MAX avstand for et punkt dvs at det blir enkelt å skjule landene som er på baksiden av globen. En liten demo nedenfor

 

 

OpenGL

User Rating:  / 0

OpenGL som står for Open Graphics Library er også et godt valg hvis man skal programmere rask og avansert 3D grafikk.

Om man velger DirectX eller OpenGL er mer hva man liker best å jobbe med, begge er gode og full av muligheter. DirectX er mer object orientert mens OpenGL er mer som Windows API. Jeg måtte prøve OpenGL og lagde en Globe med dette systemet. En liten demo her.

 

 

Direct3D rotasjon

User Rating:  / 0

 

Direct3D er utrolig utviklende å arbeide med og jeg har laget en ny demo på rotasjon av en Globe eller Sphere vil vel kanskje noen si. Jeg benytter 3 variabler som jeg kaller xRot, yRot og zRot og hver gang man trykker på X tasten på tastaturet vil xRot øke med 1.0, trykker man på Y tasten økes yRot med 1.0 og trykker man Z tasten blir zRot verdien økt med 1.0. Nå er det slik at man kan ikke rotere bare èn akse, altså trykker man på X tasten kan ikke globen bare rotere om X-aksen, grunnen er at det er upraktisk...fordi man har kanskje trykt på z og y tasten tidligere og disse verdiene er ikke lenger 0. Så hvis man bare roterte en akse for hver gang man trykket på x tasten så ville rotasjonen ikke henge sammen med de andre rotasjonene så man må rotere globen om alle tre akser for hver gang x tasten eller y og z tasten blir trykt. Nå prøvde jeg en annen rekkefølge på aksene som blir rotert og kom til et langt bedre resultat. Nå blir z-aksen rotert først, deretter x-aksen og til slutt y-aksen. Resultatet ble forbløffende, globen roterer riktig! Se video!

 

En ny liten demo på Direct3D, jeg har også noen små planer om å lage etterkommer trær og ane trær som vil vises med Direct3D, det vil gi uante muligheter for å snu og vende og ikke minst zoome på trærne.

 

Oppdatert Globe

User Rating:  / 1

Oppdatert globe i AgetoAgeSqlite (64bit versjonen er også blitt oppdatert). Jeg startet utviklingen av globen med å skrive mine egne prosedyrer for å håndtere denne med de innebygde tegne funksjoner i Windows og et problem som viste seg litt vanskelig å løse var å "klippe" landområdene slik at bare punktene på forsiden ble vist og ikke de som er på baksiden. Teoretisk er det et lett og oversiktelig problem å løse men å skrive prosedyrene slik at det fungerte i praksis viste seg å være en liten nøtt. Men nå fungerer det veldig bra. Her er et lite enkelt eksempel på problemet.

De gråe områdene må "klippes" vekk av det orginale landområdet og som sagt teoretisk er prosedyren grei nok men i praksis ikke så lett nei. Men omsider greide jeg det med å bruke en index på de punkter som ligger på vippepunktet til å skifte fortegn på Z verdiene. Det er ca 3000 polygoner med tilsammen ca 280 000 punkter som blir sent gjennom denne prosedyren hver gang men presser x, y eller z tasten på tastaturet. Men ikke alle polygoner blir fullstendig undersøkt, hvis hele polygonet er på baksiden blir det ignorert og hvis hele polygonet er på forsiden kan det tegnes opp uten noe om og men.

17-11-2011 - Lastet opp ny versjon som nå også viser hvor mange polygoner og punkter som blir tegnet opp. Man kan nå også plasere musen over et sted på globen og høyreklikke og velge "Add location" for å registere et nytt sted, lengde og breddegrad blir da automatisk satt og man behøver bare angi et navn på stedet.

24-11-2011 - Lastet opp ny versjon av AgetoAgeSqlite, der Globe vinduet har blitt oppdatert med automatisk oppdatering av vinduet, man kan nå også presse CTRL og holde den nede mens man trykker x,y eller z tasten for å gjøre en 1 grads rotering (uten CTRL roteres 10 grader). Worldmapdata filen er også oppdatert, nå er Sydpolen også med. Samtidig gjorde jeg en reduksjon av antall desimaler i datafilen som opprinnelig var 13 men nå redusert til 5 desimaler som er mer enn nok og reduksjonen førte til at filen ble halvert i størrelse, nå bare ca 5 MB.

64 bit versjonen er også oppdatert.

29-11-2011 - Ny oppdatering er lastet opp, Globe Course vinduet har fått en liten justering av designet.

 

 

05-12-2011 - Lastet opp ny  versjon av AgetoAgeSqlite der man nå kan tegne opp egne polygoner i Globen. Hvis man for eksempel ikke finner en øy som skulle vært der kan man tegne den opp selv. Jeg har selvfølgelig ikke tegnet opp absolutt alle øyer som finnes i verdenshavene så det kan godt hende at man savner noe. Man kan selvfølgelig lagre endringene også. (finnes på File menyen)

06-12-2011 - Lastet opp ny versjon av AgetoAgeSqlite (32 bit) med mere redigerings muligheter i Globen. Man kan sette focus på det nærmeste punktet til musepekeren og og flytte dette punktet med å velge Move point og så bare bevege musen til ønsket posisjon og venstreklikke. Man kan også sette inn et nytt punkt midt mellom fokus punktet og det forrige punktet i polygonet. Man kan flytte fokuspunktet rundt polygonet med å presse "N". For å gå tilbake press Shift + N.

32 og 64 bit versjon oppdatert

User Rating:  / 0

Ny oppdatering av AgetoAgeSqlite er lastet opp og både 32 og 64 bit versjonen er oppdatert. Ikke så mye nytt men størrelse og posisjon på Globen  blir lagret, når man avslutter. DirectX har jeg enda ikke fått implementert men det blir spennende og se hva jeg kan få til med litt tid og stunder.