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

Aktuelle Zeit: So Sep 07, 2025 21:34

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit der Initialisierung
BeitragVerfasst: Mi Feb 26, 2003 23:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Feb 26, 2003 23:04
Beiträge: 7
Sorry, die frage ist vielleicht nicht so toll, aber ich bin wirklich am verzweifeln. Ich hab erst vor kurzem angefangen und auch so ein paar tutorials gelesen, aber meine Programm funktioniert einfach nicht. Kann mir vielleicht jamand sagen warum?

Also, hier ist das programm:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure InitOpenGL;
procedure SetupOpenGL;
procedure DrawObjects;
public
{ Public declarations }
end;

var
Form1: TForm1;
DC: HDC;
RC: HGLRC;

implementation

{$R *.dfm}

procedure TForm1.InitOpenGL;
var
PixelFormat : GLuint;
PFD : pixelformatdescriptor;
begin

DC := Canvas.Handle;
// SetPixelFormat
begin
with pfd do
begin
nSize:= SizeOf( PIXELFORMATDESCRIPTOR );
nVersion:= 1;
dwFlags:= PFD_DRAW_TO_WINDOW
or PFD_SUPPORT_OPENGL
or PFD_DOUBLEBUFFER;
iPixelType:= PFD_TYPE_RGBA;
cColorBits:= 24; //Farbtiefe
cRedBits:= 0;
cRedShift:= 0;
cGreenBits:= 0;
cBlueBits:= 0;
cBlueShift:= 0;
cAlphaBits:= 0;
cAlphaShift:= 0;
cAccumBits:= 0; //Accumulation Buffer
cAccumRedBits:= 0;
cAccumGreenBits:= 0;
cAccumBlueBits:= 0;
cAccumAlphaBits:= 0;
cDepthBits:= 16; //Z-Buffer Tiefe
cStencilBits:= 0; //Stencil Buffer
cAuxBuffers:= 0;
iLayerType:= PFD_MAIN_PLANE;
bReserved:= 0;
dwLayerMask:= 0;
dwVisibleMask:= 0;
dwDamageMask:= 0
end;
//Pixel Format setzten
PixelFormat := ChoosePixelFormat(DC, @pfd);
if (PixelFormat=0) then
showmessage('Es konnte kein passendes PixelFormat gefunden werden.');
if (not SetPixelFormat(DC,PixelFormat,@pfd)) then
showmessage('PixelFormat konnte nicht gesetzt werden.');
end;

//Redering Context initalisieren
RC := wglCreateContext(DC);
if (RC=0) then
begin
Showmessage('Rendering Context kann nicht erstellt werden.');
Halt(100)
end;

if (not wglMakeCurrent(DC, RC)) then
begin
showmessage('Rendering Context kann nicht aktiviert werden.');
Halt(100)
end;
end;

procedure TForm1.SetupOpenGL;
begin
glShadeModel(GL_SMOOTH); // Aktiviert weiches Shading
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glClearColor(0,0,0,1); // Bildschirm löschen (schwarz)
glClearDepth(1.0); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Aktiviert Depth Testing
glDepthFunc(GL_LEQUAL); // Bestimmt den Typ des Depth Testing
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
// Qualitativ bessere Koordinaten Interpolation
end;
procedure TForm1.FormResize(Sender: TObject);
begin
glViewport(0, 0, ClientWidth, ClientHeight);
//Projektionsmatrix resetten
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//Perspektivische Darstellung
gluPerspective(45.0,ClientWidth/ClientHeight,1.0,100.0);// Calculate The Aspect Ratio Of The Window
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
end;

procedure TForm1.DrawObjects;
begin
glLoadIdentity;
glTranslatef( 0,0,-3);
glBegin(GL_TRIANGLES);
glColor3f(1,0,0);
glVertex3f(-1.0,-1.0, 0.0);
glVertex3f( 0.0, 1.0, 0.0);
glVertex3f( 1.0,-1.0, 0.0);
glEnd();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
InitOpenGL;
SetupOpenGL;
DrawObjects;
if GLGetError <> GL_NO_ERROR then
showmessage('Fehler!');
SwapBuffers(DC);

end;

end.


Schon mal vielen dank im voraus! :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 26, 2003 23:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das Problem an deinem Programm ist die Tatsache, das du deine Objekte im OnCreate-Event zeichnest und auch dort den Puffer auf den Schirm bringst.

Da das OnCreate-Ereignis allerdings nur einmal beim Erstellen der Form aufgerufen wird, wirst du deine Szene nicht zu Gesicht bekommen.

Du musst deine Szene entweder in einem Timer oder im OnIdle-Event zeichnen.

P.S. : Im Forum gibts nen BBCode um Quellcode ansehnlich zu formatieren.Nutz diese Funktion bitte wenn du das nächste Mal Quellcode postest.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 27, 2003 20:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Feb 26, 2003 23:04
Beiträge: 7
Ja, vielen Dank! Es funktioniert jetzt. Es war aber auch noch etwas anders falsch:

Code:
  1.  DC:= Canvas.Handle


hätte eigentlich

Code:
  1.  DC:= GetDC(Handle);


heißen müssen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 27, 2003 20:50 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Die DC Sache sollte aber auf das gleiche hinauslaufen...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 28, 2003 15:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Feb 26, 2003 23:04
Beiträge: 7
Ja, eigentlich schon, mit der ertsen zeile funktionert es aber nicht. Ist aber auch egal, hauptsache es funktioiert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 10, 2003 15:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Zitat:
Ist aber auch egal, hauptsache es funktioiert.


Genau meine Meinung 8)

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 23, 2003 19:25 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Dafür haben wir Templates, die schon ziemlich schlank sind. Dein Fehler zeugt IMAO übrigens auf einer OpenGL12 initalisierung ohne Init ... mehr dazu im FAQ

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]