Article View: be.comp.programming
Article #6359Re: projectie / transformatie
From: Bart.Vanhauwaert
Date: Tue, 17 Dec 2002 11:56
Date: Tue, 17 Dec 2002 11:56
53 lines
2687 bytes
2687 bytes
Slaets F <whizzo@pandora.be> wrote: > ik moet van een 2D scherm (muis) naar 3D wereld gaan (isometric perspective) > dus als ik klik met men muis moet ik men coordinaten op men wereld hebben... Je weet dat 1 2D coordinaat overeenkomt met een oneindig aantal 3D coordinaten. Ik neem aan dat je de coordinaat wil van het punt uit je tafereel (de 'projectieplaat'). Dat hangt natuurlijk af van welke parameters je hebt van je projectie. Ik veronderstel dat je hebt (in 3D) oog (o), kijkrichting (k) en bovenrichting (b) dit laatste is normaal op de horizon in de richting van de 'bovenkant'. Daarnaast heb je ook nog nodig : afstand tafereel en oog (d) en de afmetingen van een pixel, meestal onder de vorm van een zogenaamde 'field of view' hoek (fx en fy). Eerst zoeken we het punt uit je tafereel dat overeenkomt met het midden van je schermcoordinaten. Dat is simpel (k en b genormaliseerd): m = o + d*k de y-as van je tafereel komt overeen met de bovenrichting y = b de x-as van je tafereel staat loodrecht op de y-as en op de kijkrichting dus x = o^y (^ staat voor vectorproduct) voor de breedte van je tafereel (tx) weten we dat tan(fx/2) = (tx/2)/d De pixelbreedte (px) (in 3D) is uiteraard de tafereelbreedte gedeeld door het aantal pixels in x. Idem dito voor de tafereel- en pixelhoogte. En dus t = m + (x2-mx2)*px*x + (y2-my2)*py*y x2,y2 zijn de coordinaten in 2D, mx2 en en my2 zijn de halve breedte en hoogte in 2D. Indien de oorsprong van de 2D coordinatenstelsel linksboven van het scherm is, moet je wel de y-component van teken veranderen. Hopelijk was het dit wat je zocht, en hopelijk heb ik geen fouten gemaakt. cu bart -- http://www.irule.be/bvh/
Technical Details
Message-ID:
<ad3nta.af2.ln@ns1.irule.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!iad-peer.news.verio.net!news.verio.net!skynet.be!skynet.be!louie!not-for-mailReferences:
<Sg1L9.10569$WX1.1994268797@hebe.telenet-ops.be> <na7L9.2033$3G4.8513@amstwist00> <wf9L9.28934$2x7.2975838317@hestia.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,2373adf65794877
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-12-17 03:58:07 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!iad-peer.news.verio.net!news.verio.net!skynet.be!skynet.be!louie!not-for-mail
Sender: - <bvh@ns1.irule.be>
From: Bart.Vanhauwaert@nowhere.be
Subject: Re: projectie / transformatie
Newsgroups: be.comp.programming
References: <Sg1L9.10569$WX1.1994268797@hebe.telenet-ops.be> <na7L9.2033$3G4.8513@amstwist00> <wf9L9.28934$2x7.2975838317@hestia.telenet-ops.be>
User-Agent: tin/1.4.4-20000803 ("Vet for the Insane") (UNIX) (Linux/2.2.17-21mdksecure (i686))
Date: Tue, 17 Dec 2002 12:56:26 +0100
Message-ID: <ad3nta.af2.ln@ns1.irule.be>
Lines: 53
NNTP-Posting-Host: 194.78.202.248
X-Trace: 1040126171 reader1.news.skynet.be 6439 194.78.202.248
X-Complaints-To: abuse@skynet.be