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

Aktuelle Zeit: Fr Jul 18, 2025 00:14

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 02, 2007 18:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Code:
  1. gluPerspective(100.0, 0.0, 1, 1000);

Den Aspektratio auf 0.0 zu setzen sollte man keinesfalls machen, es kann gut sein dass deine Problem daher rühren. Hier siehst du die Matrix die duch gluPerspective erstellt wird, und ganz oben links würde bei einem Ratio von 0 eine Division durch Null entstehen. Dort sollte man auf jeden Fall einen sinnvollen Wert (i.d.R. Aspektratio des Viewports) einsetzen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 02, 2007 20:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Hm, wenn ich fovy auf -1/1 setze, rotieren Merkur/Venus ständig VOR der Sonne hin und her. Sie bewegen sich ab und zu Richtung Betrachter, aber ansonsten umkreisen die Planeten die Sonne nicht mehr. ClientWidth/ClientHeight würde gleiches erzielen, allerdings würden die beiden Kugeln ab einer gewissen Betrachternähe verschwinden.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 02, 2007 21:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
@Flash:
Stimmt, bei genauerem Hinsehen sieht es irgendwie komisch aus...

@Nils:
Das, was da läuft ist deinen Aussagen nach reichlich komisch. Und was meinst du damit, dass deine Graka mit der Audiokarte verwechselt wird? :shock:

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 Nov 02, 2007 23:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Nils hat geschrieben:
Flash: Grafikkarte kann ich nicht sagen. Die wird andauernd mit der Audiokarte verwechselt, kA warum. Ist eine nVidia, sie kann UT2004 darstellen, ich hoffe diese angabe reicht, ansonsten muss ich mal wieder ein paar Stunden den Computerordner durchsuchen. Treiber ist glaube ich auch nVidia.

Huh? Meines Wissens melden sich Grafikkarten doch zum Einen direkt nach dem Einschalten vor dem BIOS mit drei, vier informativen Zeilen und selbst wenn einem das zu schnell geht, kann man es im Gerätemanager nachschauen, wenn ich einfach mal unterstellen darf, dass wir unter Windows sind ;)
Die Treiber an und für sich sind in ihren Einstellungen aber auch meist sehr aussagefreudig über ihre Version etc. unabhängig vom OS.

Zum Thema: Ich will ja nicht aufdringlich klingen, aber was hälst du von der Idee, deinen Sourcecode bzw. den entscheidenden Teil hier rein zu stellen, damit man sich ein Bild davon machen oder zum Vergleich selbst kompilieren kann? Sonst wird das hier nur ein heiteres Rätselraten ;)

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 03, 2007 00:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
WhiteHunter hat geschrieben:
Zum Thema: Ich will ja nicht aufdringlich klingen, aber was hälst du von der Idee, deinen Sourcecode bzw. den entscheidenden Teil hier rein zu stellen, damit man sich ein Bild davon machen oder zum Vergleich selbst kompilieren kann? Sonst wird das hier nur ein heiteres Rätselraten ;)


Guter Vorschlag. Sonst stochern wir wirklich nur im Blauen und meine Glaskugel ist vor kurzem zerbrochen... Wird ne weile dauern, bis ich ne neue hab :D

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: Sa Nov 03, 2007 00:35 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Lad dir mal eines der Tools der ersten Kategorie: Tool

Dann guck mal im Gerätemanager welche Grafikkarte du hast und welcher Treiber. Vielleicht ist es ja ein "Problemtreiber" (Wenns sowas gibt;))

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 03, 2007 11:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Ich hatte wegen den Texturen die Glex-Unit noch drinnen. Das war nur wegen den Texturen. Nun habe ich einfach mal vorgezogen, was ich am Ende tun wollte: die eigentlich gar nicht mal schlechten Texturfunktionen aus der Glex gezogen und die Glex einfach rausgenommen, damit ich nur noch die dglOpenGL benutzen muss. In der Texturladesektion sind nun alle glTexImage2D auskommentiert, da es damit Probleme gibt (Syntaxfehler). Zu den Texturen habe ich deshalb noch eine Frage an euch: Ist die Methode, wie ich Texturen lade so ok (Performance gut und platformunabhängig) oder geht das auch besser ? Ich habe bei der Suche nach etwas gutem bisher leider nur Glu basierende Sachen gefunden.
Deshalb werden momentan keine Texturen angezeigt, also nicht erschrecken. Der Code sieht wegen den ganzen Umstellungen ein wenig chaotisch aus, da viel auskommentiert ist, ich hoffe das ist kein Problem. Der Titel "Razor Engine" passt nicht ganz. Es ist keine Engine, da man nicht eine Unit einbindet und dann damit arbeitet. Es ist eine Funktionssammlung, welche ich im Laufe der Zeit fortführen will, um später übersichtlich alle Funktionen noch zu haben. Man schreibt im Gegensatz zu normalen Funktionssammlungen zumindest bis jetzt direkt in die Hauptdatei der Vorlage rein. Das bedeutet, dass ihr die Razor.pas öffnen müsst, wenn ihr das Projekt offen habt, da dort der eigentliche Code steht. Es gibt bestimmt viele Unschönheiten, nur her damit.

Download

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 03, 2007 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also was Texturen angeht schau dir einfach mal diesen Wiki Artikel an. ;)

Und zu deinem Verschwinden. Also ich würde in jedem Fall auch sagen, dass es ein Problem mit dem Klipping ist. Denn das einzige Mal wo du die Positionen setzt ist um die Planeten zur Seite zu schieben. Wenn du aber die Planeten um die Sonne rotierst werden sie unweigerlich in die Z Richtung zum Benutzer geschoben was dann resultiert, dass sie ausgeblendet werden. Normal solltest du vor dem Zeichnen erst noch einmal kräftig in die negative Z Richtung schieben. Also in etwas so etwas.

Code:
  1.   for i := 0 to Text.Count-1 do
  2.   begin
  3.     Print(5, TextY, Text[i]);
  4.     TextY := TextY + 15;
  5.   end;
  6.  
  7.   glTranslate(0, 0, -10); // Das da
  8.  
  9.   glColor3f(2.0,1.0,3.0);


Wie weit genau musst du selber mal schauen, da die Objekte ja eigentlich auch nur 1.4 einheiten außeinander liegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 03, 2007 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habe das Problem gefixt (siehe Anhang).

Ich habe alle änderungen mit einem
Code:
  1.  
  2.   // FIX
  3.  

markiert.

Was mir aufgefallen ist, ist dass du die Modelview Matrix nicht in jedem Frame zurücksetzt, was aber dringend zu empfehlen ist. Das heißt, dass du jeden Frame deine Modelview Matrix neu aufbauen solltest, wie ich es dir da gerade aufgebaut habe:
Code:
  1.  
  2. procedure TRazor.Render(Sender : TObject; var Done : Boolean);
  3. var i   : Integer;
  4.     Pos : TVec3f;
  5. begin
  6.   tStart := GetTickCount;
  7.  
  8.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  9.   glLoadIdentity; // FIX
  10.   glTranslatef(0.0, 0.0, -5.0); // FIX
  11.   glRotatef(RVX, 1.0, 0.0, 0.0); // FIX
  12.   glRotatef(RVY, 0.0, 1.0, 0.0); // FIX
  13.  
  14.   // ...
  15. end;
  16.  

glTranslatef mit 0.0, 0.0, -5.0 entfernt die nicht vorhandene Kamera (es gibt eigentlich keine) erstmal ein wenig vom Geschehen, sodass du nicht in den Kugeln drin steckst. Danach die beiden Rotationsaufrufe. Dazu noch was: Ich habe deine Mouse-Events gefixt, da die änderungen in der Rotationsmatrix natürlich wegen dem glLoadIdentity jeden Frame verloren gehen. Zuerst einmal zwei neue private Variablen:
Code:
  1.  
  2.   FMouseX, FMouseY: Integer; // FIX!
  3.  

Dann der Fix in deinen Mouse-Events:
Code:
  1.  
  2. procedure TRazor.MouseDown(Sender: TObject; Button: TMouseButton;
  3.   Shift: TShiftState; X, Y: Integer);
  4. begin
  5.   // FIX
  6.   //Rot  := True;
  7.   //RVX  := 0;
  8.   //RVY  := 0;
  9.   //IniX := x;
  10.   //IniY := y;
  11.   // FIX ENDE
  12. end;
  13.  
  14. procedure TRazor.MouseMove(Sender: TObject; Shift: TShiftState; X,
  15.   Y: Integer);
  16. var Tmp : Integer;
  17. begin
  18.   // FIX
  19.   if ssLeft in Shift then
  20.   begin
  21.     RVX  := RVX + (FMouseY - Y);
  22.     RVY  := RVY + (FMouseX - X);
  23.     //IniX := X;
  24.     //IniY := Y;
  25.     //Tmp  := RVX;
  26.     //RVX  := RVY;
  27.     //RVY  := -tmp;
  28.     //glRotatef(2, RVX, RVY, 0);
  29.  end;
  30.  FMouseX := X;
  31.  FMouseY := Y;
  32.  // FIX ENDE
  33. end;
  34.  
  35. procedure TRazor.MouseUp(Sender: TObject; Button: TMouseButton;
  36.   Shift: TShiftState; X, Y: Integer);
  37. begin
  38.   // FIX
  39. //  Rot := False;
  40. end;
  41.  

Das, was in MouseDown und MouseUp ist nicht mehr nötig, da ich den Status der linken Maustaste mit ssLeft in Shift abfrage. Dann addiere ich die Bewegung der Maus, die ich aus der alten Koordinate (FMouseX, FMouseY) und der aktuellen (X, Y) berechne auf die entsprechenden Rotationskomponenten (übrigens isses schöner, wenn man den X-Abstand auf die Y-Rotation addiert).

Last but not least noch der Fix in OnResize. Hier solltest du immer deine Projektionsmatrix neu aufbauen, die bis jetzt bei dir garnicht gesetzt wurde.
Code:
  1.  
  2. procedure TRazor.FormResize(Sender: TObject);
  3. begin
  4. //  ResizeViewport(Fenster.Width, Fenster.Height);
  5.   // FIX
  6.   ClientWidth := Fenster.ClientWidth;
  7.   ClientHeight := Fenster.ClientHeight;
  8.   glViewport(0, 0, ClientWidth, ClientHeight);
  9.   glMatrixMode(GL_PROJECTION);
  10.     glLoadIdentity;
  11.     gluPerspective(60.0, ClientWidth/ClientHeight, 1.0, 100.0);
  12.   glMatrixMode(GL_MODELVIEW);
  13.   glLoadIdentity;
  14.   // FIX ENDE
  15. end;
  16.  

Ersteinmal hole ich mir die neuen Fenstergrößen aus der Fenstervariable (nenn die mal Window oder Form \":wink:\" ). Dann setze ich den Zeichenbereich mit glViewport neu, wechsle in die Projektionsmatrix und setze diese zurück. Danach erstelle ich sie mit gluPerspective für den aktuellen Zustand neu. Zum schluss wieder zurück in die Modelview matrix und sicherheitshalber diese nochmal zurücksetzen.

Und dann habe ich noch das Event in die Form eingetragen:
Code:
  1.  
  2. procedure TfrmMain.FormCreate(Sender: TObject);
  3. begin
  4.   Color := clBlack;
  5.   Razor := TRazor.Create(Self, 640, 640);
  6.   OnResize := Razor.FormResize; // FIX
  7.   OnMouseDown := Razor.MouseDown;
  8.   OnMouseMove := Razor.MouseMove;
  9.   OnMouseUp   := Razor.MouseUp;
  10.   //OnResize := Razor.FormResize;
  11. end;
  12.  


//Edit: Jetz hab ich ganz vergessen, wo das problem lag: Ganz klar, der Fehler war in einer nicht gesetzten Projektionsmatrix und damit bei einem komischen Clipping. Dazu dürfte deine nicht zurückgesetzte Matrix auf dauer Probleme bereiten.

Hier die gefixte Version
(sag mir bescheid, wenn du sie dir heruntergeladen hast, damit ich sie vom Server entfernen kann)

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: Sa Nov 03, 2007 14:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Ich hab es mir gezogen. Ich hoffe, dass ich in Zukunft diese Fehler nicht ständig wiederholen werde. Danke für eure Hilfe. :)

Noch zwei kleine Nebenfragen:
Wenn ich LoadTexture vom Glbitmap loader benutze, dann habe ich bei folgendem Code die Sonne nur gelb gefärbt. Woran könnte das liegen ?
Code:
  1.  
  2.   LoadTexture('./img/sonne.jpg', Tex, False);
  3.   glBindTexture  (GL_TEXTURE_2D , Tex);
  4.   glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_WRAP_S    , GL_REPEAT);
  5.   glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_WRAP_T    , GL_REPEAT);
  6.   glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER, GL_linear);
  7.   glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER, GL_linear);
  8.   glTexEnvi      (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE  , GL_modulate);
  9.  


Die Perspektive sieht nicht schlecht aus, aber die Planeten umkreisen die Sonne nicht wirklich. Was müsste ich dafür noch ändern ?

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 03, 2007 14:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Okay. Ich hätte jetzt eher empfohlen, dass die klasse TglBitmap2D benutzt. Da du die Textur ja eh schon gekappselt hattest. ;)

Ich vermute aber mal es liegt an den nicht vorhandenen Texturkoordinaten.
Code:
  1.   gluQuadricNormals(Sphere, GLU_SMOOTH);
  2.   gluQuadricTexture(quad, True); // Mach mal das da


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 03, 2007 14:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Danke, genau das war der Grund.

Manchmal "reißen die Planeten auf". Da sind dann in gewissen Abständen Linien immer wieder viel zu dunkel, sieht wie ein Riss aus. Sind die Texturen zu klein oder gibt es einen anderen Grund dafür ?

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 03, 2007 15:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nils hat geschrieben:
Die Perspektive sieht nicht schlecht aus, aber die Planeten umkreisen die Sonne nicht wirklich. Was müsste ich dafür noch ändern ?


Hm? Also bei mir umkreisen die Planis die sonne eigentlich... Das einzige problem ist, dass sie beide gleichschnell sind. Dafür müsstest du verschiedene glRotatef-Werte bei den einzelnen Spheren verwenden.

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: So Nov 04, 2007 13:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Hm. Ich habe mal alles gezipt (btw.: ist rar/tar.gz auch ok?).
Es ist ein recht merkwürdiger Bewegungsablauf, beweg also mal die "Kamera", um es noch besser sehen zu können.
In der Datei "Größen.txt" stehen die Radien und Größen der Planeten. Soll ich die korrekten Radien für Jupiter und Saturn wirklich nehmen ? Der Jupiter verdeckt mit 5.68 nämlich alles, aber die Größe ist rechnerisch korrekt.
http://rapidshare.com/files/67365380/asd.zip.html
Ich hoffe, meine Homepage wird bald fertig, dann hört dieser Mist mit RapidShare endlich auf....

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 04, 2007 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habs mir Angeschaut und den Fehler gefunden. Du hast zwar den Tiefenpuffer aktiviert, aber du verwendest ihn nicht:
Code:
  1.  
  2. constructor TRazor.Create(frm: TForm; CliWid, CliHei : Integer);
  3. // ...
  4. begin
  5.   // ...
  6.   glMatrixMode(GL_TEXTURE);
  7.   glRotatef(180, 0.0, 1.0, 0.0);
  8.   glMatrixMode(GL_MODELVIEW);
  9.  
  10.   glEnable(GL_DEPTH_TEST); // FIX
  11.  
  12.   Shin := 15;
  13.   // ...
  14. end;
  15.  

Du solltest auch den Tiefentest aktivieren, dann siehts besser aus.
//Edit: Es mag im Codeschnipsel zwar anders rüberkommen, aber das glEnable hat nichts mit glMatrixMode zu tun.

Hier ist die Datei

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


Zuletzt geändert von Lord Horazont am So Nov 04, 2007 14:44, insgesamt 1-mal geändert.

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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 14 Queries | GZIP : On ]