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

Aktuelle Zeit: Fr Jul 18, 2025 08:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Anfänger Problem
BeitragVerfasst: Fr Jul 08, 2005 13:43 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
Hi, so bin neu in Delphi und hab schon das erste Problem

er stürzt immer ab(fenster schliesst sich) sobald ich diese funktion aufrufe

Code:
  1. function TEngine.init3D():Boolean;
  2.   begin
  3.       // shading mode
  4.       glShadeModel(GL_FLAT);
  5.       // background color
  6.       glClearColor( 0.0, 0.5, 0.3, 0.0);
  7.       glClearDepth( 1.0 );
  8.  
  9.       // depth testing
  10.       glEnable(GL_DEPTH_TEST);
  11.       glDepthFunc(GL_LEQUAL);
  12.      
  13.       // perspective calculator
  14.       glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  15.  
  16.       glViewport(0, 0, pSurface.w, pSurface.h);
  17.  
  18.       glMatrixMode(GL_PROJECTION);
  19.       glLoadIdentity;
  20.  
  21.       // best perspective calculation
  22.       gluPerspective(45, pSurface.w / pSurface.h, 0.1, 1000);
  23.  
  24.       glMatrixMode(GL_MODELVIEW);
  25.       glLoadIdentity;
  26.  
  27.  
  28.  
  29.   end;


den einzigsten fehler wo ich mir vorstellen könnte wäre dass pSurface nicht mit daten gefüllt wurde beim initialisieren
pSurface:= SDL_SetVideoMode...

wäre super wenn jemand helfen könnte



edit:

hier der ganze code, vielleicht hilfts weiter

Code:
  1. unit DVEngine;
  2.  
  3. interface
  4.  
  5. // use sdl(jedi-sdl) and the dglOpenGl header from DelphiGl.com
  6. uses
  7.   SysUtils, SDL, dglOpenGL;
  8.  
  9.  
  10.   // the engine class
  11.   type
  12.     TEngine = class
  13.     private
  14.       pSurface : PSDL_Surface;
  15.     public
  16.     // create a window
  17.     function setupWindow( width : integer; height : integer; bpp : integer;  title : PAnsiChar) : Boolean;
  18.     function init3D():Boolean;
  19.   end;
  20.  
  21. implementation
  22.  
  23. // function to create a window
  24.   function TEngine.setupWindow( width : integer; height : integer; bpp : integer; title : PAnsiChar) : Boolean;
  25.   begin                  
  26.           if( SDL_Init( SDL_INIT_VIDEO) <> -1) then
  27.             pSurface := SDL_SetVideoMode(width,height,0, SDL_OPENGL or SDL_DOUBLEBUF or SDL_HWPALETTE);
  28.             SDL_WM_SetCaption(title,nil);
  29.  
  30.             if(pSurface = nil) then
  31.             begin
  32.               SDL_Quit();
  33.             end;
  34.  
  35.             // set bits per pixel(bpp)
  36.             SDL_GL_SetAttribute(SDL_GL_RED_SIZE, bpp div 3);
  37.             SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,bpp div 3);
  38.             SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,bpp div 3);
  39.             SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, bpp);
  40.             // activate doublebuffering
  41.             SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  42.  
  43.           result := true;
  44.   end;
  45.   // setup opengl for 3d mode
  46.   function TEngine.init3D():Boolean;
  47.   begin
  48.       // shading mode
  49.       glShadeModel(GL_FLAT);
  50.       // background color
  51.       glClearColor( 0.0, 0.5, 0.3, 0.0);
  52.       glClearDepth( 1.0 );
  53.  
  54.       // depth testing
  55.       glEnable(GL_DEPTH_TEST);
  56.       glDepthFunc(GL_LEQUAL);
  57.      
  58.       // perspective calculator
  59.       glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  60.  
  61.       glViewport(0, 0, pSurface.w, pSurface.h);
  62.  
  63.       glMatrixMode(GL_PROJECTION);
  64.       glLoadIdentity;
  65.  
  66.       // best perspective calculation
  67.       gluPerspective(45, pSurface.w / pSurface.h, 0.1, 1000);
  68.  
  69.       glMatrixMode(GL_MODELVIEW);
  70.       glLoadIdentity;
  71.  
  72.        result := true;
  73.   end;
  74.  
  75. end.
  76.  

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 08, 2005 18:32 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Auch wenn dies nicht deiner Beschreibung entspricht. Du verwendest die DGLHeader, wird bei Dir im Programm InitOpenGL; aufgerufen, so dass die Funktionen von OpenGL überhaupt zur Verfügung stehen? Sollte wenn nicht nämlich eigentlich eine Exception geben, sobald die OpenGL-Funktionen ins Spiel kommen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 08, 2005 18:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Wenn man OpenGL über CreateRenderingContext initialisiert braucht man kein InitOpenGL mehr. Das wurde ja extra geändert, weil es viele immer vergessen haben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 08, 2005 20:24 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Hat er aber nicht.
Er müsste im int3d() [C-Programmierer? :) ] noch InitOpenGL und zumindest bei der alten Version noch ReadExtension ausführen, damit OpenGL richtig initialisiert ist.
Zumindest das ReadExtension hatte bei mir zu Abstürzen ohne Exception geführt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 08, 2005 20:52 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Bei dieser Version:
Code:
  1. {       OpenGL1.5 - Headertranslation (includes GL1.1-1.5)                     }
  2. {       Version 1.5                                                            }
  3. {       Date : 21.10.2004                                                      }
  4. {                                                                              }
  5. {       Works with :                                                           }
  6. {        - Delphi 3 and up                                                     }
  7. {        - FreePascal (1.9.3 and up)                                           }
braucht man ungefähr so etwas:
Code:
  1.  InitOpenGL();
  2.  myDc := GetDC(MyHWND);
  3.  myRc := CreateRenderingContext(myDc,[opDoubleBuffered],BitsPerPixel,8,8,0,0,0);
  4.  ActivateRenderingContext(myDc,myRc);
damit OpenGL auch läuft. Erst danach darf man beliebige gl-glu Funktion aufrufen.

Nachtrag:
@HaschHase: Für pascal Code bitte pascal Tags benutzen. Sieht viel schöner aus. ;)

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 09, 2005 09:33 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
Zitat:
[C-Programmierer? Smile ]

100 punkte



ich brauch doch kein rendercontex, für sowas hab ich sdl :lol:


Code:
  1. pEngine.setupWindow(800,600,32,'SDL-OpenGL');
  2. InitOpenGL;
  3. pEngine.init3D;



und schon funktionierts wunderbar, muss nur noch die buffers leeren damit ich meine hintergrundfarbe bekomm


danke an alle

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 09, 2005 11:53 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Eben. Der Rendercontex hilft einen leider nicht viel weiter. Ggf. erlebst Du auch noch bei den Extension eine böse Überraschung. Dann packst nach dem Init noch ein ReadExtensions hinter her und alles sollte problemfrei laufen.

_________________
"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  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.008s | 14 Queries | GZIP : On ]