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

Aktuelle Zeit: Mi Jul 09, 2025 20:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Frage zu Tutorial4
BeitragVerfasst: Mo Apr 14, 2008 21:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Hallo
ich hab eine Frage zum 4rten Tutorial:
Das ist ja alles recht verständlic hbis zu dem Punkt wo voraus gesetzt wird dass man eine Landschaft selber gestalten kann :roll:
Ich bin leider noch ziemlicher Anfänger und hoffe desshalb dass mir jemand erklären kann wie ich das machen muss. (aber bitt einfach).
Ich würde am Ende gern ungefähr so eine Landschaft wie auf den Beispielbildern in Tutorial4 herausbekommen.
Vielen Dank schonmal im Voraus :lol:
MFG


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

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

ich glaube dein Problem ist der Teil mit dem "Map-Array", oder?

Code:
  1.  
  2.  
  3.     MAP : array[0..mWIDTH+1,0..mHEIGHT+1] of single;
  4.  
  5.  
  6.     randomize;
  7.     for x:=0 to mWidth do
  8.        for y:=0 to mHeight do
  9.           Map[x,y]:=0.01*Random(50);
  10.  
  11.  


Das ganze sollte so in der Art erstellt werden.

Du kannst dir auch den Source Code zu dem Tutorial runterladen.

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 11:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
ok das probier ich mal wenn ich zuhasue bin...
ich glaub aba nich dat das das richtige is weil ich brauch einfach nur den Code um die Vierecke zu einer Map zusammenzzu bauen.

PS: Den Source Code hab ich mir schon runter geladen der funzt aber bei mir nich, weil eine der verwendeten Units nicht vorhanden ist :roll:
MFG

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 16:12 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Welche Unit fehlt?

Hast du dir den DGLSDK runter geladen? Dort sind viele Units, Loader und Beispiele dabei.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

der Code um eine "Map" zu machen ist ja im Tutorial. Ich hab mal nur das wichtigste da gelassen:

Code:
  1.  
  2. for y:=0 to YCount-1 do
  3. begin
  4.   glPushMatrix;
  5.   for x:=0 to XCount-1 do
  6.   begin
  7.     glBegin(GL_QUADS);
  8.       glVertex3f(0,  Map[x,y+1],     0);
  9.       glVertex3f(0,  Map[x,y],         1);
  10.       glVertex3f(1,  Map[x+1,y],     1);
  11.       glVertex3f(1,  Map[x+1,y+1],  0);
  12.     glEnd;
  13.     glTranslatef(1,0,0);
  14.   end;
  15.   glPopMatrix;
  16.   glTranslatef(0,0,-1);
  17. end;
  18.  


Du hast zwei Schleifen, in denen du einzelne Quads zeichnest (in x und z Richtung), die sich hinterher zu deiner "Map" zusammensetzen.

In der inneren Schleife wird bei jedem Durchgang glTranslatef(1, 0, 0); ausgeführt, um beim nächsten Durchgang weiter rechts zu zeichnen.
Bei der äußeren
glTranslatef(0, 0, -1); um weiter hinten zu zeichnen. Dabei zeichnest du XCount*YCount Quads mit jeweis den Seitenlängen von 1.
glPushMatrix und glPopMatrix werden benutzt, um in jeder Reihe nach hinten wieder von links anzufangen die Quads in x Richtung zu zeichnen.

In Map[x, y] stehen nur per Random erstellte Y Werte drinne, um ein paar "Bodenwellen" zu erzeugen. würdest du da überall 0 reinschreiben hättest du im Endeffekt nur ein großes Quad bestehend aus den kleineren.

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 18:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Markus hat geschrieben:
Code:
  1.  
  2. for y:=0 to YCount-1 do
  3. begin
  4.   glPushMatrix;
  5.   for x:=0 to XCount-1 do
  6.   begin
  7.     glBegin(GL_QUADS);
  8.       glVertex3f(0,  Map[x,y+1],     0);
  9.       glVertex3f(0,  Map[x,y],         1);
  10.       glVertex3f(1,  Map[x+1,y],     1);
  11.       glVertex3f(1,  Map[x+1,y+1],  0);
  12.     glEnd;
  13.     glTranslatef(1,0,0);
  14.   end;
  15.   glPopMatrix;
  16.   glTranslatef(0,0,-1);
  17. end;
  18.  


Das ist nicht sehr performant. Der Aufruf von glBegin und glEnd sollte ausgelagert werden, der Performance halber. Bei einer größeren map kommt es da zu Geschwindigkeitseinbußen. Ich würde eher einen solchen Aufbau vorschlagen:
Code:
  1.  
  2. glBegin(GL_QUADS);
  3.   for y:=0 to YCount-1 do
  4.   begin
  5.     for x:=0 to XCount-1 do
  6.     begin
  7.       glVertex3f(x,  Map[x,y+1],     y);
  8.       glVertex3f(x,  Map[x,y],         y+1);
  9.       glVertex3f(x+1,  Map[x+1,y],     y+1);
  10.       glVertex3f(x+1,  Map[x+1,y+1],  y);
  11.     end;
  12.   end;
  13. glEnd;
  14.  


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: Di Apr 15, 2008 18:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
ok ich hab das jetz ma reinkopiert aber als was muss ich y,x und alle weiteren Variablen usw. deklarieren und muss ich ihnen irgentwelche Startwerte geben ?

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 18:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
X und Y sind ja Zählvariablen, die kannst du einfach als Integer deklarieren.
XCount und YCount sind dann jeweils die Anzahl der Felder in der entsprechenden Richtung in deinem Map-Array. Wenn du also ein Array von 256x128 Einträgen hast, dann ist XCount = 256 und YCount = 128.

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: Di Apr 15, 2008 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
ahh ok also x und y sind integer und denen muss nix zugewiesen werden.

Muss ich diese Zahlen für xCount und YCount denn zuweisen oder sind das Funktionen ? Und wenn es keine Funktionen sind dann sind XCount und YCount auch integer ne?

Jetz noch eine ganz doof eFrage:
Diese Map array: wie muss ich das deklarieren ? ich kenn bis jetzt nur array of integer aber das kann ja nicht laufen weil das map array ja 2 zähler hat.



PS: danke schonmal für die Antworten bis jetzt :)

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 19:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Für den Anfang würde ich dir ein Statisches Zweidimensionales Array empfehlen á lá:
Code:
  1.  
  2. const
  3.   XCount: Integer = 256;
  4.   YCount: Integer = 256;
  5. type
  6.   TMapArray = array [0..XCount-1, 0..YCount-1] of Single;
  7.  

Der Wert der einzelnen Arrayzellen sollte von 0 bis 1 gehen (Fließkomma), damit es nachher in der Map nicht so schlimm aussieht, da deine Felder 1x1 Einheiten groß sind. Wenn die dann einen höhenunterschied von 100 Einheiten haben, sieht das sehr... weird aus.

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: Di Apr 15, 2008 19:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
MHM ok das hab ich jetz drin aber der sagt mir jetzt dass bei
TMapArray : array [0..XCount-1, 0..YCount-1] of Single;
2 Konstanten ausdrücke erwartet werden (also nicht gefudnen wurden)
Obwohl ich xCOunt unYCount schon vorher bei const reingeschrieben habe.

Muss ich da osnst noch irgentwas tun?

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 20:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Entwerder du machst es so, wie Lord Horazont gesagt hat, mit einem type. Oder so, wie in meinem ersten Post, indem du gleich eine Variable deklarierst.

( Du hast ein ":" statt dem "=" ) Wenn du es mit einem type machst braucht du dann noch eine Variable:

Code:
  1.  
  2. const
  3. XCount: Integer = 256;
  4. YCount: Integer = 256;
  5.  
  6. type
  7. TMapArray = array [0..XCount-1, 0..YCount-1] of Single;
  8.  
  9. var
  10. Map: TMapArray;
  11.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 15, 2008 21:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Code:
  1.  
  2. Const
  3.  XCount: Integer = 256;
  4.  YCount: Integer = 256;
  5. type
  6.   TMapArray = array [0..XCount-1, 0..YCount-1] of Single;
  7.   TForm1 = class(TForm)
  8.     Timer1: TTimer;
  9.  
  10.     procedure FormCreate(Sender: TObject);
  11.     procedure IdleHandler(Sender: TObject; var Done: Boolean);  //nur für die OnIdle Methode!
  12.     procedure FormResize(Sender: TObject);
  13.     procedure FormDestroy(Sender: TObject);
  14.  
  15.   private  { Private-Deklarationen }
  16.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  17.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  18.     procedure SetupGL;
  19.     procedure Render;
  20.     procedure ErrorHandler;
  21.  
  22.  
  23.   public   { Public-Deklarationen }
  24.     DC                                : HDC;  //Handle auf Zeichenfläche
  25.     RC                                : HGLRC;//Rendering Context
  26.  
  27.   end;
  28.  
  29. var
  30.   Form1: TForm1;
  31.   // XCount,YCount : integer;
  32.   Map: TMapArray;
  33.  



so sieht mein Anfang vom Program jetzt aus.
Und dann kommt immer noch der Fehler:
Konstantenausdruck erwartet.

Ich habe XCount-1 und YCount-1 in TMapArray = array [0..XCount-1, 0..YCount-1] of Single; einfach mal durch 255 ausgetauscht (also das was herauskommrn würde). Dann startet das Program es erscheint aber nichts außer einem schwarzen Bildschirm. Woran liegt das ? Vielleicht braucht ihr dafür meine Render Procedure noch:
Code:
  1.  
  2.  procedure TForm1.Render;
  3.   var y,x :integer;
  4.  
  5.  begin
  6.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.   glMatrixMode(GL_PROJECTION);
  8.   glLoadIdentity;
  9.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  10.  
  11.   glMatrixMode(GL_MODELVIEW);
  12.   glLoadIdentity;
  13.  
  14.   glTranslatef(0, 0, -16);
  15.  
  16.  
  17. glBegin(GL_QUADS);
  18. for y:=0 to YCount-1 do
  19. begin
  20. for x:=0 to XCount-1 do
  21. begin
  22. glVertex3f(x, Map[x,y+1], y);
  23. glVertex3f(x, Map[x,y], y+1);
  24. glVertex3f(x+1, Map[x+1,y], y+1);
  25. glVertex3f(x+1, Map[x+1,y+1], y);
  26. end;
  27. end;
  28. glEnd;
  29.  
  30.  
  31.   SwapBuffers(DC);
  32. end;
  33.  

hoffentlich bekomm wa das Problem bald hin :)
MFG

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Zuletzt geändert von DK99 am Mi Apr 16, 2008 12:54, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 16, 2008 09:37 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hast du das nur vergessen zu kopieren, oder fehlt dort das "const" am Anfang deines Codes?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 16, 2008 12:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
nee dat hab ich nur nich mit reinkopiert da stehn noch einige anderen const Werte drüber :wink:

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


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


Wer ist online?

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