[3d] Zelf een Z-Buffer bakken (?)

Pagina: 1
Acties:
  • 157 views sinds 30-01-2008
  • Reageer

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Allereerst: JA, ik heb de search gebruikt, en daarna ben ik huilend weggerent. Vandaar dit topic.

Ik heb zelf een paar dinkies in Visual Basic en C++ in elkaar gezet, die het mogenlijk maken triangles te laten draaien op drie assen. Niets boeiends. Daarna ben ik die boel gaan opvullen (door zelf puntjes te zetten, niet dmv floodfill), ook niets boeiends. Alleen nu wil ik graag dat ie alleen maar de boel opvult, als dat ook daadwerkelijk nodig is, dus liever niet wanneer er al een surface is ingekleurd wat dichter bij de "camera" zit...

code:
1
2
3
4
5
6
7
8
9
       3
      /\
     /  \
    /    \
   /      \
  /        \ 
 /          \
/----------\
1             2


Ik heb nu een loop die van punt 1 naar punt 3 loept. Omdat ik de Z van alle punten weet, kan ik dus de huidige Z bereken (op lijn 1-3 dan) door (Z3/Z1)*Teller. Dat zelfde moet ik aan de andere kant doen (lijn 2-3). Dan moet ik in de sub die een lijn inkleurt d.m.v. puntjes te prakken ook weer de verhouding berekenen tussen punt A en punt B (Punt A en punt B krijgt die sub mee van de sub die de loop maakt), maal het punt waar ik ben.

Samen gevat:

Sub1 loopt van Y1 tot Y3 en roept Sub2 aan met de X coordinaat die bij de Y van de loopt hoort. Sub2 heeft vervolgens een loop van X1-3 tot X2-3. En hier ergens moet ik dus de Z coordinaat, op een slimme en snelle manier berekenen... Volgens mij is mijn manier omslachtig, traag, en onhandig. Mijn vraag daarom: zijn hier slimme manieren voor? Wat gebruiken echte games?

Thanks for reading....

_/-\o_

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 19-08 16:21
Battle_Bunny schreef op 10 september 2002 @ 13:49:
... zijn hier slimme manieren voor? Wat gebruiken echte games?
direct 3d / opengl?

de scene_* functies van allegro (alleg.sourceforge.net) zijn ook wel redelijk snel. misschien kun je daar wat ideen uit halen. niet kopieeren he want dat is foei ;)

edit: hmm volgensmij heb je hier nix aan.... maar waarom neit gewoon d3d?

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Tja, "echte" games gebruiken D3D, OGL... Maar ikke dus niet. De bedoeling is dat alles zelf geschreven is. Kopieeren zal ik niet doen, en een API gebruiken al helemaal niet... Thanks for the link.

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 19-08 16:21
heb je geluk dat ik op stage nix te doen heb :D

kijk eens op http://tfpsly.planet-d.net/Docs/3dIca/3dica.htm

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Battle_Bunny schreef op 10 september 2002 @ 13:58:
Tja, "echte" games gebruiken D3D, OGL... Maar ikke dus niet. De bedoeling is dat alles zelf geschreven is. Kopieeren zal ik niet doen, en een API gebruiken al helemaal niet... Thanks for the link.


Nofi hoor, maar waarom ga je het wiel nog eens opnieuw uitvinden?

https://fgheysels.github.io/


Verwijderd

Cool eindelijk weer iemand die die-hard een software renderer schrijft, als je zoekt naar PCGPE vind je een redelijke verzameling documenten die de basis uitleggen, voor je Z buffer kan je denk ik het praktisht dmv een span buffer doen (s-buffer) wow.. sentimentele flashback ;)

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 19-08 16:21
offtopic:
pcgpe's adlib.txt roeleert :D

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
[b]
Cool eindelijk weer iemand die die-hard een software renderer schrijft, als je zoekt naar PCGPE vind je een redelijke verzameling documenten die de basis uitleggen, voor je Z buffer kan je denk ik het praktisht dmv een span buffer doen (s-buffer) wow.. sentimentele flashback ;)
LOL. * Battle Bunny gaat weer zoeken :)

En software it is. Front-end in VB (lekker simpel), bulk code in C++ en de echte zware code in ASM :)
pcgpe's adlib.txt roeleert :D
Bij adlib denk ik aan iets anders... (geluidskaart :X )
Nofi hoor, maar waarom ga je het wiel nog eens opnieuw uitvinden?
Dit heeft niets met "uitvinden" te maken. Ik wil gewoon meer weten over de hele 3D zut, en dat doe je beter door het zelf te maken. Daarbij komt dat het gewoon leuk is. Een D3D engine schrijven kan iedereen (NoFi), een software engine niet.

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 19-08 16:21
Battle_Bunny schreef op 10 september 2002 @ 14:29:
Bij adlib denk ik aan iets anders... (geluidskaart :X )
ik ook hoor daarom stond er offtopic bij :)
LOL. * ruuds gaat weer zoeken :)
kijkt naar mijn 2e post in dit topique

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Battle_Bunny schreef op 10 september 2002 @ 14:29:
[...]

Dit heeft niets met "uitvinden" te maken. Ik wil gewoon meer weten over de hele 3D zut, en dat doe je beter door het zelf te maken. Daarbij komt dat het gewoon leuk is. Een D3D engine schrijven kan iedereen (NoFi), een software engine niet.


Ah OK, als je meer wilt bijleren enzo dan kan ik erin komen.

https://fgheysels.github.io/


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Als je perse zelf snel driehoekjes wilt gaan tekenen zonder gebruik te maken van api's is het mischien handig om een driehoek door te knippen. (Als je dat al doet, negeer dit bericht dan maar)

Er zijn 2 gevallen
1 Een driehoek heeft al een horizontale edge
2 een driehoek heeft nog geen horizontale edge

Waneer 2 geldt kun je de driehoek doorknippen door een horizontale lijn door het middelste hoekpunt te trekken. Je hebt nu 2 driehoeken met een horizontale edge.

Waarom dit? Nou heel simpel.. Nu kun je allemaal horizontale lijnen tekenen vanaf de linker edge tot de rechter. Omdat hierbij de Y niet veranderd gaat dit een stuk sneller..

Over je Z buffer:
Waneer je je Y constant houd hoef je nog maar langs een paar assen te schalen. Z-buffer is heel simpel. Gewoon een buffer ter grote van het scherm waarin je de Z waarden opslaat. z groter dan huidige? dan tekenen en buffer updaten, anders niet..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
heb je geluk dat ik op stage nix te doen heb :D

kijk eens op http://tfpsly.planet-d.net/Docs/3dIca/3dica.htm
:? :? :?

Dat doe je op een stage? Holy sh*t! Schrijf een boek, man! Geweldig!

_/-\o_ _/-\o_ _/-\o_

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 19-08 16:21
Battle_Bunny schreef op 10 september 2002 @ 14:36:
[...]


:? :? :?

Dat doe je op een stage? Holy sh*t! Schrijf een boek, man! Geweldig!

_/-\o_ _/-\o_ _/-\o_
nee ik heeft dat niet geschreven :D ben ik 2 maanden geleden ofzo een keer tegengekomen.

veel suc7 ermee,

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Ah OK, als je meer wilt bijleren enzo dan kan ik erin komen.
Mooi. Want daar gaat het ook om. Hiervoor kende ik niets van polygonen, nu weet ik er een stukje meer van, en kan ik met triangles werken, etc. Ook heb ik alles "even" geconverteerd naar C++ code (ipv Visual Basic), en ben ik nu bezig met ASM te leren. Allemaal speciaal hiervoor.


Janoz:

Hoe de Z-Buffer himself werkt wist ik zo ongeveer, alleen hoe ik aan die waardes moet komen niet helemaal. Overigens knip ik inderdaad m'n driehoeken al door de midden (if needed), want zonder dat kwam ik er echt niet uit :P

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
nee ik heeft dat niet geschreven :D ben ik 2 maanden geleden ofzo een keer tegengekomen.
De floepert! Anyway, "even" alles uitgeprint om wat leesvoer in de trein te hebben :)

Goed verhaal!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

normale z-waarden kun je overigens niet interpoleren, omdat de z coordinaten in het canonnical viewport (dus x,y,z coordinaten getransformeerd naar x,y coordinaten door te delen door z) niet lineair lopen. 1/z loopt echter wel lineair, en dat zijn dus ook de waarden die in de z-buffer staan (eigenlijk w-coordinaten, maar laten we het daar maar even niet over hebben ;))

ps. ik heb dit gemaakt op mijn stage:
Afbeeldingslocatie: http://www.xs4all.nl/~oisyn/applets/homeboxx3d.jpg

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
What the ... :?

Moet je eerst delen door Z en daarna pas met je Z buffer spelen? Lijkt me niet, toch? Op het moment heb ik een source triangle, aan de hand daarvan reken ik de nieuwe coordinaten uit (d.m.v. 3 rotatie assen), en daarna was ik van plan te vechten met m'n Z buffer! Moet dat andersom? If so, hoe? Ikke niet snap :)

Over dat java ding: * Battle Bunny is impressed.! Maar, is dat een "simpele" lib voor java GL (zag ik voorbij komen) of schreef je de renderer zelf?

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Battle_Bunny schreef op 11 september 2002 @ 09:37:
Over dat java ding: * Scorpion is impressed.! Maar, is dat een "simpele" lib voor java GL (zag ik voorbij komen) of schreef je de renderer zelf?
die heeft ie zelf gedaan afaik.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Battle_Bunny schreef op 11 september 2002 @ 09:37:
What the ... :?

Moet je eerst delen door Z en daarna pas met je Z buffer spelen? Lijkt me niet, toch? Op het moment heb ik een source triangle, aan de hand daarvan reken ik de nieuwe coordinaten uit (d.m.v. 3 rotatie assen), en daarna was ik van plan te vechten met m'n Z buffer! Moet dat andersom? If so, hoe? Ikke niet snap :)
Je moet ze delen voor het interpoleren, als je de driehoek gaat tekenen.
Ik heb overigens niet het idee dat je de standaard transformatie pipeline gebruikt met matrices enzo...

De traditionele manier (die nu min of meer obsolete begint te raken door vertex shader programs) bestaat uit een serie van transformaties op vertices met matrices.

Stel je hebt een array met vertices, voor elke vertex v in die array wordt de volgende transformatie gedaan (als je lefthanded matrices gebruikt iig, anders moet je de volgorde van vermenigvuldiging omdraaien)

v' = v * To * Tw * Tp

To is de transformatiematrix om lokale object coordinaten om te zetten naar wereldcoordinaten. Deze matrix bevat dus gewoon de positie en orientatie van het object waar de vertices zich in bevinden. Deze matrix transformeert van object space naar world space

Tw is de transformatiematrix van de wereld. Oftewel de inverse van de matrix die de positie en orientatie van de camera (remember, de wereld draait om de camera, niet andersom ;)). Deze matrix transformeert van world space naar camera space

en Tp is de projectiematrix die de 3d camera space coordinaten omzet naar 2d scherm coordinaten (view space). Omdat een 3d wereld wordt geprojecteerd op een 2d vlak zijn de coordinaten die loodrecht staan op dat vlak (de z-as dus) niet meer lineair. Je kunt dat goed zien door in een 3d spel tegen een muur te gaan staan en dan langs de muur te kijken: je ziet dat de texels die dichtbij staan heel groot zijn, maar in de verte zijn ze heel klein. Het midden van de muur is dan ook niet de middelste pixel op je scherm. Deze stap kun je trouwens ook vervangen door de x' = x / z en y' = y / z stap die jij waarschijnlijk gebruikt.

Dan, als alle vertices getransformeerd zijn, wordt de trianglefiller aangeroepen. Deze routine tekent gewoon de driehoek op het scherm.
Zo'n routine heeft meestal 3 parameters: de 3 vertices van de driehoek. In de routine sorteer je deze 3 vertices op hoogte (y-waarde). Ik noem ze even v0, v1 en v2

De filler is op te delen in 2 stukken: eentje die de bovenste helft van de driehoek tekent (van v0 tot v1), en een stuk die de onderste helft doet (van v1 tot v2). Het moge duidelijk zijn dat als v0 en v1 op dezelfde hoogte liggen (dus de bovenste rand is horizontaal), dat er dan geen bovenste helft is. Hetzelfde geldt natuurlijk voor de onderkant :)

Je werkt dus van boven naar beneden en breekt de driehoek op in scanlines. Je interpoleert gaandeweg de 2 edges: die van v0 naar v2 (de langste dus), en die van v0 naar v1, en vervolgens van v1 naar v2.

In pseudocode:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void fillTriangle (Vertex v0, Vertex v1, Vertex v2)
{
    if (v0.y > v1.y)
        swap (v0, v1);
    if (v1.y > v2.y)
        swap (v1, v2);
    if (v0.y > v1.y)
        swap (v0, v1);

    x0 = x1 = v0.x;
    dx0 = (v2.x - v0.x) / (v2.y - v0.y);
    dx1 = (v1.x - v0.x) / (v1.y - v0.y);

    for (y is v0.y to v1.y)
    {
        drawSpan (x0, x1);
        x0 += dx0;
        x1 += dx1;
    }

    x1 = v1.x;
    dx1 = (v2.x - v1.x) / (v2.y - v1.y);

    for (y is v1.y to v2.y)
    {
        drawSpan (x0, x1);
        x0 += dx0;
        x1 += dx1;
    }
}


de z-waarden interpoleren gaat op dezelfde manier als de x, alleen moet je dan niet z maar 1/z gebruiken (dus waar staat v0.x, moet je 1 / v0.z gebruiken)
Let er trouwens wel op dat x0 groter kan zijn dan x1, dat is als v1 aan de linkerkant ligt:

code:
1
2
3
4
5
6
7
8
9
10
     0
    /\
   /  \
  /    \
1 \     \
    \    \
      \   \
        \  \
          \_\
            2
Over dat java ding: /me is impressed.! Maar, is dat een "simpele" lib voor java GL (zag ik voorbij komen) of schreef je de renderer zelf?


geen libs, helemaal zelf geschreven (zoals Scorpion al zei :))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Je moet ze delen voor het interpoleren, als je de driehoek gaat tekenen.
Ik heb overigens niet het idee dat je de standaard transformatie pipeline gebruikt met matrices enzo...
Ik gebruik helemaal niets standaard. Ik heb gewoon een routine geschreven die een triangle accepteerd als input (Dus met een X1, X2, X3, Y1, Y2, Y3, Z1, Z2, Z3) en drie integers voor de rotatie om de verschillende assen. Voorderest doe ik er niets mee, behalve dat ik tijdelijk de output X en Y direct op het scherm kwak (zodat ik kan zien wat er gebeurt).
De traditionele manier (die nu min of meer obsolete begint te raken door vertex shader programs) bestaat uit een serie van transformaties op vertices met matrices.
Zoals ik al zei, ik gebruik helemaal geen matrices... En "vertex shader programs"? Ik neem aan dat je daar mee bedoelt de apps die dat door de video kaart laten doen?
Stel je hebt een array met vertices, voor elke vertex v in die array wordt de volgende transformatie gedaan (als je lefthanded matrices gebruikt iig, anders moet je de volgorde van vermenigvuldiging omdraaien)
Aangezien ik nog helemaal niet met matrices heb gewerkt, word het imho tijd dat ik daar wat over ga lezen... Damn :)

Die filler werkt inderdaad zoals jij beschreef. Is volgens mij weinig wat daar aan fout zou kunnen gaan :)
geen libs, helemaal zelf geschreven (zoals Scorpion al zei :))
Petje af! Ook goed snel (zelfs op een PIII 1 ghz), terwijl ik altijd dacht dat Java bagger traag was :z

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Matrices is een vereiste als je met 3d computer graphics wilt gaan werken (ook een van de triviaalste dingen trouwens ;))

Er zijn heel veel tutorials over, zoals 3dIca die al eerder genoemd is (dat was ook een van mijn eerste tuts), maar jammer genoeg beschrijven al die tutorials alleen het hoe, niet het waarom. Ook vergeten ze er altijd bij te zeggen welk coordinatensysteem ze nou gebruiken (lefthanded, righthanded, welke as de diepte in gaat (y of z)) of welke kant de rotaties op gaan. Al dit soort dingen zorgt er ook voor dat de code van verschillende tutorials totaal niet uitwisselbaar zijn, dus als je iets probeert te combineren is de kans groot dat dat leidt tot nogal vage resultaten :)

Maar goed, als je iets niet snapt dan geef je maar een gil (* .oisyn houdt wel van dit soort topics :Y))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
*TOPIC RECYCLE* ;)

Bij deze geef ik, zoals .oisyn voorstelde, een gil. Ik heb dus echt geen idee wat nou het nut is van die matrices... Ik snap dat addition stuff van 3DICA wel, maar multiplication al niet meer helemaal...

Iemand een beetje fatsoenlijke uitleg (of url)? Want wat meer info zou wel handig zijn, dan kan ik a.d.v. het "waarom" ook wel uitvogelen "hoe".

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

De belangrijkste 2 redenen om matrices te gebruiken zijn:

1. Matrices kun je gebruiken voor transformaties. Dit is al erg lang bekend in de wiskunde, maar ook voor 3d aps op de computer is dit handig. verplaatsen schalen draaien, en zelfs het berekenen van perspectief kan door je vector met een matrix te vermenigvuldigen. Tuurlijk kun je dit ook gewoon met de hand doen, en dat lijkt in eerste opzicht ook veel makkelijker, maar er is ook een punt 2:

2. Dat het kan is natuurlijk hartstikke leuk, maar dit punt is nog veel belangrijker. Matrices zijn associatief net als de gewone getallen vermenigvuldiging. Dit betekent dat (AxB)xC == Ax(BxC).

Het grote voordeel daarvan is dat je eerst al je transformaties met elkaar kunt vermenigvuldigen (verplaatsing x schaling x rotatie x verplaatsing x perspectief) en deze uitkomst vervolgens vermenigvuldigen met alle vertices die deze transformatie nodig hebben.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

inplaats van dat je dus een object door een matrice haalt om te draaien, 1tje om te schalen, en 1tje voor te verplaatsen kun je dus 1 matrice voor die 3 acties maken, en hem vervolgens door 1 heen halen.

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Klinkt allemaal erg logisch. De uitwerking moet ik nog even goed over nadenken, vrees ik. Ondertussen weet ik ook nog niet helemaal wat voor waardes nou in die matrices moet staan :?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

voorbeeld rotatie van hoek met oorsprong 0,0,0 rond de z-as zou je in code zo doen:

xnieuw = x * cos(hoek) - y * sin(hoek);
ynieuw = x * sin(hoek) + y * cos(hoek);
znieuw = z;

Verplaatsen met dx,dy,dz zou je zo doen:

xnieuw = x + dx;
ynieuw = v + dy;
znieuw = z + dz;

(maar ik neem aan dat dit wel duidelijk is)
Roteren om een ander punt is nu het verplaatsen naar 0,0,0 draaien en weer terug zetten. Waneer je al deze acties zo uit zou voren als hierboven worden deze berekeningen enorm vaak (voor elke vertex van het object) uitgevoerd.

Kijken we nu naar de matrix vermenigvuldiging:
matrix:
code:
1
2
3
4
5
M=
/ m11 m21 m31 m41 \
| m12 m22 m32 m42 |
| m13 m23 m33 m43 |
\ m14 m24 m34 m44 /

vertex:
code:
1
2
3
4
5
V=
/ x \
| y |
| z |
\ 1 /

Schrijven we de vermenigvuldiging MxV uit dan krijgen we dit :
code:
1
2
3
4
/ x*m11 + y*m21 + z*m31 + 1*m41 \
| x*m12 + y*m22 + z*m32 + 1*m42 |
| x*m13 + y*m23 + z*m33 + 1*m43 |
\ x*m14 + y*m24 + z*m34 + 1*m44 /


offtopic:
Ik ga matrix x matrix niet uitschrijven, dat vind ik wat veel werk :)


Om de rotatie matrix te maken vullen we het volgende in:
m11 = cos(hoek)
m21 = -sin(hoek)
m12 = sin(hoek)
m22 = cos(hoek)
M33 =1
M44 = 1
rest = 0

Vul je dit nu in dan zul je zien dat hier hetzelfde als boven uitkomt.

Een verplaatsings matrix gaat alsvolgt:

m41=dx
m42=dy
m43=dz
m11=1
m22=1
m33=1
m44=1
rest = 0

Vul je ook dit in dan zul je zien dat hieruit ook weer de bovenstaande verplaatsings berekening uitkomt. Alle transformaties zijn dus als matrix te schrijven. Voor de voledigheid zal ik nog ff de schalingen met sx,sy,sz matrix geven:

m11 = sx
m22 = sy
m33 = sz
m44 = 1

Op dit moment is het dus niet moeilijk voor te stellen dat een transformatie matrix vermenigvuldigd met een vertex/vector de gewenste transformatie oplevert :).

Nemen we nu het volgende voorbeeld. Je wilt eerst draaien met hoek alpha, en vervolgens 100 naar rechts. De matrix voor de verdraaing nemen we R en de verplaatsing nomen we P. de vertex die we moeten verplaatsen nomen we V.

V2 = RxV -> V2 is tov V nu rond 0,0,0 gedraaid
V3 = PxV2 -> V3 is tov V2 nu 100 verplaatst

Dit zou je in 1x kunnen schrijven als :

V3=P x (R x V)

En nu komt die associativiteit om de hoek kijken. Die zegt dat je het ook zo kan schrijven:

V3=(P x R) x V

EN dat is makkelijk, want dan reken je gewoon (P x R) 1x uit, en vervolgens hoef je al de vertices van 1 object maar met 1 matrix vermenigvuldigen.

Disclaimers :
1 Onder voorbehoud van rekenfouten + type fouten, maar ik hoop dat het ID redelijk duidelijk is.
2 Ikzelf heb tot nu toe vooral met OpenGL gewerkt, en deze gebruikt kolomvectoren/vertices. Bij directX is het andersom waardoor de vermenigvuldigingen ook andersom gaan. (a x b) x c==a x (b x c) geldt mischien wel, maar bij matrices geldt niet a x b == b x a. Dit is op zich ook logisch te verklaren, aangezien een verplaatsing gevolgd door een rotatie niet gelijk is aan een rotatie gevolgd door een verplatsing :)

[ Voor 0% gewijzigd door Janoz op 19-09-2002 16:55 . Reden: ff de opmerking van .oisyn hieronder verwerkt :) ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Janoz schreef op 19 september 2002 @ 14:46:
xnieuw = x * sin(hoek) + y * cos(hoek);
ynieuw = x * cos(hoek) + y * sin(hoek);
znieuw = z;


ik mis daar een - teken ergens ;)

x' = x * cos(hoek) - y * sin(hoek);
y' = x * sin(hoek) + y * cos(hoek);
z' = z;

(deze rotatie is CCW -> counter-clockwise -> tegen de klok in)

Misschien dat ik vandaag/binnenkort nog een vector+matrix tutorial schrijf, dan hebben we ook alvast wat materiaal voor de t.net tutorials :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

t.net? gameskool!

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Janoz: _/-\o_ Ik ben nu een beetje niet-wakker, maar het is een goed verhaal. Ik denk dat ik er wel uit kom zo. Thanks :) ongeduldig ventje (icq, dus) :P

.oisyn: Het ging niet om die formule, dat werkt thank god al een tijdje ;)

Scorpion: :?


* Battle Bunny gaat weer proggen :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker



dat ook, maar het heeft geen nut om daarover op GoT te blaten ;)
eerst maar eens die meeting houden :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Battle_Bunny schreef op 19 september 2002 @ 17:40:
.oisyn: Het ging niet om die formule, dat werkt thank god al een tijdje ;)


die post van mij was ook alleen maar bedoeld om janoz af te zeiken (omdat hij er zo vriendelijk kom vroeg) :P ;)

Janoz:: :*

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Onder voorbehoud van rekenfouten
:P


Wel gevaarlijk hier, zeg! Allemaal experts die het beter willen weten :+

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc


  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Geweldig, zo'n site met heel veel ge-promoot, sponsors, verhalen over mensen die ze hebben weten en "strikken"... Maar voorderest wel 4 hele artikelen... Joh...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Battle_Bunny schreef op 20 september 2002 @ 11:51:
[...]


Geweldig, zo'n site met heel veel ge-promoot, sponsors, verhalen over mensen die ze hebben weten en "strikken"... Maar voorderest wel 4 hele artikelen... Joh...

Ik had gehoopt dat het er nu 5 zouden zijn :), maar ze zijn erg traag met het toevoegen van mijn reactie daar :)...

Maar de geruchten gaan dat ie binnenkort op de schop genomen gaat worden omdat ie niet loopt zoals ze gehoopt hadden (wat een klein understatement is :) ).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Janoz schreef op 20 september 2002 @ 12:15:
Maar de geruchten gaan dat ie binnenkort op de schop genomen gaat worden omdat ie niet loopt zoals ze gehoopt hadden (wat een klein understatement is :) ).


oh? dan weet je meer dan ik :)
(of bedoel je met 'op de schop gaan' dat er een herstart wordt gedaan?)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

.oisyn schreef op 20 september 2002 @ 16:07:

[...]


oh? dan weet je meer dan ik :)
(of bedoel je met 'op de schop gaan' dat er een herstart wordt gedaan?)
dat bedoeld ie ja :)
Pagina: 1