AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [GLScene] Ein Dorf erstellen...
Thema durchsuchen
Ansicht
Themen-Optionen

[GLScene] Ein Dorf erstellen...

Offene Frage von "Neutron"
Ein Thema von Neutron · begonnen am 8. Dez 2006 · letzter Beitrag vom 21. Dez 2006
 
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#7

Re: [GLScene] Ein Dorf erstellen...

  Alt 17. Dez 2006, 13:24
Hi.

Also, zu dem Terrain.
Hier der Code für ne Wiese mit vordefinierten Wegen.


Zuerst legst du ein Bitmap-File mit der Größe deines Terrains an. Also wenn das Terrain 64*64 groß sein soll, dann wird das Bitmap 64*64 Pixel groß.
Nehmen wir an du willst also ein Terrain machen, welches einfach eine Wiese mit einem kleinen Platz und nem Teich darin darstellen soll. Bei mir würde das dann so aussehen (64*64)
http://flips5.fl.funpic.de/map.png

Zur Farberklärung:
  • Grün->Wiese
  • Dunkles Grau->Kiesel
  • Helles Grau->Übergang Wiese-Kiesel oder Kiesel-Wasser (mit Blending beispielsweise)
  • Blau->Wasser

So, jetzt brauchst du noch ne Routine zum auslesen (Optimierungswürdig ):
Delphi-Quellcode:

const SECTORS_COUNT = 4; //Wasser, Wiese, Kiesel, Grenzfäche
      SIZE = 4096; //64*64
      LENGTH = 64;
type Pixel = record
  koordinate : TPoint;
  farbe : TColor;
end;

type Sector = record
  farbe : TColor;
  filename : string;
end;

//Global
var Pixels : array [0..SIZE] of Pixel;
    Sectors : array [0..SECTORS_COUNT-1] of Sector;
    bit : TBitmap;


[...]

//=======ONCREATE========//

Sectors[0].farbe = clGreen;
Sectors[0].filename = 'texturen/wiese.tga';
[...]


bit := TBitmap.Create;
try
  bit.LoadFromFile(ExtractFilePath(ParamStr(0))+'level1.bmp');
  i:=0;
  for x := 0 to bit.Width-1 do
    for y := 0 to bit.Height-1 do
      begin
        Pixels[i].color := bit.Canvas.Pixels[x,y];
        Pixels[i].koordinate.X := x;
        Pixels[i].koordinate.Y := y;
        inc(i);
      end;
  finally
    bit.Free;
  end;
[...]
Wie gesagt, der Code is optimierungswürdig


So, als nächstes brauchst du einen Code der das ganze in OpenGL darstellt.
Delphi-Quellcode:

procedure RenderPixel(pPixel:TPixel;Nummer:integer);
begin
case pPixel.Color of
  clGreen : WiesenTextur.Bind; //Entsprechende Texturen Binden
  clGray : Kiesel.Bind; //Entsprechende Texturen Binden
  clMedGray : //Hier musste dir halt überlegen wie du das mit dem Blending machst :-)
  clBlue : Wasser.Bind; //Entsprechende Texturen Binden
end;
with pPixel.koordinate do
begin
  glBegin(GL_QUADS);
    glTexCoord2f(0,0);
      glVertex3f(x,1,y -LENGTH);
    glTexCoord2f(0,1);
      glVertex3f(x,1,(y-LENGTH)+1);
    glTexCoord2f(1,1);
      glVertex3f(x+1,1,(y-LENGTH)+1);
    glTexCoord2f(1,0);
      glVertex3f(x+1,1,y-LENGTH);
  glEnd();
end;
end;

//Aufruf

procedure Render;
var i:integer;
begin
//Der sonstige OGL Kram
//...


for i := 0 to SIZE-1 do
  RenderPixel(Pixels[i],i);


//Der sonstige OGLKram
//...
end;
So ich nehme an die Hälfte is falsch un die andere Hälfte hab ich vergessen^^
Philipp F.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz