Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 04:08

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 41 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
ach ja wie gibst du den Winkel an? In Grad- oder Bogenmaß?

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Du sprichtst von gluPerspective. Ich verwende kein gluPerspective sondern glFrustum bzw. erstelle ich meine Matrix manchmal selber:
Code:
  1. //********************************************************************
  2. // Attention: ZFar and ZNear have to be positive and not zero
  3. Procedure TOGLSpace3D.SetProjCentral
  4.               (FieldOfVision,AZNear,AZFar: TFloat32);
  5. Var FObject: TObject3D; I: TInt32;
  6. Begin
  7.    OGL.ZNear:= AZNear; OGL.ZFar:= AZFar;
  8.    OGL.Fov:= FieldOfVision;
  9.    //-------------------------------------------------------------
  10.    OGL.MaxY:= Tan(OGL.FOV/2*PI/180) * OGL.ZNear;
  11.    //-------------------------------------------------------------
  12.    OGL.MaxX:= OGL.MaxY * OGL.ViewPort[2]/OGL.ViewPort[3];
  13.    OGL.Projection:= psCentral;
  14.    FProjMatrix:= MatrixProjection(OGL); // ====> Nach Wiki-Muster glFrustum
  15.    With FObjectList Do If Count > 0 Then For I:= 0 To Count-1 Do Begin
  16.       FObject:= FObjectList[I]; FObject.SetPerspective(OGL);
  17.    End;
  18. End;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 19:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Aya hat geschrieben:
nur aus irgendeinem grund muß ich den punkt den ich am ende mit der matrix multipliziere in y * -1 rechnen, da sonst die projektion an der y-achse gespiegelt ist.. (jetzt dann ohne die invertierte modelview matrix)


Vielleicht könnte das daran liegen, dass OpenGL sein (0/0) unten links hat?

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 20:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

an der projections matrix kann es doch eigentlich nicht liegen, weil wie gesagt ist sie exakt genauso wie wenn ich sie via gluPerspective erstellen lasse.. ich denk eher das da bei dem, wo ich (TP * (Projection * Modelview)) * Point mache noch was schief läuft.. seid ihr denn sicher das danicht noch irgendwas fehlt, oder das dass TP evtl bei ner perspektivischen projektion anders sein muß etc?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 21:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hallo,
Ich habe inzwischen auch glFrustum geschafft. Zumindest kann ich das, was dabei rauskommt interpretieren und es erscheint mir auch plausibel. Ich würde es aber nicht als Texturkoordinatenerzeugungsmaschine empfehlen, glOrtho ist da erheblich besser und vorhersehbarer. Die Texturkoordinaten, die bei glFrustum herauskommen sind noch dazu seitenverkehrt und stehen auf dem Kopf. Wenn ihr das Ergebnis wissen wollt, stelle ich das noch hier herein.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 26, 2008 08:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Das liegt an dem, was ich als Unterschied DX/OGL gemeint habe. Wie Lord Horazont schon sagte, in OGL liegt der Urpsrung im Texture Space in der unteren linken Ecke vom Bild, und dann geht x nach rechts und y nach oben. Bei DX ist es an der y-Achse gespiegelt. Dort liegt der Ursprung oben links im Bild und dann geht x nach rechts und y nach unten. WEnn du deinen Ursprung oben haben willst, dann musst du an y spiegeln. Das kannst du in die TP-Matrix gleich mit reinnehmen, indem du in der Zeile für y das - mit reinmachst. Also an Stelle (2,2) die -0.5

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 26, 2008 08:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
http://developer.nvidia.com/object/Projective_Texture_Mapping.html

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 26, 2008 09:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
OK ich stelle Euch mal das Bildchen (Transformation mit glFrustum) herein. Es ist genauso aufgebaut wie das erste. Ich habe aber die ModelView-Matrix kaltgestellt, das hat mich zu sehr verwirrt. Es agiert also nur die Projektionsmatrix und die Matrix, die in den Texturraum transformiert.

Ich habe den Tip mit dem Minus vor dem 0.5 im Original-Worksheet ausprobiert, es funktioniert. Aber man muss auch beim X ein Minus davor setzen, weil die Texturkoordinaten auch links- und rechtsverdreht sind. Ich war zu faul, das Bild jetzt nochmal mit den korrigierten Werten zu generieren, sorry. Aber man sieht, wie es gerechnet wird.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 28, 2008 10:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

hab es jetzt hinbekommen :)
Dank dem letzten bild von traude ^^

Ich hatte den punkt den ich am ende mit der matrix multipliziert habe nicht durch w geteilt, bei der ortho war das praktischerweise egal, bei der perspective dann nichtmehr... :)


Daaaanke~~~


Aya~

PS: EDIT: Nur das mit dem um y-spiegeln in TP einbauen klappt nicht, also einfach die y-achse auf -0.5 setzten hilft nichts :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 28, 2008 11:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi nochmal,

hab jetzt doch noch ein kleines problem :(
Wenn ich versuche meinen projektor im 3D view darzustellen, gehen die kanten von meinem "cone" immer ein wenig an der projektion vorbei..

Den cone berechne ich so:

float v = tanf(angleOfView * (pi / 180.0f)) * 10.0f);
float left = -v * aspect;
float top = -v;
float right = v * aspect;
float bottom = v;

Und zeichnen tu ich dann halt nen quad mit left, top, bottom und right als X und Y und 10 als Z-Wert...

aber es ist halt immer ein wenig zu groß.. muß ich da irgendwie zNear und zFar mit einberechnen?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 28, 2008 13:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hallo Aya,
@Problem mit den 0.5: Es war gedacht, dass das Minuszeichen in der "TP" Matrix eingebracht wird, also beim ersten 0.5 in der Zelle mit dem Index (0,0) , die zweite mit dem Index (1,1). Meines Erachtens könntest Du auch einfach das Endresultat ändern:
u = (1-u)
v= (1-v)


@Quad ist nicht ganz drauf: ich glaube du musst die Blende deines Projektors etwas weiter aufmachen. Wenn Du z.B. anstatt 45 Grad 75 Grad angibst, ist die hintere "Wand" des Frustums etwas größer und müßte auch mehr von dem Quad zu sehen sein.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 41 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]