Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [GLScene] Ein Dorf erstellen... (https://www.delphipraxis.net/82202-%5Bglscene%5D-ein-dorf-erstellen.html)

Neutron 8. Dez 2006 14:29


[GLScene] Ein Dorf erstellen...
 
Hallo! :-D
Ich würde gern mit GLScene ein kleines Dorf "bauen" :mrgreen:

Ich hab auch schon angefangen! Und zwar steht bis jetzt:
Eine Landschaft mit Grasboden, ein Himmel (Skydom), eine Sonne in form von GLLensFlare, ein Baum (GLTree), und 3 Wände (3 dünne, hohe Quader)
die irgendwann mal ein Haus werden sollen... :)

Man kann sich frei bewegen und sieht alles aus der First Person sicht...

Aber es gibt leider noch ein paar schwerwiegende Probleme die mich davon
abhalten mein Traum zu verwirklichen!!

Meine Probleme sind:

1.Wie erstelle ich verschiedenne Texturen (Kiesel, Gras, Weg) auf dem Boden (TerrainRenderer)

2.Wolken wären ganz gut... allerdings hab ich keine Ahnung wie ich in Skydome Wolken darstellen kann!! :(

3.Durch meine 3 Wände, die ja mal ein Haus werden sollen, kann man durchlaufen... und ich weis nicht
wie ich das verhindern kann...

Das wär es eigentlich! Kann mir irgendjemand helfen?

Danke im Voraus!! :-D

Flips 14. Dez 2006 21:03

Re: [GLScene] Ein Dorf erstellen...
 
Hi.

Hm, wenn dein Dorf fertig ist musst du es mir mal schicken, dann schau ich ma ob ich einziehe ;-)
Ne, ernst jetzt.

Zitat:

Wie erstelle ich verschiedenne Texturen (Kiesel, Gras, Weg) auf dem Boden (TerrainRenderer)
:arrow: Ich nehme an du meinst das so, dass du entweder beispielsweise ne Standartwiese hast auf der zur Abwechslung entweder vordefieniert oder zufällig erscheinende andere Stellen wie Sand oder Gras kommen. Oder willst du sowas wie ne Art Leveldatei, wo drinsteht wie die Wiese gerendert werden soll (also beispielsweise gras mit einem weg darin). Für alle Möglichkeiten kann ich dir helfen^^


Zitat:

2.Wolken wären ganz gut... allerdings hab ich keine Ahnung wie ich in Skydome Wolken darstellen kann!!
:arrow: Sry, mit Skydome kenn ich mich nicht aus


Zitat:

3.Durch meine 3 Wände, die ja mal ein Haus werden sollen, kann man durchlaufen... und ich weis nicht
wie ich das verhindern kann...
:arrow: Das ganze nennt sich Kollisionskontrolle,
hier mal ein paar links, hoffentlich hilfreich:
NEHE-GAMEDEV
Sulaco

MfG
Flips

Neutron 17. Dez 2006 09:13

Re: [GLScene] Ein Dorf erstellen...
 
Zitat:

Ich nehme an du meinst das so, dass du entweder beispielsweise ne Standartwiese hast auf der zur Abwechslung entweder vordefieniert oder zufällig erscheinende andere Stellen wie Sand oder Gras kommen.
Genau das meine ich! :-D

Und zu den Wänden... das Problem hab ich schon beseitigt! :)

PS: Wenn du mir hilfst, kannst du ruhig ins Dorf ziehen! Da hab ich nichts dagegen! :mrgreen:

Neutron 17. Dez 2006 11:05

Re: [GLScene] Ein Dorf erstellen...
 
Ähhh...

Ich hab noch ein Problem...
Und zwar hab ich jetzt ein Haus gemacht aus ganz vielen Wänden (GLQubes) und ganz
vielen Böden- und Deckenteilen... Gibt es eine Möglichkeit alles zu einem Teil zu verbinden? :roll:

Warum? Ganz einfach alles ruckt jetzt schon... (Das ist nur ne leere Landschaft mit Himmel nem Baum und nem Haus!! :|
Und das ruckt richtig heftig! "Mein PC is eigentlich ein guter :) ")

Oder hat jemand ne bessere Idee? :?:

An Flips:

Das Problem mit dem Terrain hab ich immer noch... :( Also wenn du das kannst... Kannst du mir das dann erklären?

inherited 17. Dez 2006 11:27

Re: [GLScene] Ein Dorf erstellen...
 
Erstell dir Dein Haus doch in einem 3D-Editor und lade es.

turboPASCAL 17. Dez 2006 13:16

Re: [GLScene] Ein Dorf erstellen...
 
Wie inherited schon sagte, erstelle die Häuser mit einem 3D-Editor und speichere es im .3DS-Format.
Dann kannst du diese Objecte einfach in die Scene mit einbauen. Das ist einfacher als Tausende von Wänden mit eigens erzeugten Quadraten zu basteln.
Was wird denn das erst wenn du ein Tannebäumchen basteln möchtest ? ;)

Guck mal dort: Grafiken von Spielen

...insbesondere die vorletzte Zeile... :mrgreen:

Flips 17. Dez 2006 13:24

Re: [GLScene] Ein Dorf erstellen...
 
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 :-D


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^^

Neutron 17. Dez 2006 13:47

Re: [GLScene] Ein Dorf erstellen...
 
Ahhhh................. :?:
Und das geht mit dem TerrainRenderer in GLScene???
Oder meintest du OpenGL?... Also jetzt benutze ich gerade wie oben
schon gesagt den TerrainRenderer und dachte eigentlich da gibt es irgendeine
einfache Einstellung...

Danke aber trotzdem...

Flips 17. Dez 2006 13:56

Re: [GLScene] Ein Dorf erstellen...
 
Gut dann hab ich das überlesen :-D :wall:

Naja vielleicht ist der Code trotzdem für jemanden gut :)

Hirnsausen 17. Dez 2006 14:40

Re: [GLScene] Ein Dorf erstellen...
 
Ja, für mich ist der Code gut! Auch ich will mal bald mit solchen 3D-Sachen anfangen, aber noch nie zuvor gemacht!

Ich erstelle Dörfer (und anderes) mit POV-Ray, vieleicht gibt es ja auch da Konvertierungsmöglichkeiten zu 3DS.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz