AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [DirectX] Flip Y Axis
Thema durchsuchen
Ansicht
Themen-Optionen

[DirectX] Flip Y Axis

Ein Thema von igel457 · begonnen am 9. Nov 2006 · letzter Beitrag vom 9. Nov 2006
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

[DirectX] Flip Y Axis

  Alt 9. Nov 2006, 14:58
Hallo,

da ich mit meinem Spiel die absoluten Grenzen von DelphiX erreicht habe, schreibe ich gerade an einer neuen 2D Engine, welche DirectX 9 verwendet.

Ich setze die VIEW und die PROJECTION Matrix am anfang meines Programmes mit folgenden Zeilen:

Delphi-Quellcode:
procedure SetupScene(Appl:TAndorraApplication;AWidth,AHeight:integer);
var centerx,centery:single;
    pos, dir, up : TD3DXVector3;
    matView, matProj: TD3DXMatrix;
begin
  if Appl <> nil then
  begin
    with TAndorraApplicationItem(Appl) do
    begin
      pos := D3DXVector3 (Awidth/2,AHeight/2,-10);
      dir := D3DXVector3 (Awidth/2,AHeight/2,0);
      up := D3DXVector3 (0,1,0);

      D3DXMatrixLookAtLH( matView, pos, dir, up);
      Direct3d9Device.SetTransform(D3DTS_VIEW, matView);

      D3DXMatrixOrthoLH( matProj, Awidth, Aheight, 0,100);
      Direct3d9Device.SetTransform(D3DTS_PROJECTION, matProj);
    end;
  end;
end;
Problem ist nun, dass der Koordinatenursprung nun links unten und nicht links oben liegt.
Wie kann ich die Y Achse umdrehen?


Ich habe schon stundenlang gesucht aber nichts (brauchbares) gefunden (Mal abgesehen von einigen Leuten, die das selbe Problem, aber keine Lösung hatten. Das einzige war das folgende...
http://209.85.135.104/search?q=cache:aI4kwcynbfUJ:discuss.microsoft.com/SCRIPTS/WA-MSD.EXE%3FA2%3Dind0303c%26L%3Ddirectxdev%26D%3D1%2 6P%3D14229%26F%3DP+D3DXMatrixOrthoLH+origin&hl=de& amp;gl=de&amp;ct=clnk&amp;cd=10&amp;lr=lang_de|lan g_en
doch ich bekomme den Code nicht so richtig zum Funktionieren...

Im Anhang befindet sich mal noch ein Bild, wie es aussieht und wie es eigentlich aussehen sollte.

Schon mal Danke,
Igel457

PS: Ich möchte ID3DXSprite nicht verwenden.
Miniaturansicht angehängter Grafiken
temp_124.gif  
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [DirectX] Flip Y Axis

  Alt 9. Nov 2006, 17:47
Hm...

Ich glaube ich Rechne halt einfach ResY-SpriteHeight-Y...
Damit gehe ich allen Problemen aus dem Weg.

Wenn trotzdem jemand eine Idee hat, wie man das Problem von oben anders lösen könnte bin ich immer dafür offen...
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: [DirectX] Flip Y Axis

  Alt 9. Nov 2006, 19:00
AFAIK sollte es reichen, den Y-Wert des Up-Vektors zu negieren.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: [DirectX] Flip Y Axis

  Alt 9. Nov 2006, 19:07
Du hast doch die drei Vektoren, nun musst du nur noch überlegen ...
Das Leichteste wäre es wohl, die Kamera genau von der anderen Seite (positive Z-Achse) auf die XY-Plane schauen (-> X+ nach links, Y+ oben) und sie dann 180° um ihre eigene Achse drehen zu lassen, also den Up-Vektor einfach umzudrehen (-> X+ nach rechts, Y+ nach unten, wie du es gewünscht hast).

[edit]Hee, wo kommst du denn her . Negieren allein reicht aber wie gesagt nicht, damit würdest du die X-Achse mit umkehren. [/edit]

[edit id="1"] Eine andere Möglichkeit wäre die Up-Negation + die RightHand-Funktionen. Kommt aber ziemlich aufs Gleiche hinaus; auch vom Schreibaufwand wäre es nur Negieren des Kamera-Z-Wertes vs. Ersetzen von LH durch RH. [/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: [DirectX] Flip Y Axis

  Alt 9. Nov 2006, 19:34
Zitat von Khabarakh:
[edit id="1"] Eine andere Möglichkeit wäre die Up-Negation + die RightHand-Funktionen. Kommt aber ziemlich aufs Gleiche hinaus; auch vom Schreibaufwand wäre es nur Negieren des Kamera-Z-Wertes vs. Ersetzen von LH durch RH. [/edit]
Hey, danke... So gehts...

Für alle, die das selbe Problem hatten/haben wie ich, hier die Lösung:
Delphi-Quellcode:
procedure SetupScene(Appl:TAndorraApplication;AWidth,AHeight:integer);
var centerx,centery:single;
    pos, dir, up : TD3DXVector3;
    matView, matProj, matRotate: TD3DXMatrix;
begin
  if Appl <> nil then
  begin
    with TAndorraApplicationItem(Appl) do
    begin
      pos := D3DXVector3 (Awidth/2,AHeight/2,-10);
      dir := D3DXVector3 (Awidth/2,AHeight/2,0);
      up := D3DXVector3 (0,-1,0);

      D3DXMatrixLookAtRH( matView, pos, dir, up);
      Direct3d9Device.SetTransform(D3DTS_VIEW, matView);

      D3DXMatrixOrthoRH( matProj, Awidth, Aheight, 0,100);
      Direct3d9Device.SetTransform(D3DTS_PROJECTION, matProj);
    end;
  end;
end;
Nochmal ein dickes Dankeschön an alle.
Und für alle neugierigen...


...so siehts aus
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  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 07:20 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