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

Aktuelle Zeit: Mi Jul 16, 2025 21:55

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: BodenTextur flimmert
BeitragVerfasst: Sa Nov 08, 2003 19:58 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
Hi.. nach längerer zeit mal wieder was von mir..

Auch wenn ich im moment durch Job so gut wie keine zeit hab, bin ich im moment dabei nen 2D top down Scroller zu basteln. (kommt auch noch demnächst in die projekt section)

Für den Boden hab ich ne 128 x 128 textur die je nach gegener geschwindigkeit weiter nach unten gesetzt wird und bei -128 einheiten wieder auf 0 zurück gesetzt wird.

das hat soweit auch gut funktioniert.. bis ich TimeBased Movement eingebaut hab.. (auf grundlage des bomberman tutorials)
Jetzt funktioniert es prinzipiell immer noch, allerdings flimmert die bodentextur jetzt..

Meine Vermutung ist das es mit den grossen nachkomma werten vom Zeitfaktor zusammenhängt.. aber ich bekomm das problem nicht gelöst.

Mein code für den boden sieht im moment so aus..
Code:
  1.  
  2. Procedure DrawGround;
  3. begin
  4.  glPushMatrix;
  5.  
  6.    Scroolpos := Scroolpos + (Scrollspeed * TimeFactor);
  7.  
  8.    if >= 128 then Scroolpos := 0;
  9.  
  10.    glTranslatef(0,Scroolpos,0);
  11.  
  12.    GroundImage.Bind;
  13.  
  14.      glBegin(GL_QUADS);
  15.       glTexCoord2f(0,0);    glVertex3f(0,768,-2);
  16.       glTexCoord2f(0,6+1);  glVertex3f(0,0-128,-2);
  17.       glTexCoord2f(8,6+1);  glVertex3f(1024,0-128,-2);
  18.       glTexCoord2f(8,0);    glVertex3f(1024,768,-2);
  19.     glEnd;
  20.  
  21.  glPopMatrix;
  22. end;
  23.  


Wie gesagt es der code macht was es soll, nur halt das der boden komisch flackert / flimmert.
Ist irgenwie schwer zu beschreiben und auf nem screenshot isses nicht zu sehen, aber vieleicht hat ja trotzdem jemand ne idee oder nen vorschlag.

mfg avenger

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 08, 2003 21:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Wenn dein Flimmern eher ein mehr oder weniger regelmäßiges Ruckel inst, solltest du

if >= 128 then Scroolpos := 0;

besser durch

while ScrollPos >=128 do ScrollPos := ScrollPos - 128;

ersetzen - bei Animationen musst du immer bedenken, dass der Ablauf flüssig sein soll, daher solltest du auch bei Loops einen eventuellen Übertrag berücksichtigen.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 08, 2003 22:31 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
mit der methode läufts auf jedenfall flüssiger..
danke dafür

behoben hat das mein problem aber nicht :(

wirklich schlimm ist es aber nur auf bei manchen texturen.. und bei anderen sieht man das fast gar nicht.

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 08, 2003 22:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Tja, ohne mehr Einblick in deinen Source (z.B. wo du SwapBuffers aufrufst) kann ich nicht mehr viel weiterhelfen.
Dein Codeschnippsel schaut soweit korrekt aus, also nehme ich an, dass das Problem anderswo liegt. (Eventuell in GroundImage, dass kein korrektes Texturhandle zugewiesen wurde, oder du "vergisst" irgendwelche Rendereinstellungen zurückzusetzen - aber wie gesagt, ohne mehr Code kann ich nur raten).
Wenn du willst, kannst du ja einen Link auf das Projekt online stellen, dann kann man dir eher helfen.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 08, 2003 23:32 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
die swapbuffers tausche ich im on idle aus.. davor wird gezeichnet, danach gerechnet.
Zum laden der bilder nehme ich glBmp..

ich häng den source mal ran..


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

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 09, 2003 13:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Bitte gepostetem Code auch Zusatzbibliotheken hinzufügen: ich musste erst OpenGL12 und glBMP hinzufügen, sowie die Soundunterstützung rauslöschen, bevor ich das Ganze kompilieren konnte. Außerdem sehe ich keinen Grund warum man anstelle von OpenGL12 nicht das aktuellere dglOpenGL verwenden sollte, das aktueller ist sowie laufend gewartet wird, sollten irgendwelche Ungereimtheiten auftreten.

Ich sah zuerst überhaupt keinen Boden - was auch nicht verwunderlich war, hast du diesen doch vor den Bildschirm gelegt (sozusagen auf die Userseite :wink: ).

Nach der Änderung von DrawGround auf folgenden Code:
Code:
  1.     glBegin(GL_QUADS);
  2.       glTexCoord2f(0,0); glVertex3f(0,768,2);
  3.       glTexCoord2f(0,6+1); glVertex3f(0,0-128,2);
  4.       glTexCoord2f(8,6+1); glVertex3f(1024,0-128,2);
  5.       glTexCoord2f(8,0); glVertex3f(1024,768,2);
  6.     glEnd;
  7.  


Funktionierte dann alles wunderbar ohne Geflimmer. Prinzipiell ist der Z-Wert im Orthomodus egal - nur negativ darf er nicht sein.
Damit das Schiff noch gezeichnet wird, musst du in DrawShip noch glDisable(GL_DEPTH_TEST); aufrufen.

Ausserdem lieferte das Programm beim Beenden jedesmal lästige Fehlermeldungen, da du den OpenGL Kontext zweimal freigibst:

Zitat:
// DeactivateRenderingContext();
// DestroyRenderingContext(RC);
closeOpenGL();


closeOpenGL langt völlig aus.

Ansonsten ist dein Code durchaus lesbar - und das Ganze schaut schon mal gar nicht schlecht aus.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 09, 2003 14:00 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
Erstmal ein dankeschön das du dir das angeguckt hast..
ich hatte nen paar probleme mit der max upload grösse, naja hätte aber nen paar grafiken rauslassen können...

da ich mit dem neuen gl1.5 kram sowieso nix anfangen kann bin ich halt erstmal bei 1.2 geblieben.
naja und ich denke die DGL Opengl header seien so gut wie kompatibel.. dann hättest du doch theoretisch nur den header ändern müssen?

ich erstelle den ortho modus doch mit
Zitat:

glOrtho(0, 1024, 768, 0, -2, 2);

dann hab ich doch eine Z-Ebene von 2 bis -2 oder hab ich da was falsch verstanden? jedenfalls funktioniert es so bei mir, und ich seh alles wie es sein soll.

Den fehler beim beenden von opengl kann ich auch nicht nachvollziehen.. da ich das bis jetzt auch immer so gemacht hat und sowohl bei mir als auch bei anderen leuten keine fehler gibt.

ich hab das mal geändert wie du gesacht hast, aber bei mir flimmert das trotzdem noch :(

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 09, 2003 14:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Also jetzt habe ich es auch auf meinem Desktop getestet: hier funktioniert deine Version tatsächlich - da es aber auf einer ATI 9000 definitiv nicht klappt, musst du als z-Wert einen Wert > -2 nehmen (anscheinend clippt die ATI standardmäßig bereits bei ZMin - von dem ich annahm, er läge bei 0, da es nicht funktionierte).

Auf der ATI flimmert auch nichts - bei meiner GeforceFX hingegegen wohl. "Schuld" ist deren Texturfilterung - besonders gut zu sehen, wenn du etwa
Code:
  1.    glTranslatef(0,GameOpt.Scrollpos/128,0);
  2.  


in dein DrawGround einfügst - dann siehst du, wie die Textur langsam überläuft, was besonders bei kontrastreichen Texturen auffällig ist. Schaut immerhin gar nicht schlecht aus - fast wie dynamischen Bumpmapping :D .

Relativiert wird das Problem durch folgendes Kommando
Code:
  1.    glTranslatef(0,Round(GameOpt.Scrollpos),0);
  2.  
. Da hier zumindest bei SubPixeln nicht mehr gefiltert wird.
ich würde dir aber anraten, entweder weniger kontrastreiche Texturen zu verwenden - oder besser, den Texturfilter auf GL_NEAREST zu setzen, was bei deinen Bodentexturen ohnehin besser wäre, da die Texel fast Pixeln entsprechen.

Der NVidia Treiber ist insofern angenehmer programmiert, als er das doppelte Freigeben des Renderkontextes schluckt - korrekt ist das aber trotzdem nicht (ich nehme an, du hast ebenfalls eine NVidia Karte?).
Übrigens funktioniert das Programm nur bei einer Auflösung von 1024x768 korrekt (ich dachte zuerst du wolltest in die schwarzen Balken oben und rechts später noch was hineinzeichnen - nachdem die Grafik bei besagter Auflösung bildschirmfüllend ist, ist dies wohl eher nicht der Fall ?)

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 09, 2003 15:16 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
jo ich hab neuerdings ne GeForce2 pro.. meine kyroII hat mit dem beenden aber auch nicht gemeckert..

Das mit der auflösung hab ich noch gar nicht weiter beachtet... :-) sollte aber kein problem sein das zu ändern..

Den sachen mit den texturen werd ich nachher mal nachgehen.. weil ich gleich erstma wech muss..

aber nochmal vielen dank für die hilfestellung..

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.009s | 16 Queries | GZIP : On ]