🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #6359

Re: projectie / transformatie

#6359
From: Bart.Vanhauwaert
Date: Tue, 17 Dec 2002 11:56
53 lines
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-mail
References: <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