Springen naar inhoud

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


  • Log in om te kunnen reageren

#1

Erik Leppen

    Erik Leppen


  • >250 berichten
  • 368 berichten
  • Ervaren gebruiker

Geplaatst op 25 juni 2007 - 19:45

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.

Veranderd door Erik Leppen, 25 juni 2007 - 19:46


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

MMWizard

    MMWizard


  • 0 - 25 berichten
  • 7 berichten
  • Gebruiker

Geplaatst op 15 augustus 2007 - 07:41

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





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures