/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
Hjælp med projektions matriks
Fra : Klaus Petersen


Dato : 01-07-05 11:05

Hej.

Jeg forsøger at få defineret et perspektiv projektions matriks i min
Direct3D applikation.
Jeg har en funktion, der udfra en keglestub kan generere et matriks.

Funktionen tager følgende parametrer: width, height, z_near og z_far.

Jeg vil gerne have det sådan, at når jeg definerer et punkt i min verden,
der har koordinaterne (x,y,z)=(0,0,1) at den bliver projekteret til
skærmkoordinaterne (0,0).

Og et andet punkt (640,0,1) vil blive projekteret til skærmkoordinaterne
(640,0).

Jeg ville kunne bruge et ortografisk projektions matriks til det, kan jeg
vil gerne have muligheden for at lave perspektiv i billedet.

Jeg ser dette mere som en matematiskopgave end en programmeringsopgave -
derfor spørger jeg her.

Kan nogen give et bud på hvad jeg skal sende ind som parametrer i funktionen
for at opnå sådan et matriks?

Klaus.



 
 
Carsten Troelsgaard (01-07-2005)
Kommentar
Fra : Carsten Troelsgaard


Dato : 01-07-05 19:48


"Klaus Petersen" <ng@spectual.ra.bnaa.dk> skrev i en meddelelse
news:42c5153a$0$18643$14726298@news.sunsite.dk...
> Hej.
>
> Jeg forsøger at få defineret et perspektiv projektions matriks i min
> Direct3D applikation.
> Jeg har en funktion, der udfra en keglestub kan generere et matriks.
>
> Funktionen tager følgende parametrer: width, height, z_near og z_far.
>
> Jeg vil gerne have det sådan, at når jeg definerer et punkt i min verden,
> der har koordinaterne (x,y,z)=(0,0,1) at den bliver projekteret til
> skærmkoordinaterne (0,0).
>
> Og et andet punkt (640,0,1) vil blive projekteret til skærmkoordinaterne
> (640,0).
>
> Jeg ville kunne bruge et ortografisk projektions matriks til det, kan jeg
> vil gerne have muligheden for at lave perspektiv i billedet.
>
> Jeg ser dette mere som en matematiskopgave end en programmeringsopgave -
> derfor spørger jeg her.
>
> Kan nogen give et bud på hvad jeg skal sende ind som parametrer i
> funktionen
> for at opnå sådan et matriks?
>
> Klaus.

Som du formulerer det kan du jo blot ignorere z-koordinaten.
Jeg formoder, at du med perspektivet fx vil føre 1;0;10 over i 1/10;0 ...
altså sådan at x får en perspektivisk 'forkortning' omvendt proportional med
z-koordinaten. Det behøver du ikke en matrice til, fordi du jo blot fører
x,y,z over i x/z,y/z .. men det kan godt gennemføres med en matrice.
Hvis du arbejder med punkter, eller sammensætning af punkter til
linjer/vektorer, omkring 0,0,0 får du brug for at komme omkring problemet
med division med z=0. Det kan du umiddelbart, eller konceptuelt komme
omkring ved at definere det punkt du observerer fra ... altså fx at kalde
0,0,-20 for 'kameraets placering', sådan at x,y = x/(z+z0,) y/(z+z0).
(z0=-20). Hvis du holder dig til positive værdier for z svarer z0 lidt til
din z_near ..
Hvis du vil checke om det kan gøres så enkelt kan du lave en vektor af to
punkter, fx x0,y0,z0 = 0,0,0 og x1,y1,z1 = 1,0,0. Når du forskyder vektoren
0,0,5 (altså begge punkter) til hhv 0,0,5 og 1,0,5 ser du den perspektiviske
forsvinding ved, at vektorens længde kvrod((1-0)^2+(0+0)^2) reduceres med
1/5 .. eller hvis du vælger 0,0,20 som iagttagelsespunkt ændres længden fra
1/20 til 1/25 mod ellers 1 til 1/5.

Hvis du vil bruge en matrice skal du transformere dit koordinat-system over
i ét med 'kameraet's position som centrum, altså gennemføre en
transformation med 0,0,20, og gennemføre den perspektiviske skalering med z
på de nye koordinater.

Carsten




Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste