3d engine maken m.b.v. lineaire algebra

Moderators: dirkwb, Xilvo

Reageer
Berichten: 373

3d engine maken m.b.v. lineaire algebra

Stel ik heb de volgende data. Een aantal punten (x, y, z) in driedimensionale ruimte. Een camerapositie (xc, yc, zc) en een camera-kijkrichting (xd, yd, zd). Ik wil nu het punt (x, y, z) vertalen naar een punt (xs, ys) in het vlak met de volgende kenmerken.
  • Als de camera precies naar het punt (x, y, z) kijkt, dan is (xs, ys) = (0, 0)
  • Als de camera rechts van het punt (x, y, z) kijkt, dan is xs negatief
  • Als de camera links van het punt (x, y, z) kijkt, dan is xs positief
  • Enzovoorts, oftewel ik wil eignelijk een projectie maken van driedimensonale ruimte in de richting van de camera en dat vertalen naar een vlak. Zegmaar ik wil het beeld weten dat de camera kan "zien".
Uiteindelijk wil ik dat in een programma implemeneteren, maar het gaat mij niet om de code, het gaat mij om de stappen die moeten worden uitgevoerd. Zegmaar in pseudocode voor diegenen die dat wat zegt.

Mijn eerste idee was ongeveer zoiets als het volgende.
  • Transleer alle punten zodat de camera op (0, 0, 0) is. Oftewel, transleer het punt (x, y, z) over -(xc, yc, yc). Je krijgt een vector (x - xc, y - yc, z - zc)
  • Bepaal het uitwendig product van (x - xc, y - yc, z - zc) met de camerakijkrichting, verkrijg zo een vector v die loodrecht staat op beide.
  • Bereken de hoek h tussen de kijkrichting en (1, 0, 0)
  • Draai zo verkregen punt om de oorsprong met draaias v en hoek h. Dit komt overeen met het draaien van de kijkrichting over deze hoek, de kijkrichting is dus nu (1, 0, 0).

    Ik heb een formule waarmee ik een vector om een zekere as over een zekere hoek kan draaien, dus die mag je gebruiken.
  • Het probleem is teruggebracht naar een camera met positie (0, 0, 0) en kijkrichting (1, 0, 0) die kijkt naar een vector (xp, yp, zp) (zoiets had ik beredeneerd maar ik zie het nu even niet)
  • De lijn van de camera naar het zo gevormde punt heeft een zekere hoek met (1, 0, 0). Neem (xs, ys) zo dat de afstand tot de oorsprong in het vlak, een constante maal deze hoek is. Verder wil je dat xs : ys = yp : zp en dat xs > 0 dan en slechts dan als yp > 0.
Maar dit werkt niet. Heeft iemand een (wellicht zelfs kortere) oplossing voor het gegeven probleem? Ik heb dit meermalen geprobeerd maar ik doe ergens iets fout.

Berichten: 7

Re: 3d engine maken m.b.v. lineaire algebra

Hi,

Ik heb niet direct een antwoord op je vraag maar misschien heb je wat aan het boek : 3D.Math.Primer.for.graphics.and.game.development.pdf.

Als je dit boek met eMule zoekt kun je hem vast wel vinden en als het bevalt kun je hem altijd aanschaffen.

groetjes en succes

Reageer