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

Aktuelle Zeit: Di Jul 08, 2025 10:36

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



Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 16, 2008 13:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Du darft die Konstante nicht so deklarieren. Lass mal das "integer" weg und schreibe:

Code:
  1.  
  2. XCount = 256;
  3.  


Markus


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

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
ahh ok das funktioniert jetzt danke :P

Aber leider wird einfach nur ein schwarzes Fenster angezeigt?! :roll: ISt da überhaupt was entstanden ? Oder muss ich erst noch die Texturen einbauen um etwas zu sehen :?:
MFG

EDIT:
Code:
  1.  
  2.  procedure TForm1.Render;
  3.   var y,x :integer;
  4.       TexID :gluInt;
  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.   glEnable(GL_TEXTURE_2D);
  17.  
  18.   tex := IMG_Load('./wiki.jpg');
  19.   if assigned(tex) then
  20.   begin    
  21.     glGenTextures(1, @TexID);
  22.     glBindTexture(GL_TEXTURE_2D, TexID);
  23.  
  24.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  25.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  26.  
  27.  
  28.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  29.  
  30.     SDL_FreeSurface(tex);
  31.   end;
  32.  
  33. glBegin(GL_QUADS);
  34. for y:=0 to YCount-1 do
  35. begin
  36. for x:=0 to XCount-1 do
  37. begin
  38. glVertex3f(x, Map[x,y+1], y);
  39. glVertex3f(x, Map[x,y], y+1);
  40. glVertex3f(x+1, Map[x+1,y], y+1);
  41. glVertex3f(x+1, Map[x+1,y+1], y);
  42. end;
  43. end;
  44. glEnd;
  45.  
  46.  
  47.   SwapBuffers(DC);
  48. end;
  49.  

Das ist meine jetztige Render Funktion. Das Programm kompiliert jetzt aber es wird nur ein schwarzer Bildschirm angezeigt. :roll: Dabei müsste doch eigentlich die Landschaft angezeigt werden und auf jedes Viereck das Bild wiki.jpg als Textur gemalt werden.
Hab ich da noch nen Fehler drin oder einfach was vergessen?
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: Mi Apr 16, 2008 14:38 
Offline
DGL Member
Benutzeravatar

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

du solltest die Textur nicht in der Renderprocedure laden. Du musst sie ja nicht bei jedem Durchgang neu erstellen. Lade sie in einer Procedure, die du einmal bei Programmstart ausführst.

Außerdem wirst du keine Textur darauf sehen (bzw. nicht richtig) da du dazu die Texturkoordinaten per glTexCoord2f() setzen musst. Schau dir dazu am Besten nochmal das Tutorial an.

Es kann sein, dass das, was du zeichnest nicht im Bildschirmbereich ist. Versuche einfach mal mittels glTranslatef(x, y, z) die Szene ein bisschen zu verrücken. (Vielleicht mal mit einem y < 0)

Markus


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

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
ich würde eher darauf tippen, dass nichts zu sehen ist, weil sich der map mittelpunkt im betrachter mittelpunkt befindet.

Wenn man vor der zeichen procedure bzw. der zeichenschleife in diesem fall ein gltranslatef(0,8,15); einfügt und ein glrotatef(30,1,0,0); sollte man eine schräge drauf sicht haben auf das geschehen. Mit den translatef(x,y,z); werten kann man dann natürlich rumspielen, aber das rotatef sollte so ungefähr sein, damit man was sieht.

Ich probiers gleich nochmal schnell selbst aus und poste dann mal etwas code.


EDIT:>>

habs gerade gebastelt und das fise daran ist, dass man durch die positiven x,y, koordinaten quasie hinter sich zeichnet (wenn man davon ausgeht, dass x=links/rechts, y=hoch/runter und z=vorn/hinten ist).

Code:
  1.  
  2.   gltranslatef(-64,-24,-64);
  3.   glrotatef(30,1,0,0);
  4.  
  5.   glbegin(gl_quads);
  6.   for i:=0 to 127 do
  7.   begin
  8.     for j:=0 to 127 do
  9.     begin
  10.  
  11.       glcolor3f(map[i,j]/4,map[i,j]/4,map[i,j]/4);
  12.       glvertex3f(i-0.5,map[i,j],(j-0.5)*-1);
  13.  
  14.       glcolor3f(map[i+1,j]/4,map[i+1,j]/4,map[i+1,j]/4);
  15.       glvertex3f(i+0.5,map[i+1,j],(j-0.5)*-1);
  16.  
  17.       glcolor3f(map[i+1,j+1]/4,map[i+1,j+1]/4,map[i+1,j+1]/4);
  18.       glvertex3f(i+0.5,map[i+1,j+1],(j+0.5)*-1);
  19.  
  20.       glcolor3f(map[i,j+1]/4,map[i,j+1]/4,map[i,j+1]/4);
  21.       glvertex3f(i-0.5,map[i,j+1],(j+0.5)*-1);
  22.  
  23.     end;
  24.   end;
  25.   glend;
  26.  


das hats bei mir gebracht. ist jetzt zwar mit konstanter größe von 128 (0..127) und auch nicht mit texturen, sondern mit glcolor3f(); aber die color tags mit den texturen auszutauschen, oder zusätzlich zu nehmen sollte kein weltuntergang sein. das "/4" kommt bei der color3f zustande, weil ich im map[] array zufällige werte von 0..3 zauber und die color3f funktion ja nur nen werte bereich von 0..1 hat.

das translatef verschiebt den ganzen gezeichneten krempel genau vor deine Nase und das rotatef lsst dich etwas nach unten schauen, damit du auch bischen was siehst. Also den werten nach würde ich ein gltranslatef(maxX/2*-1,camerahöhe*-1,maxY/2*-1) nehmen. das rotatef kann so bleiben. das die Variablen bei mir i,j heißen zum zählen ist n alter informatiker/elektriker tick. Ob du die nu x/y oder schieß michtot nennst ist völlig Hupe, aber von der Idee her läufts.

Übrigens das Textur laden solltest du mindestens nach Form1.oncreate() auslagern, weil du das nur einmal machen musst. Wenn du das in der Render-prozedur drin lässt, dann ballerst du dir den ganzen speicher zu und verschleuderst durch die aufrufe framerates.

Edit:>> gut den speicher nicht unbedingt, ist aber trotzdem laaangsam.

_________________
Klar Soweit?


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

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
OMG das kann doch jetz echt nich sein :? :roll: :roll: :roll:
Bei dir funzt das und bei mir läuft wieder gar nix. Wird einfach nen schwarzer Bildschirm angezeigt :x :x
Hier is jetz mal mein ganzer Quelltext mit diesem neu eingebauten Sachen:
Code:
  1.  
  2. unit UnitLandschaft3;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs,DGLOpenGL, ExtCtrls,SDL, SDL_Image;
  9. const
  10.  NearClipping = 1;
  11.  FarClipping  = 1000;
  12.  XCount       = 256;
  13.  YCount       = 256;
  14. type
  15.   TMapArray = array [0..XCount-1, 0..YCount-1] of Single;
  16.   //TMapArray = array [0..255, 0..255] of Single;
  17.   TForm1 = class(TForm)
  18.     Timer1: TTimer;
  19.  
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure IdleHandler(Sender: TObject; var Done: Boolean);  //nur für die OnIdle Methode!
  22.     procedure FormResize(Sender: TObject);
  23.     procedure FormDestroy(Sender: TObject);
  24.  
  25.   private  { Private-Deklarationen }
  26.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  27.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  28.     procedure SetupGL;
  29.     procedure Render;
  30.     procedure ErrorHandler;
  31.  
  32.  
  33.   public   { Public-Deklarationen }
  34.     DC                                : HDC;  //Handle auf Zeichenfläche
  35.     RC                                : HGLRC;//Rendering Context
  36.  
  37.   end;
  38.  
  39. var
  40.   Form1: TForm1;
  41.   tex : PSDL_Surface;
  42.   Map: TMapArray;
  43. implementation
  44.  
  45. {$R *.dfm}
  46.  
  47.  
  48.  
  49. procedure TForm1.FormCreate(Sender: TObject);
  50. var TexID :gluInt;
  51. begin
  52.   DC:= GetDC(Handle);
  53.   if not InitOpenGL then Application.Terminate;
  54.   RC:= CreateRenderingContext( DC,
  55.                                [opDoubleBuffered],
  56.                                32,
  57.                                24,
  58.                                0,0,0,
  59.                                0);
  60.   ActivateRenderingContext(DC, RC);
  61.   SetupGL;
  62.   glClearColor(0.0, 0.0, 0.0, 0.0); // nur evetuell verwenden siehe nächster Teil
  63.   Application.OnIdle := IdleHandler;
  64.  
  65.    tex := IMG_Load('./wiki.jpg');
  66.   if assigned(tex) then
  67.   begin
  68.     glGenTextures(1, @TexID);
  69.     glBindTexture(GL_TEXTURE_2D, TexID);
  70.  
  71.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  72.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  73.  
  74.  
  75.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  76.  
  77.     SDL_FreeSurface(tex);
  78.   end;
  79. end;
  80.  
  81. procedure TForm1.SetupGL;
  82. begin
  83.   glClearColor(0.2, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau ode rauch nichT <!-- s:) --><img src=\"{SMILIES_PATH}/icon_smile.gif\" alt=\":)\" title=\"Smile\" /><!-- s:) -->
  84.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  85.   //glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  86. end;
  87.  
  88. procedure TForm1.FormResize(Sender: TObject);
  89. var tmpBool : Boolean;
  90. begin
  91.   glViewport(0, 0, ClientWidth, ClientHeight);
  92.   glMatrixMode(GL_PROJECTION);
  93.   glLoadIdentity;
  94.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  95.  
  96.   glMatrixMode(GL_MODELVIEW);
  97.   glLoadIdentity;
  98.   IdleHandler(Sender, tmpBool); //nur für OnIdle!
  99. end;
  100.  
  101. procedure TForm1.FormDestroy(Sender: TObject);
  102. begin
  103.   DeactivateRenderingContext;
  104.   DestroyRenderingContext(RC);
  105.   ReleaseDC(Handle, DC);
  106. end;
  107.  
  108.  
  109.  procedure TForm1.Render;
  110.   var j,i :integer;
  111.       TexID :gluInt;
  112.  begin
  113.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  114.   glMatrixMode(GL_PROJECTION);
  115.   glLoadIdentity;
  116.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  117.  
  118.   glMatrixMode(GL_MODELVIEW);
  119.   glLoadIdentity;
  120.  
  121.   glTranslatef(0, 0, -16);
  122.  
  123.   glEnable(GL_TEXTURE_2D);
  124.  
  125.  
  126.  
  127. glTranslatef(-64,-24,-64);
  128. glRotatef(30,1,0,0);
  129.  
  130. glBegin(gl_quads);
  131. for i:=0 to 127 do
  132. begin
  133. for j:=0 to 127 do
  134. begin
  135.  
  136. glColor3f(map[i,j]/4,map[i,j]/4,map[i,j]/4);
  137. glVertex3f(i-0.5,map[i,j],(j-0.5)*-1);
  138.  
  139. glColor3f(map[i+1,j]/4,map[i+1,j]/4,map[i+1,j]/4);
  140. glVertex3f(i+0.5,map[i+1,j],(j-0.5)*-1);
  141.  
  142. glColor3f(map[i+1,j+1]/4,map[i+1,j+1]/4,map[i+1,j+1]/4);
  143. glVertex3f(i+0.5,map[i+1,j+1],(j+0.5)*-1);
  144. glColor3f(map[i,j+1]/4,map[i,j+1]/4,map[i,j+1]/4);
  145. glVertex3f(i-0.5,map[i,j+1],(j+0.5)*-1);
  146.  
  147. end;
  148. end;
  149. glEnd;
  150.  
  151.  
  152.  
  153.  
  154.   SwapBuffers(DC);
  155. end;
  156.  
  157.  
  158. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  159. begin
  160.   StartTime:= GetTickCount;
  161.   Render;
  162.   DrawTime:= GetTickCount - StartTime;
  163.   Inc(TimeCount, DrawTime);
  164.   Inc(FrameCount);
  165.  
  166.   if TimeCount >= 1000 then begin
  167.     Frames:= FrameCount;
  168.     TimeCount:= TimeCount - 1000;
  169.     FrameCount:= 0;
  170.     Caption:= InttoStr(Frames) + 'FPS';
  171.     ErrorHandler;
  172.   end;
  173.   sleep(40);
  174.   Done:= false;
  175. end;
  176.  
  177.  
  178. procedure TForm1.ErrorHandler;
  179. begin
  180.   Form1.Caption := gluErrorString(glGetError);
  181. end;
  182.  
  183.  
  184.  
  185.  
  186. end.
  187.  

_________________
"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: Mi Apr 16, 2008 19:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
So ich hab das jetz bissl umgebaut und jetzt seh ich auch was .Meine Render Funktion sieht jetzt so aus:
Code:
  1.  
  2.  procedure TForm1.Render;
  3.   var j,i :integer;
  4.       TexID :gluInt;
  5.  
  6.  begin
  7.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  8.   glMatrixMode(GL_PROJECTION);
  9.   glLoadIdentity;
  10.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  11.  
  12.   glMatrixMode(GL_MODELVIEW);
  13.   glLoadIdentity;
  14.  
  15.  // glTranslatef(0, 0, -16);
  16.  
  17.   glEnable(GL_TEXTURE_2D);
  18.  
  19.  
  20.  
  21. glTranslatef(-64,-24,35);
  22. glRotatef(30,1,0,0);
  23.  
  24.  
  25.  
  26. glBegin(gl_quads);
  27. for i:=0 to 127 do
  28. begin
  29. for j:=0 to 127 do
  30. begin
  31.  
  32. glTexCoord2f(0,0);
  33. glVertex3f(i-0.5,map[i,j+1],(j-0.5)*-1);
  34.  
  35. glTexCoord2f(0,1);
  36. glVertex3f(i+0.5,map[i,j],(j-0.5)*-1);
  37.  
  38. glTexCoord2f(1,1);
  39. glVertex3f(i+0.5,map[i+1,j],(j+0.5)*-1);
  40.  
  41. glTexCoord2f(1,0);
  42. glVertex3f(i-0.5,map[i+1,j+1],(j+0.5)*-1);
  43.  
  44. end;
  45. end;
  46. glEnd;
  47.  

Jetzt gibt es nur noch das kleine Problem dass das einfach eine große Fläche ist :roll:
Ich möchte aber gerne eine mit Hügeln usw. haben. Ihr habt ja vorhin schon mal geschrieben dass das durch das array map erledigt wird, wird es aber nicht.
Kann mir da jemand sagen wie ich die noch mit hinein bekomme?
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: Do Apr 17, 2008 13:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Du musst das Map-Array natürlich noch mit den Höhenwerten füttern. Dafür kannst du entweder ein Perlin Noise implementieren (siehe Forum Suche, da gibts nen bissl was zu) oder manuell was aus ner Bitmap laden.

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: Do Apr 17, 2008 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
das du vorhin nichts gesehen hast als du meinen Beispiel code ausprobiert hast lag daran, dass du in dem array map[] ja noch keine Werte drin hast, außer ganz viele nullen.
dadurch dass die Formel für die farbe des quads aus map[i,j]/4 berechnet wird steht da im prinzip die formel 0/4, was logischerweiße 0 ist und somit schwarz für die farbe des quads ergibt. Wenn du andere Werte in das Array speicherst wird sich dann natürlich auch die höhe deines Geländes ändern und wenn du die color3f auch drin lässt, dann werden tiefere stellen dunkler gezeichnet, als höhere.

Ich hab das bei mir mal so gemacht, dass ich ein TBitmap mit einem graustufenbild gefüllt habe und dass an das array übergeben habe. So kann man dann mit paint oder photoshop landkarten malen und je heller eine Stelle ist, umso höher liegt der Punkt dann auch in der Karte.

Wie man das genau macht hab ich gerade nicht im Kopf und auch leider keine Zeit das zu probieren. Aber mit einwenig googlen, oder der forum suche wirst schon ne Möglichkeit finden das map-array mit sinnvollen werten zu füllen.

Nebenbei lohnt es sich die quads durch zwei triangles auszutauschen. Wenn du nähmlich bei einem viereck punkte hast, die nicht alle in einer Ebene liegen kanns vorkommen, dass grafikfehler auftauchen. Wenn du stattdessen zwei gl_triangles nimmst und darauß ein viereck bastelst, dann kann dir das nicht passieren. Sieht zwar etwas aufwendiger aus vom code her, aber es vermeidet igittigitt auf dem monitor.

grüße!

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 06:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
OK ich hab mir dieses Perlin Noise mal durchgeschaut aber ehrlich geasgt hab ich das nch so richtig verstanden :cry:
Hätte jemand da vielleicht ein fertiges Beispiel oder eine andere Möglichkeit für mich?

_________________
"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: Fr Apr 18, 2008 07:30 
Offline
DGL Member
Benutzeravatar

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

in meinem ersten Post hatte ich ja die einfachste Möglichkeit beschrieben:

Code:
  1.  
  2. randomize;
  3.  
  4. for x:=0 to mWidth do
  5.    for y:=0 to mHeight do
  6.       Map[x,y]:=0.01*Random(50);
  7.  


Vielleicht meinst du aber auch, wie man die Höhen von einer Bitmap laden kann:

Code:
  1.  
  2.       Bmp := TBitMap.Create;
  3.       Bmp.LoadFromFile('HEIGHTMAP.bmp');
  4.  
  5.       for X := 0 to MapResolution do
  6.         for Z := 0 to MapResolution do
  7.           MapDaten[X,Z] := Trunc(Bmp.Canvas.Pixels
  8.                              [Trunc(X/MapResolution*Bmp.Width),
  9.                              Trunc(Z/MapResolution*Bmp.Height)]
  10.                              / clWhite * 255)
  11.  


Der Code ist aus dem Tutorial "Terrain 1".

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 13:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Ja ok also die Erste Möglichkeit is zwar schön einfach aber falsch. Dabei werden bloß die Ecken der Vierecke irgentwie nach oben gebogen. Dadurch entstehen aber noch keine Hügel.
Und dieses Zweite was soll das machen ? Das versteh ich nich ganz :(


Falls mir einer ein Beispiel für dieses Perlin Noise gebe nkönnte wär das super :)
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: Fr Apr 18, 2008 15:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Die frage ist, was verstehst du unter "Hügel"?

Mehr als eine Landschaft bestehend aus Quads und Dreiecken wirst du nicht bekommen, wenn du dich nicht Beziers / NURBS auseinandersetzt.

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

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Auch Beziers / NURBS bestehen nur aus Quads bzw Dreiecken. Nur eben, dass die Punkte per Software berechnet werden. ;)

Perlin_Noise ist da technisch gesehen auch nicht großartig anders. Und die zweite Möglichkeit macht nichts anderes als aus einem Bitmap den Farbwert eines Pixels auszulesen und diesen als Höhe zu verwenden. Du solltest auf so etwas eher genau dann zurückgreifen, wenn die Landschaft speziellen Anforderungen gerecht werden sollte. Bei Perlin Noise sind die entstehenden Punkte zwar von einem Zufallswert abhängig aber nicht unbedingt vorhersehbar. Das sieht man in dem Wiki Artikel auch ganz gut.

PS: Das mit den Bitmaps kannst du auch als sehr großes Schachbrett sehen bei denen die Höhe der Punkt nicht 0 ist sondern aus dem Bitmap stammt.

PPS: Alternativ zu einem Bitmap ist evtl auch ein echtes Model nicht zu verachten, denn die 3D Programme sind unter anderem auch in der Lage die Anzahl der verwendeten Dreiecke zu optimieren und nicht benutzte (gerade) Flächen wegzulassen. Und falls sie das nicht automatisch können kann man das vermutlich auch per Hand machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 16:34 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Auch wenn das nu etwas fies klingt, aber ich denke, wenn man jemanden vor sich hat, der die TBitmap funktion nicht versteht, dann ist es wohl eher wenig angebracht mit Nurbs oder anderen Bezir technicken anzurücken. Genauso werden wohl 3d-Modelle laden dann auch nicht so schnell drin sein, wenn es schon am laden einer Bitmap scheitert.

Also wenn du eine wirklich runde Hügellandschaft haben willst, dann kommst du um Bezir/Nurbs/Splines blabla nicht herum. Das alleine reicht aber immer noch nicht für eine wirklich runde Optik. mit einem perpixellighting sollte man dann auch noch ran gehen, sprich einen der simpleren shader schreiben. Die geometrie alleine wird nähmlich sonst sehr platt aussehen und dir wenig freude bereiten. Ein kleines Sunlight kann da schon Wunder wirken.
Wie man das macht findest du alles hier im wiki und/oder Forum.

Da ich mal dreist vermute, das du noch ziemlich frisch in diesem Gebiet bist kann ich dir empfehlen das ganze ruhig anzugehen und ersteinmal mit den bisherigen ergebnissen herumzuspielen und auszuprobieren und dich nach und nach in weitere Technicken einzuarbeiten. Ist ja noch kein Meister vom Himmel gefallen (nichteinmal ich^^). Auf der anderen Seite würd ich aber schonmal gern nen Screenshot sehen, was du so bisher geschaffen hast.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 16:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das mit den Bezier / NURBS war auch kein ernstgemeinter Vorschlag sondern eher zur "Abschreckung" gedacht

Lossy eX hat geschrieben:
Auch Beziers / NURBS bestehen nur aus Quads bzw Dreiecken. Nur eben, dass die Punkte per Software berechnet werden. ;)

Ok, jetzt bricht für mich eine Welt zusammen :(

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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Allgemein


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 15 Queries | GZIP : On ]