AgetoAge Genealogy

Påbegynt det som jeg foreløpig kaller VertexShow. Dette programmet vil bli en enkel 3D editor. Teknologien som brukes er OpenGL via OpenTK. Man skal kunne tegne ved å sette inn 3D punkter og lage triangler mellom disse og man kan sette inn standard objekter som f.eks kuber, sylinder etc. og redigere disse.

Det er et eget vindu for å tegne et 2D polygon som blir triangulert automatisk og så får en dybde slik at det blir til et 3D polygon.

Har nå føyd til en funksjon som halverer et triangel.

Lagt inn funksjon som deler et triangel inn i 4 triangler. Senter (0,0,0) blir nå satt til senter av redigeringsvinduene.

I polygon editoren kan man sette et bakgrunnsfoto for å kunne tegne etter dette.

Lagt til sylinder objekt, valg av radius, sirkelinndeling og høyde.

Man kan nå også plassere ut et angitt antall objekter i en sirkel.

Fått til lokal rotering av objektene man plasserer ut. Objekter blir rotert om tyngdepunktet.

Lagt til skaleringsfunksjon. Lagt tilp en ny tabkontroll som viser egenskaper for det verktøyet  man klikker.

Lagt til "Plane" funksjon. Lager et plan med oppgitt bredde og høyde som er inndelt i valgt antall rader og kolonner. Denne funksjonen er fin til å lage landskap med.

Testet compilering av fragmentshader.

Lagt inn import av en Collada (*.dae) fil.

 

19-10-2014

Fått til en funksjon som eksporterer til collada formatet.

 

Etter at jeg kunne eksportere til collada formatet har jeg bare brukt Sketchup til å arbeide med modellen av gården Kjærstadbakken. Det var spesielt interessant å tegne opp høydelinjene etter et kart og så bruke funksjonen "From contours" til å lage landskapet.

 

24.11.2014

Lagd default texture i VertexShow.

 

25.11.2014

Påbegynt Contours i VertexShow.

 

11.01.2015

Fått til en extrude funksjon

som regner  ut normalen til planet som skal ekstraktes. Det gjør det enkelt å kopiere  planet ut til ønsket   avstand.

 

25.01.2015

Fått til  en offset  funksjon som bruker vektorregning til å beregne offset punktene.

 

21.02.2015

Føyd til en funksjon som kan flytte et objekt langs den aksen man roterer rundt i rotate funksjonen. Det gjør det enkelt å lage f.eks gjenger.

 

26.02.2015

Føyd til en funksjon som lager en bue som blir skalert til det rektanglet som brukeren drar opp for yttergrensene til buen.

Har også føyd til en funksjon som finner avstanden mellom to punkter  i 3D.

 

01.03.2015

Forbedret offsetfunksjonen og den fungerer også på et sirkelplan og et bueplan. Har også forbedret opptegningen av objektene.

 

08.03.2015

Fant kode som gjør at man kan rotere objektene, zoome og panere. Altså en ArcBall kode og den fungerer veldig bra. Så har jeg lagt inn mulighet for bruke eksakte verdier ved konstruksjon av sirkler.

 

16.03.2015

Legger nå inn kode for finne trianglene man klikker på i 3D vinduet.

 

25.03.2015

Fått til å beregne skjæringspunktene for et triangel som skjærer gjennom  et eller flere andre triangler. Intersections

 

01.04.2015

Definert en stack for å kunne lagre status på flere nivåer for å kunne lage Undo funksjon.

 

13.04.2015

Rettet vertex rekkefølgen i trianglene i sirkelplanet.

 

17.04.2015

Kjøpt ny pc HP Paviljon 500-312no.

Installerte AgetoageSqlite og VertexShow uten problemer.  Jeg instalerte så Visual Studio Express 2008 fra en virtual stasjon som jeg opprettet  fra en ISO fil av filene. Kopierte så kildefilene for Agetoage og VertexShow til ny pc og kunne kompilere programmene uten problem.

 

11.05.2015

Lagt til opsjon for å bruke "Gravity" i 3D vinduet ved bruk av Arcball. Dette gjør at Y-aksen holdes loddrett under rotasjonene.

 

26.05.2015

Føyd til u og v komponenter til Vertex og ved å sette disse til sin og cos av x og y får man et pent sammenhengende texture rundt globen f.eks. Forandret dette til å bruke normalen.

 

31.05.2015

Lagd det slik at det blir "riktig" texturemapping når man lager rektangler, plan eller polygoner.

Men må nok da utvide Save funksjonen slik at UV verdiene blir lagret også.

 

01.06.2015

Nå blir UV verdiene også lagret.

Har også fått til riktig UV beregning i alle vinduene.

 

03.06.2015

Revidert funksjonen  som lager et plan. Den lager nå diagonaler ut til hjørnene.

 

04.06.2015

Laget en parabel funksjon som finner y for en x verdi og man kan så plotte punket inn om man ønsker.

 

08.06.2015

Laget et eget vindu for parametre etc. for parabel funksjonen og man kan velge hvilket plan den skal tegnes opp i (x,y - z, y eller x,z)

 

09.06.2015

Rettet litt på parabel funksjonen.

 

13.06.2015

Lagt til en Catmull Mul  spline funksjon og en ny funksjon for parabel a(x-h)+k som gjør det enkelt å flytte parabelen. Man kan nå også lage offset fra et valgt antall punkter. En funksjon for å velge to utvalg av punkter for å triangulere mellom disse er også føyd til.

En funksjon som lager en sirkel fra tre punkter er også lagt til.

 

15.06.2015

Lagt til avkryssingsbokser for om man ønsker at nye punkter skal være "valgt" når man lager nye vertexer for hånd eller ved parabelfunksjonene.

 

16.06.2015

Lagt til en funksjon  som velger alle punkter i de trianglene som er valgt.

 

21.06.2015

Lagt til funksjon som kan rotere objekter rundt en akse som brukeren definerer med å velge to vertekser. Et par funksjoner for å la noen valgte triangler få sine egne vertekser er også føyd til.

Så har jeg også utviklet en funksjon som triangulerer to sett med punkter TriangTwoPaths som gjør det enkelt å tegne et 3D landskap etter høydelinjer på et kart som legges som bakgrunnsbilde..

 

02.08.2015

Lagd funksjon som finner kantene (edges) i en mest.

Meget viktig funksjon å ha.

 

04.08.2015

Utvidet med funksjon som finner borders også.

 

06.08.2015

Nå er intersections så bra at alle nødvendige punkter blir funnet.

Neste skritt blir å triangulere trianglene på nytt med intersections punktene.

 

15.08.2015

Lagt inn ny Deleanau triangulering funksjon som triangulerer et sett av punkter som kan være helt vilkårlig lagt inn.

 

17.08.2015

Lagt inn Vertex Info som viser data for verticene til et utvalg av triangler.

 

20.08.2015

Lagt inn funksjon som sletter flere triangler som har samme i.

 

05.10.2015

Utvidet divide funksjonen for å dividere avstanden mellom punkter slik at man kan velge et antall punkter å dele inn i.

 

Nå kan man også speile punkter horisontalt eller vertikalt og man kan lage en offset for et utvalg av punkter.

 

20.10.2015

Lagd ny offset som finner alle kantene til de utvalgte triangler og ordner disse i riktig rekkefølge, dermed finnes alle punktene også i riktig rekkefølge. En kant blir definert med et start og sluttpunkt. Neste kant vil da ha startpunkt hvor forrige kant hadde sluttpunkt.

 

Kantene finnes ved å telle hvor mange triangler som har denne kanten av de valgte triangler (selected).

 

01.11.2015

Har oppdatert rotate about any axis slik at de orginale punktene beholdes men får beregnet nye verdier.

Aksen man roterer rundt blir vist med en 2 pixel tykk strek.

 

03.11.2015

Fant bedre kode for å rotere et punkt rundt en egendefinert akse. Denne koden bruker matriseregning  og er enkel og grei og uten noe om og men. Fungerer veldig bra.

 

I programmerings verdenen er det stadig nye teknikker å finne og jeg skal her beskrive en utrolig interessant måte å lage en Sphere på. Det finnes vel i hovedsak 2 måter å lage den på: 
  • Ved å bruke lengde og breddegrader og bruk av trignometri
  • Ved å lage et oktahedron og så divdidere alle trianglene et ønsket antall ganger
 
Det er den siste måten som er en utrolig artig måte å gjøre det på. Den er også svært rask og matematikken er utrolig enkel og man trenger ikke å bruke Cos, Sin og Tan. Man finner X, Y og Z ved enkel 3Dvektor regning. Hele kulen vil bli delt nøyaktig inn i like store triangler og man starter med en enkel oktahedron som er 2 paramider satt i mot hverandre. Hver paramide har 4 triangler (vi trenger ikke bunnen) og oktahedronet vil da ha 8 triangler.
Vi bruker en enhet på 1 og lager en liste med verticer og en liste med triangler
 
octahedron_vertices =  
 
   (1.0, 0.0, 0.0),  (-1.0, 0.0, 0.0),  (0.0, 1.0, 0.0),  (0.0,-1.0, 0.0),  (0.0, 0.0, 1.0),  (0.0, 0.0,-1.0)
 
Her har vi x, y og z for de verticene vi trenger for oktahedronet.
 
octahedron_triangles = 
    [ 0, 4, 2 ],   [ 2, 4, 1 ],    [ 1, 4, 3 ],    [ 3, 4, 0 ],    [ 0, 2, 5 ],    [ 2, 1, 5 ],    [ 1, 3, 5 ],    [ 3, 0, 5 ]
 
Her har vi de 8 trianglene, hvert triangel har som kjent 3 hjørner og x, y og z for hvert av disse hjørnene finnes ved indexene til verticene. La oss se på det første trianglet som er 0, 4, 2. Punktene er i såkaldt clockwise rekkefølge.  Vi finner da x, y og z for det første punktet som er 0 ved å se på det første elementet i vericelisten som er 1.0, 0.0, 0.0
Så lager vi en funksjon som dividerer alle trianglene inn i 4 nye triangler og for å finne x, y og z for disse 
 
Så kommer 3Dvektorregningen i bruk for å finne x, y og z for de nye vektorene a, b og c regner vi slik: 
 
a = (V0 + V2) * 0.5 =   
b = (V0 + V1) * 0.5 = 
c = (V1 + V2)* 0.5 =
 
a.X = (V0.X + V2.X) * 0.5 = (1.0 + 0.0) * 0.5 = 0.5
a.Y = (V0.Y + V2.Y) * 0.5 = (0.0 + 1.0) * 0,5 ) = 0,5
a.Z = (V0.Z + V2.Z) * 0.5 = (0.0 + 0.0) * 0.5) = 0.0
 
b.X = (V0.X + V1.X) * 0.5 = (1.0 + 0.0) * 0.5 = 0.5
b.Y = (V0.Y + V1.Y) * 0.5 = (0.0 + 0.0) * 0,5 ) = 0,0
b.Z = (V0.Z + V1.Z) * 0.5 = (0.0 + 1.0) * 0.5) = 0.5
 
c.X = (V1.X + V2.X) * 0.5 = (0.0 + 0.0) * 0.5 = 0.0
c.Y = (V1.Y + V2.Y) * 0.5 = (0.0 + 1.0) * 0,5 ) = 0,5
c.Z = (V1.Z + V2.Z) * 0.5 = (1.0 + 0.0) * 0.5) = 0.5
 
Så normaliserer vi a, b og c 
 
lens = ROT(a.X^2 + a.Y^2 + a.Z^2)
 
a.X = a.X / lens = 0.7071068
a.Y = a.Y / lens = 0.7071068
a.Z = a.Z / lens = 0
 
lens = ROT(b.X^2 + b.Y^2 + b.Z^2)
 
b.X = b.X / lens = 0.7071068
b.Y = b.Y / lens = 0
b.Z = b.Z / lens = 0.7071068
 
lens = ROT(c.X^2 + c.Y^2 + c.Z^2)
 
c.X = c.X / lens = 0
c.Y = c.Y / lens = 0.7071068
c.Z = c.Z / lens = 0.7071068
 
Så legger vi disse til i vericelisten og og oppdaterer trianglelisten.
 
Slik blir globen uten noen divideringer altså bare en oktahedron
 
 
etter 1 dividering blir den som vist under
 
 
etter 2 divideringer
 
 
Når denne divideringen av trianglene er utført 3 ganger får vi 8 * 4^3 = 512 triangler og disse er helt nydelig beregnet UTEN BRUK AV COS, SIN og TAN ....bare helt UTROLIG!!!!!
 
 
Så kan vi jo dele alle trianglene en gang til hvis vi har lyst og da får vi 8 * 4^4 = 2048 triangler som også bare er helt utrolig fine!
 
 
etter 5 divideringer
 
 
etter 6 divideringer
 
 
Men vi kan dele trianglene en gang til slik at vi får 8 * 4^7 = 131072 triangler og slik ser det ut:) Her er hvert triangel så lite at det trengs 97 triangler for å dekke overflaten av Norge.
 
 
Vi kan selvfølgelig fortsette å dividere men vi stopper her for denne gang... og utgangspunktet var altså et oktahedron eller 2 pyramider satt mot hverandre. Denne funksjonen finnes i VertexShow som kan lastes ned fra Downloads.
 
Pics of the day
ancestorquote.gif