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

Aktuelle Zeit: Di Jul 15, 2025 20:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Jan 29, 2006 14:01 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Hallöchen mal wieder.
Ich nehme an, ich geh den meisten hier auf die nerven, aber es stellen sich halt wirklich laufend neue Probleme, wo ich keine Antwort zu finde, wenn man an einem, für meine Begriffe, etwas aufwändigeren Projekt arbeitet.

Ich habe das gleiche Problem schonmal von einem Kumpel gehört, dem ich das Programm geschickt hatte, nämlich:

Wenn ich eine der Bewegungstasten nutze (W A S D) dann verschwindet jegliche Geometrie und ich sehe nur die Clearcolor.

Das wäre alles ja noch nicht so der Hokus Pokus, wenn es nicht noch andere Randfaktoren gäbe, die da mit zusammenspielen:

Als mein Kumpel das damals berichtet hatte, dachte ich, das wäre ein einzelfall und läge nur an seiner onboard Grafikkarte und habe es daher ad acta gelegt.
Nun hatte ich aber das selbe Phänomen auf einmal auf meiner Workstation, nachdem ich eine Renderpass Methode eingebaut hatte.
komischerweise tritt das Problem allerdings nur auf meinem Rechner, nicht aber auf meinem Notebook auf.
Wenn ich den Renderpass auskommentiere kann ich mich auch wieder fein bewegen, ohne dass ich nurnoch die Clearcolor zu sehen bekommen.

Ich habe das jetzt auch auf einem anderen Rechner getestet, wo es anstandslos läuft.

Was noch sehr interessant ist, ist folgendes: Bei drücken auf jegliche andere Taste passiert nichts, lediglich wenn ich die Bewegungstasten Nutze.
Wenn ich die Bewegung, die normalerweise die Taste W zum Beispiel nutzt auf etwas anderes lege, wie zum Beispiel das mousewheel, dann funktioniert es auch wieder alles. Es liegt also weder daran, dass ich eine Taste drücke, noch daran, dass die Bewegungsmethode ausgeführt wird.
Es ist eine Kombination aus Tastendruck, mit bewegungsmethode und der aktivierten renderpass. Sobald einer dieser Faktoren Wegfällt funktioniert es wieder.

Allerdings ist das Problem auch nur auf manchen PCs.

Im Renderpass selber zeiche ich eigentlich nur ein Model, auf Bewegung oder sonstiges wird da gar nicht reagiert.
Was ich gerade noch festgestellt habe:
Wenn ich den Renderpass sowohl vor meiner haupt rendering Methode als auch direkt zu Beginn selbiger aufrufe klappt es wieder.
Das ganze kommt echt vor als will mich da einer verarschen.

Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 29, 2006 14:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Wäre es möglicherweise Denkbar, dass man sich auf den unterschiedlichen PC's aufgrund unterschiedlicher FPS mit unterschiedlichen Geschwindigkeiten bewegt ? In dem Fall bist du vermutlich auf den PC's auf denen es nicht klappt einfach so schnell, dass die Geometrie sehr schnell außerhalb des Sichtbereiches liegt.

_________________
Bevor du definierst, was etwas ist, versichere dich seiner Existenz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 29, 2006 17:55 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Würde ich jetzt spontan auch vermuten. Bau mal Timebased Movement ein, falls du es noch nicht getan hast ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 30, 2006 14:18 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Mit timebased movement kann das ja nix zu tun haben.
Weil ich ja nur eine feste Einheit pro Tastatureingabe bewege, und wenn ich nur einmal auf die Taste drücke, dann bin ich ja auch nur um diese Strecke nach vorne.
Zumal das ganze ja auch nicht passiert, wenn ich die Bewegungsmethode auf das Wheel lege. Von daher schließe ich das mal aus.
Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 30, 2006 14:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
lass doch mal n bissle betreffenden code springen, für mich hört sich das alles sehr merkwürdig an.. liegt bestimmt an was ganz anderem...das man so im ersten moment garnicht damit verknüpfen würde..

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 31, 2006 00:56 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Wer ich morgen mal machen, jetzt geh ich erstmal ins Bettle.
Bis denne!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 01, 2006 15:49 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Also ich glaube mittlerweile, dass das ganze nichts mit meinem eigenen sourcecode zu tun hat, sondern der Fehler woanders liegt.
Ich habe jetzt das vorherige Problem behoben indem ich einfach nur den Renderpass wann anders durchlaufen lasse.
Aber das selbe Problem tritt jetzt laufend woanders auf, und es ist für mich nie nachvollziehbar warum.
Ich habe jetzt zum Beispiel die Methode zum anvisieren von Objekten mit der Kamera neu geschrieben und jetzt hab ich das selbe Problem mit der verschwindenden Geometrie, wenn ich das Programm auf meinem PC laufen lasse. Auf dem Notebook läuft es einwandfrei.
Wenn ich bei jedem Renderdurchlauf ein showmessage aufrufe und dann einfach im Programm die enter-taste spamme, dann stockt natürlich alles, aber dann sehe ich sogar auf dem PC dass das klappt. Also die geometrie verschwindet dann nicht.
Ich hab da das Gefühl, dass da ein Problem mit dem Buffer ist. Dass der aus irgendeinem Grund geleert wird.
Wenn ich den Kameramodus umstelle, also ich kein Objekt mehr verfolge erscheint die Geometrie dann wieder.
Soll ich mal das Programm uppen?
Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 01, 2006 22:39 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hast du double buffering für deinen Renderkontext aktiviert?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 01, 2006 22:53 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
jup hab ich.
Genau das ist auch so eine Sache die ich nicht verstehe.
Das ich hab auch als erstes mal ans Doublebuffering gedacht und das kontrolliert, war aber aktiviert.
Eine weitere Sache, die irgendwie auf Probleme mit dem Buffer schließen lässt ist folgende:

Wenn ich mit der Maus auf ein Objekt klicke, dann wird für dieses Objekt ein Renderpass gestartet und das Objekt wird in kleiner Form gerendert um dann ins HUD eingeblendet zu werden.
In dem Moment in dem ich auf das Objekt klicke flackert kurz das Bild.
Wenn ich oft genug draufklicke, dann kann ich sehen, dass ich kurzzeitig den Renderpass eingeblendet kriege, obwohl in dem gesamten Renderpass nirgendwo ein Swapbuffers enthalten ist.
Irgendwie komisch alles.

Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 01, 2006 22:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich glaub jetzt isses an der Zeit mal etwas code zu zeigen. Kannst du uns mal deine GL-Init zeigen, sowie deine Hauptrenderschleife?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 02, 2006 12:54 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
OK:

Mein Formcreate:

Code:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var dmScreenSettings: DevMode;
  3. begin
  4.   WindowState := wsMaximized;
  5.   BorderStyle := bsNone;
  6.   Form1.Cursor:=crNone;
  7.   ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
  8.   with dmScreenSettings do
  9.   begin
  10.     dmSize              := SizeOf(dmScreenSettings);
  11.     dmPelsWidth         := 640;                    // Breite
  12.     dmPelsHeight        := 480;                   // H?e
  13.     dmBitsPerPel        := 32;                      // Farbtiefe
  14.     dmDisplayFrequency  := 85;                // Bildwiederholfrequenz
  15.     dmFields            := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY;
  16.   end;
  17.   if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN)= DISP_CHANGE_BADMODE) then
  18.   begin
  19.     MessageBox(0, 'muh', 'Error', MB_OK or MB_ICONERROR);
  20.     exit;
  21.   end;
  22.  
  23.   DC:= GetDC(Handle);
  24.   if not InitOpenGL then Application.Terminate;
  25.   RC:= CreateRenderingContext( DC,
  26.                                [opDoubleBuffered],
  27.                                32,
  28.                                24,
  29.                                0,0,0,
  30.                                0);
  31.   ActivateRenderingContext(DC, RC);
  32.   Application.OnIdle := IdleHandler;
  33.   SetupGL;
  34.   Init;
  35. end;


SetupGL:

Code:
  1. procedure TForm1.SetupGL;
  2. begin
  3.   glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe
  4.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  5.   glenable(GL_CULL_FACE);           //Backface Culling aktivieren
  6.   glEnable(GL_LIGHTING);
  7.   glEnable(GL_LIGHT0);
  8.   glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);
  9.   glLightModelf(GL_LIGHT_MODEL_AMBIENT,GL_TRUE);
  10.   glInitNames;
  11. end;



Und die Haupt Rendermethode:
Code:
  1.  
  2. procedure TForm1.Render;
  3.   const
  4.     mat_specular   : Array[0..3] of GlFloat = (0, 0, 0, 0);
  5.     mat_shininess  : Array[0..0] of GlFloat = (50.0);
  6.     mat_ambient    : Array[0..3] of GlFloat = (0.5, 0.5,0.5, 0.2);
  7.     mat_diffuse    : Array[0..3] of GlFloat = (0.4, 0.4, 0.4, 0.5);
  8.  
  9.     light_position : Array[0..3] of GlFloat = (10.0, 10.0, 0.0, 1.0);
  10.     light_ambient  : Array[0..3] of GlFloat = (0.6, 0.6, 0.6, 0.5);
  11.     light_diffuse  : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  12.     light_specular  : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  13. begin
  14.   glInitNames;
  15.   glPushName(0);
  16.   glMatrixMode(GL_MODELVIEW);
  17.   glClearColor(0.3, 0.4, 0.7, 0.0);
  18.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  19.   glLoadIdentity;
  20.     glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  21.     glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  22.     glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  23.     glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  24.  
  25.     glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  26.     glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  27.     glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  28.  
  29.   cam.UseMatrix;
  30.   bump.draw;
  31.   terrain.draw;
  32.   glLoadName(3);
  33.   glBegin(gl_triangles);
  34.     glVertex3f(-0.5,1,0);
  35.     glVertex3f(0.5,1,0);
  36.     glVertex3f(0,2,0);
  37.   glEnd;
  38.  
  39.   reader.settime(GetTickcount-earthtime);
  40.   car.bumpadjust(-reader.gets, reader.GetY, reader.GetX1, reader.GetX2, -reader.GetPHIG);
  41.   glLoadName(auto);
  42.   car.draw;
  43.   glLoadName(2);
  44.   hud.drawmenus;
  45.   glPopName;
  46.   SwapBuffers(DC);
  47. end;



EDIT:

Code:
  1. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  2. var movevec:TVector;
  3.     movelength:real;
  4.     domove: boolean;
  5. begin
  6.   StartTime:= GetTickCount;
  7.   Render;
  8.   if assigned(Hud.focused) then
  9.     Hud.focused.hudcallback(Hud.focused);
  10.   DrawTime:= GetTickCount - StartTime;
  11.   domove:=false;
  12.   movelength:=(drawtime/1000)*movespeed;
  13.   movevec[0]:=0;
  14.   movevec[1]:=0;
  15.   movevec[2]:=0;
  16.   if vorne then
  17.   begin
  18.     movevec[2]:=-movelength;
  19.     domove:=true;
  20.   end;
  21.   if hinten then
  22.   begin
  23.     movevec[2]:=movelength;
  24.     domove:=true;
  25.   end;
  26.   if links then
  27.   begin
  28.     movevec[0]:=-movelength;
  29.     domove:=true;
  30.   end;
  31.   if rechts then
  32.   begin
  33.     movevec[0]:=movelength;
  34.     domove:=true;
  35.   end;
  36.   if domove then
  37.     cam.movecam(movevec);
  38.   Inc(TimeCount, DrawTime);
  39.   Inc(FrameCount);
  40.  
  41.   if TimeCount >= 1000 then begin
  42.     Frames:= FrameCount;
  43.     TimeCount:= TimeCount - 1000;
  44.     FrameCount:= 0;
  45.     hud.fps:= Frames;
  46.     ErrorHandler;
  47.   end;
  48.  
  49.   Done:= false;
  50. end;
Der Idle handler ist vielleicht auch noch interressant!

Wie man sieht, ist da einiges aus den Tutorials mit eingeflossen. Ich hoffe mal ich habe da keine gröberen Fehler drin, die ich nicht raffe, das wär peinlich :]

Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 02, 2006 14:51 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Geh ich richtig in der Annahme, dass du mit cam.usematrix deine Kamera postierst?

Wenn dem so ist, kann es sein, dass deine Y-Komponente immer 0 ist, und du damit im Model stehst? Setz mal statt 0 irgendwas größeres ein. Mal sehn, ob du dann was siehst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 02, 2006 19:35 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Da hast du recht, dass ist die Methode zum Positionieren der Kamera.
Aber wie meinst du das "Im Model stehen" ?
Ich hab ja nicht nur ein Model, sondern mehrere.
Der Y-Wert ist nicht immer 0, sondern wird natürlich verändert, wenn ich die Kamera nach oben Positioniere.
Weiterhin wäre das ja ein Fehler, der dann auf jedem Rechner auftreten würde und nicht nur auf einem.
Und der Fehler würde dann auch nicht so auftreten wie er es jetzt tut.

Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.011s | 14 Queries | GZIP : On ]