AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [DirectX] FOVY/Sichtfeld berechnen
Thema durchsuchen
Ansicht
Themen-Optionen

[DirectX] FOVY/Sichtfeld berechnen

Ein Thema von .chicken · begonnen am 18. Mai 2008 · letzter Beitrag vom 19. Mai 2008
Antwort Antwort
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#1

[DirectX] FOVY/Sichtfeld berechnen

  Alt 18. Mai 2008, 20:48
Hi, also ich habe schon wieder ein Problem. Ich muss für meine 2DEngine die Fläche berechnen, die von der Kamera gezeigt wird. Habe nun im Internet nach allem möglichen gesucht, Sinus, Kosinus, Tangens...ich konnte einfach keine Lösung dafür finden.
Delphi-Quellcode:
  D3DXMatrixPerspectiveFovLH(Mat, [b]1[/b], Parent.Width / Parent.Height, 1, 0);
  Parent.Device.SetTransform(D3DTS_PROJECTION, Mat);
Delphi-Quellcode:
  D3DXMatrixLookAtLH(Mat, D3DXVector3(Position.X, Position.Y, [b]-ZoomY[/b]), D3DXVector3(Position.X, Position.Y, 0), D3DXVector3(0, 1, 0));
  Parent.Device.SetTransform(D3DTS_VIEW, Mat);
So setze ich bisher die Kamera. Dabei dachte ich eigentlich, dass wenn ich FOVY auf 1 setze, dann mit einer Kameraentfernung von 1 auch eine Vertikale Fläche mit der Höhe 1 gezeigt wird. Dem ist aber nicht so.

Also FOVY ist ja der Winkel im Bogenmaß, dh Alpha/180*PI. Aber wie ich nun damit berechne wie weit meine Kamera vom Objekt entfernt sein muss, um die bei ZoomY angezeigt Fläche abzudecken weiss ich nicht. Kann mir das bitte wer sagen? ^^ Ist sonst etwas schwer die Kamera genau einzustellen

Grüße, chicken
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: [DirectX] FOVY/Sichtfeld berechnen

  Alt 18. Mai 2008, 22:07
Kleine Zwischenfrage: 2D und perspektivische Projektion? Passt das zusammen ?

Zum Problem: Das DX-SDK installiert gerade noch *g* , aber aus dem Kopf würde ich für
Zitat von .chicken:
[...], dann mit einer Kameraentfernung von 1 auch eine Vertikale Fläche mit der Höhe 1 gezeigt wird.
auf 2 * arctan(.5) tippen (eine kleine Zeichnung sollte beim Verstehen helfen). Dürfte[*] sich auch mit yScale = cot(fovY/2) decken.
[*]Zu dieser Uhrzeit lieber keine Absolutismen .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#3

Re: [DirectX] FOVY/Sichtfeld berechnen

  Alt 19. Mai 2008, 05:09
Danke, wenn ich heute Abend auser Schule wieder da bin, teste ich das.
Zu deiner ersten Frage. Wie sollte ich es denn stattdessen machen? Gibt es noch ne andere Projektionsmöglichkeit?

Grüße und Danke, .ch!cken
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: [DirectX] FOVY/Sichtfeld berechnen

  Alt 19. Mai 2008, 10:08
In einer 2D-Engine wird der Z-Wert doch nur benutzt, um die Reihenfolge der Sprites festzulegen, ein oben liegendes Sprite soll dadurch ja nicht größer werden. Also würde ich mal eine Parallelprojektion vorschlagen => http://msdn.microsoft.com/en-us/library/bb205347(VS.85).aspx
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#5

Re: [DirectX] FOVY/Sichtfeld berechnen

  Alt 19. Mai 2008, 17:21
Och super, das macht die Sache ja viel einfacher. Danke dir
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz