Entwickler-Ecke

Multimedia / Grafik - Zimmer darstellen


Delete - Sa 24.06.06 19:40
Titel: Zimmer darstellen
Hallo,
Ich würde gerne einen Raum in 3D darstellen - undzwar ohne Bilder. Die Rück- und Vorderwand ist natürlich ganz einfach, zb mit einem Panel darstellbar. Aber wie kriege ich die abgeschräkten Seitenwände hin?


Danniolo - Sa 24.06.06 19:51

guck dir vlt. ma [url=http://www.delphigl.com]OpenGL[/url] oder DirectX [http://turbo.gamedev.net/delphix.asp] an


harryp - Sa 24.06.06 20:20

ansonsten vielleicht etwas besser beschreiben was genau du jetzt grad so für hilfe erwartest/möchtest - welche komponenten sollst du benutzen oder wie soll das zimmer eingeräumt werden oder wie oder was?

btw: würde auch auf opengl verweisen ;)


Delete - So 25.06.06 13:03

Ja, da hast du natürlich Recht! Ich hätte besser beschreiben sollen. Mein Problem war aber, dass ich wissen wollte, welche Komponenten ich benutzen soll. Hatte keinen Plan, wie ich da ran gehen soll. Deshalb bin ich dankbar, dass ich trotz mieser Beschreibung so ne hilfreihe Antwort bekommen habe! Danke :) Werde mich dann mal in OpenGL einarbeiten - sieht echt gut aus.
Naja, jetzt noch ne kurze Frage dazu. Ist mir jetzt echtn bissle peinlich, das zu fragen, aber... Also ich hab jetzt OpenGL mal installiert. Nur hab ich ehrlich gesagt keine Ahnung, wie ich das jetzt verwenden soll. Hab schon Probiert, das mal in Delphi als Komponente zu installieren, aber wirklich geklappt hat das nicht. Gibts da vielleicht ein Tut dazu (hab kein gefunden)?


Marco D. - So 25.06.06 13:05

http://www.delphigl.com


Danniolo - So 25.06.06 18:07

Wie user profile iconMarco D. und ich schon gesagt haben, guck dich mal bei http://www.delphigl.com mal ein bisschen um, da gibts ne Menge Tutorials, auch welche für Einsteiger ;)

so.. nochma für Faule: DGL Tutorials [http://wiki.delphigl.com/index.php/Tutorial]


Delete - Mo 26.06.06 15:19

Ja, hatte sie schon gefunden :) Grieg nur das mit dem Header nicht hin :( Entweder ich benutze die Datei, die schon zur Verfügung steht, dann hab ich aber kein TForm dabei, oder ich kopier das ganze inne neue Datei, dann kennt aber Delphi die ganzen Audrücke nicht :cry:


Phobeus - Mo 26.06.06 19:25

Wenn Du es dann noch bei uns auf die Files schaffst wirst Du haufenweise Templates zu den möglichen und unmöglichen Situtationen finden, die als Grundlage durchaus ausreichen sollten.


BenBE - Mo 26.06.06 22:09

@Phobeus: Haste mal einen Link zu ner unmöglichen Situation, die tät mich mal besonders interessieren ... ;-)


Delete - Fr 21.07.06 23:08

Hey, ich bin hier grad echt am Verzweifeln!! :'( Den ganzen Tag hab ich jetzt versucht das mit dem header zu schaffen - aber nein, es will einfach nicht. Ich schreibe hier jetzt eine genaue Beschreibung hin, wie ich das versucht habe und hoffe, dass mit jetzt eeendlich jm sagen kann, was ich denn die ganze Zeit falsch mache!
Also ich bin auf http://delphigl.com gegangen, habe bei Files - Bibliotheken den DGL OpenGL Header (dglOpenGL.pas) heruntergeladen. Dann bin ich in das erste Turtorial auf http://wiki.delphigl.com/ und habe wie beschrieben den header in das Verzeichnis /lib des Delphi Hauptverzeichnisses gelegt. Und dann hab ich ausprobiert das Template nachzubauen. Mein Quelltext sieht jetzt folgendermaßen aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure IdleHandler(Sender: TObject; var Done: Boolean);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private    { Private-Deklarationen }
    StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
    Frames, DrawTime                  : Cardinal; //& Timebased Movement
    procedure SetupGL;
    procedure Init;
    procedure Render;
    procedure ErrorHandler;
  public    { Public-Deklarationen }
    DC                                : HDC;  //Handle auf Zeichenfläche
    RC                                : HGLRC;//Rendering Context
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DC:= GetDC(Handle);
  if not InitOpenGL then Application.Terminate;
  RC:= CreateRenderingContext( DC,
                               [opDoubleBuffered],
                               32,
                               24,
                               0,0,0,
                               0);
  ActivateRenderingContext(DC, RC);
  SetupGL;
  Init;
end;

procedure TForm1.SetupGL;
begin
  glClearColor(0.30.40.70.0); //Hintergrundfarbe
  glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
end;

procedure TForm1.FormResize(Sender: TObject);
var tmpBool : Boolean;
begin
  glViewport(00, ClientWidth, ClientHeight);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);    

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  IdleHandler(Sender, tmpBool);
  NearClipping = 1;
  FarClipping  = 1000;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeactivateRenderingContext;
  DestroyRenderingContext(RC);
  ReleaseDC(Handle, DC);
end;

procedure TForm1.Render;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
 
  glTranslatef(00, -5);
 
  glBegin(GL_QUADS);
    glColor3f(100); glVertex3f(000);
    glColor3f(010); glVertex3f(100);
    glColor3f(001); glVertex3f(110);
    glColor3f(110); glVertex3f(010);
  glEnd;
 
  SwapBuffers(DC);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   inc(FrameCount);
   Render;
   If FrameCount = 20 then
      begin
           ErrorHandler;
           FrameCount := 0;
      end;
end;

procedure TForm1.ErrorHandler;
begin
  Form1.Caption := gluErrorString(glGetError);
end;
end.

Im Form ist nur ein Timer. Und jetzt kommen Fehlermeldungen wie [Fehler] Unit1.pas(39): Undefinierter Bezeichner: 'InitOpenGL'!!
Wie kann das sein :?


Delete - Fr 21.07.06 23:26

Hallo,

Ich bin jetzt grad noch durch andre Foren gestöbert und habe dort etwas gefunden was mir weitergeholfen hat. Ich muss zugeben wirklich verstanden habe ich mein Problem nicht. Ich bin Anfänger und habe nur Grundlagen drauf. Leider war das Buch, mitdem ich Delphi lernen wollte echt mies. Dann hab ich erstmal ein knappes 3/4 Jahr PHP programmiert - mit mehr Erfolg. Naja, jetzt will ich richtig in Delphi einsteigen! Werd mir wohl nochmal ein neues Delphi-Buch anschaffen müssen.

Auf jedenfall DANKE für eure Mühe! Ihr habts zwar nicht geschafft das Richtige in meinen Kopf zu quetschen, aber wenigstens versucht :)


BenBE - Fr 21.07.06 23:49

In deinem obigen Source musst Du auch die Unit dglOpenGL.pas einbinden; sonst weiß er ja nicht, woher Du InitOpenGL nimmst ... Ferner solltest Du mal die Vollständigkeit deiner Implementation überprüfen.


Delete - Fr 21.07.06 23:59

Ja, war grad dabei mein Problem auch zu verstehen! *stolz* ;) Hätte in uses noch das dglOpenGL reinschreiben müssen.
Hier noch das Thread der mir geholfen hat (falls mal jm das gleiche Problem haben sollte):
http://www.delphigl.com/forum/viewtopic.php?t=5619