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

Aktuelle Zeit: So Jul 06, 2025 22:24

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



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: kleine Frage am Rande
BeitragVerfasst: Mo Jan 20, 2003 16:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
Folgendes: Ich hätte in meinem Spiel gern ein Spielfeld. Soweit so gut, nur stellt sich für mich da folgende Frage: Ein Spielfeld muss ja eigentlich nicht pausenlos gerendert werden, da finden ja praktisch keine Änderungen dran statt...also hab ich das einfach nach dem initialisieren von opengl aufgerufen. funktioniert auch, probleme gibts dann aber mit dem
Code:
  1. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
was ich ja nun benötige?

Hat einer da vielleicht nen fixen ratschlag?

gruß Howi

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Also... neu Zeichnen mußt du es jedesmal... :)

Aber nicht neu berechnen. Pack es einfach in eine DisplayList und ruf die einfach jedesmal auf, dann sollte es problemlos gehen.

Code:
  1. var
  2.  
  3.  &nbsp;Feld: GLUInt;

Code:
  1. begin
  2.  
  3.  &nbsp;Feld:=glGenLists(1);
  4.  
  5.  &nbsp;glNewList(Feld,GL_COMPILE);
  6.  
  7.  &nbsp; &nbsp;//Dein spielfeld hier erstellen!
  8.  
  9.  &nbsp;glEndList;
  10.  
  11. end;


und dann um es zu zeichnen:
Code:
  1. glCallList(Feld);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn ich dich richtig verstehe, dann willst du dein Spielfeld nur einmal beim Programmstart in den Frambuffer kopieren, und später nur die Änderungen darauf (z.B. laufende Spielfiguren) rendern, ohne dabei das im Frambuffe befindliche Spielfeld zu verändern?!?

Ds geht rein technisch mit deinem Ansatz nicht.Wenn das Spielfeld im Framebuffer ist, dann wirds durch glClear(GL_COLOR_BUFFER_BIT) ja logischerweise wieder gelöscht.Also dürfte diese Zeile nirgends auftauchen.

Das Ganze wird aber in der Praxis etwas komplizierter, da du den Bereich unter einer Spielfigur irgendwohin kopieren musst, um ihn, nachdem sich die Spielfigur woanders hin bewegt hat wiederherzustellen.
Dazu kopiert man den Bereich entweder in eine eigene Textur (langsam) oder den Akkumulationspuffer (noch langsamer, da nicht hardwarebeschleunigt).
Nehmen wir also an, du machst das mit RenderToTexture :
-> Prüfe wo die Spielfigur steht
-> Kopiere diesen Bereich des Spielfelds in die Textur
-> Zeichne Spielfigur
-> Spielfigur verlässt diesen Platz
-> Kopiere Bereich aus der Textur wieder zurück in de Framepuffer

Kurz und schmerzlos : es macht keinen Sinn...zeichne das Spielfeld einfach in jedem Frame, ansonsten wids wirklich kompliziert, und durch das Pixelkopieren geht auch der Geschwindigkeitsvorteil verloren!

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
ich hab das so gemacht :)

Nun ergibt sich allerdings ein ganz neues Problem.
Code:
  1.  
  2.  
  3.  &nbsp;begin
  4.  
  5.  &nbsp; &nbsp;feld:=glgenlists(1);
  6.  
  7.  &nbsp; &nbsp;glnewlist(feld,gl_compile);
  8.  
  9.  &nbsp; &nbsp;for i:=2 to 10 do
  10.  
  11.  &nbsp;begin
  12.  
  13.  &nbsp; glbindtexture(gl_texture_2d,tex[i]);
  14.  
  15.  &nbsp; glcolor3f(1,1,1);
  16.  
  17.  &nbsp; glbegin(gl_quads);
  18.  
  19.  &nbsp; &nbsp;gltexcoord2f(0,0); glvertex2d(x,y);
  20.  
  21.  &nbsp; &nbsp;gltexcoord2f(0,1); glvertex2d(x,y1);
  22.  
  23.  &nbsp; &nbsp;gltexcoord2f(1,1); glvertex2d(x1,y1);
  24.  
  25.  &nbsp; &nbsp;gltexcoord2f(1,0); glvertex2d(x1,y);
  26.  
  27.  &nbsp;glend();
  28.  
  29.  &nbsp; gltranslatef(-66,0,0);
  30.  
  31.  
  32.  
  33.  &nbsp;end;
  34.  
  35.  &nbsp; glendlist
  36.  
  37.  &nbsp;end;


damit erzeuge ich 8 rechtecke dich ich passend texturiere..allerdings hab ich das gefühl das diese schleife tükisch ist da objekte die ich davor oder danach zeichne schlicht nicht angezeigt werden 8O

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
eventuell siehst du sie nur nicht...?

denn du rufst 8x gltranslatef(-66,0,0) auf... das hieße du bist am ende bei 8*-66 angelang.. *rechnet* bei -528... :)

oder ist das gewollt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
ja schon,ich verschiebe ein rechteck solange bis ich acht hab...

aber ich dachte beim orthomodus wär das relativ egal mit dem verschieben da ich ja eindeutige koordinaten hab?

vielleicht täusch ich mich auch :/

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
versuch's mal so:

Code:
  1.  &nbsp;begin
  2.  
  3.  &nbsp;glPushMatrix;
  4.  
  5.  &nbsp; &nbsp;feld:=glgenlists(1);
  6.  
  7.  &nbsp; &nbsp;glnewlist(feld,gl_compile);
  8.  
  9.  &nbsp; &nbsp;for i:=2 to 10 do
  10.  
  11.  &nbsp;begin
  12.  
  13.  &nbsp; glbindtexture(gl_texture_2d,tex[i]);
  14.  
  15.  &nbsp; glcolor3f(1,1,1);
  16.  
  17.  &nbsp; glbegin(gl_quads);
  18.  
  19.  &nbsp; &nbsp;gltexcoord2f(0,0); glvertex2d(x,y);
  20.  
  21.  &nbsp; &nbsp;gltexcoord2f(0,1); glvertex2d(x,y1);
  22.  
  23.  &nbsp; &nbsp;gltexcoord2f(1,1); glvertex2d(x1,y1);
  24.  
  25.  &nbsp; &nbsp;gltexcoord2f(1,0); glvertex2d(x1,y);
  26.  
  27.  &nbsp;glend();
  28.  
  29.  &nbsp; gltranslatef(-66,0,0);
  30.  
  31.  
  32.  
  33.  &nbsp;end;
  34.  
  35.  &nbsp; glendlist;
  36.  
  37.  &nbsp;glPopMatrix;
  38.  
  39.  &nbsp;end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
ändert auch irgendwie nüscht :(

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:48 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
dann liegt es aber nicht an der funktion.. :)
Zeig doch mal wie du die objekte - welche nicht gezeichnet werden - zeichnest


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
Code:
  1. procedure TMainForm.ApplicationEventsIdle(Sender: TObject;
  2.  
  3.  &nbsp;var Done: Boolean);
  4.  
  5.  
  6.  
  7. var
  8.  
  9.  &nbsp;Error : LongInt; //Fehler?
  10.  
  11.  &nbsp;i:integer;
  12.  
  13. begin
  14.  
  15.  
  16.  
  17.  &nbsp;//Abbrechen, wenn OpenGL noch nicht initialisiert ist
  18.  
  19.  &nbsp;if not OpenGLInitialized then Exit;
  20.  
  21.  &nbsp;//Immer schön neu zeichnen
  22.  
  23.  &nbsp;Done := False;
  24.  
  25.  
  26.  
  27.  &nbsp;glClearColor(0,0,0,0);
  28.  
  29.  &nbsp;glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  30.  
  31.  &nbsp;glLoadIdentity;
  32.  
  33.  
  34.  
  35.  &nbsp;glmatrixmode(gl_projection);
  36.  
  37.  &nbsp; glloadidentity;
  38.  
  39.  &nbsp; gluortho2d(0,1024,0,768);
  40.  
  41.  &nbsp;glmatrixmode(gl_modelview);
  42.  
  43.  
  44.  
  45.  &nbsp;glcolor3f(1,0,0);
  46.  
  47.  &nbsp;glbegin(gl_quads);
  48.  
  49.  &nbsp; glvertex2d(0,0);
  50.  
  51.  &nbsp; glvertex2d(0,93);
  52.  
  53.  &nbsp; glvertex2d(93,93);
  54.  
  55.  &nbsp; glvertex2d(93,0);
  56.  
  57.  &nbsp;glend();
  58.  
  59.  
  60.  
  61.  &nbsp; glcalllist(feld);


da ises, vorerst

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
und äh... was wird nich gezeichnet? :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
vielleicht bin ich auch quader-blind :(

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 17:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
weiß keiner rat? das is sozusagen eine grundvorrausetzung für das spiel :(

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 17:37 
Offline
DGL Member
Benutzeravatar

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

ich hab das jetzt nich ausprobiert, aber ich weiß nich, welcher Teil da jetzt nicht gezeichnet wird... :)

Sag doch nochmal genau was da nicht gezeichnet wird von.. (das Quad?)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 20, 2003 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
naja, alles was ich danach zeichnen möchte(egal wo) wird schlicht nich gezeichnet... :/

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


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


Wer ist online?

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