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

Aktuelle Zeit: Mi Mai 22, 2024 22:55

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Problem mit texturen (GLAux)
BeitragVerfasst: Mi Sep 25, 2002 16:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2002 00:54
Beiträge: 11
hallo!
ich hab jetzt mal angefangen das texturen tut zu lesen und verstehe bisher alles, nur ein problem habe ich noch:
Code:
  1.  
  2.  
  3. glGenTextures(1, tex);
  4.  
  5.  

wenn ich das programm nun starte kommt genau an dieser stelle:
Undeclared Identifier 'tex'
was is da los?
wenn ich tex als PGLuint declariere heisst es dann an dieser stelle:
Code:
  1.  
  2.  
  3. glBindTexture(GL_TEXTURE_2D, tex);
  4.  
  5.  

Incompatible Types 'Cardinal' and 'PGLuint'
was muss ich machen, damit tex "erkannt" wird?
mfg
Bountyhunter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 25, 2002 16:20 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Also:

1. Musst Du "tex" als Variable deklarieren, und
2. PGLuint ist ein Pointer (Zeiger) auf TGLuint. Versuch mal folgendes:

Code:
  1.  
  2.  
  3. var
  4.  
  5.   tex : TGLuint;
  6.  
  7. begin
  8.  
  9.   glGenTextures(1, @tex);
  10.  
  11.   glBindTexture(GL_TEXTURE_2D, tex);
  12.  
  13. end;
  14.  
  15.  


glGenTextures ermöglicht es auch, mehrere Texturen auf einmal anzulegen. Dann müsstest Du ein Array von TGLuint machen und den Zeiger auf das erste Objekt übergeben. Hier willst Du aber nur eine Textur, also reicht ein TGLuint. Allerdings benötigt glGenTextures eben den Zeiger, also die Adresse von tex. Deswegen ist das auch ein PGLuint Typ, der in der Funktion als 2. Parameter verlangt wird. In der OpenGL.pas oder OpenGL12.pas ist das ganze definiert als

PGLuint = ^TGLuint;

Somit ist, wie bereits erwähnt, PGLuint ein Zeiger auf TGLuint. Die glBindTexture benötigt aber die TGLuint, also den Wert der Variable, NICHT die Adresse (den Zeiger). Da Adressen aber als Cardinal übergeben werden, und Du tex als PGLUInt deklariert hast, klappt das ganze nicht.

Übrigens: wenn Du eine Variable als Zeiger definierst, hat sie noch keinen gültigen Wert. DU müsstest erstmal Speicher für die Variable erstellen. Ist in deisem Falle völlig unnötig. Ließ Dir einfach mal den Abschnit über Zeiger und Zeigertypen in der Delphi-Hilfe durch. Aber so müsste es eigentlich klappen.

Falls Du immer noch Probleme hast, schau die die Turorials über Texture-Mapping von DGL an. Dannach dürften alle Unklarheiten beseitigt sein!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 25, 2002 21:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
wenn du opengl 1.0 benutzt - der delphistandard - dann deklariere tex als GluInt und nicht als TGluInt. Letzteres wurde erst mit 1.2 eingeführt. (glaub ich)

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: hmmm....
BeitragVerfasst: Do Sep 26, 2002 17:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2002 00:54
Beiträge: 11
hallo!
danke für die antwort, jetzt gibts keine fehler mehr. jedoch wird nix angezeigt vonwegen textur. ich hab keine ahnung warum.
Zitat:
Wir müssen OpenGL nur noch mitteilen, welche Textur auf einem Objekt gerendert werden soll. Dies geschieht mit der folgenden Zeile:

glBindTexture(GL_TEXTURE_2D, tex);

wo muss ich das noch hinschreiben? das steht doch schon wo anders.
mfg
Bountyhunter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 26, 2002 18:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
also ich denke du wirst folgenden fehler machen:

dein code ist ungefähr so :

Code:
  1. glBegin(GL_QUADS);
  2.  
  3.   glVertex3f(0,0,0);
  4.  
  5. .....
  6.  
  7. glEnd;
  8.  
  9.  


Da liegt nämlich schon der fehler. Du must noch die Texturkoordinaten angeben. richtiger code wäre :

Code:
  1. glBegin(GL_QUADS);
  2.  
  3.    glTexCoord2f(0,0);   glVertex3f(0,0,0);
  4.  
  5.    glTexCoord2f(1,0);   glVertex3f(1,0,0);
  6.  
  7.    glTexCoord2f(1,1);   glVertex3f(1,1,0);
  8.  
  9.     glTexCoord2f(0,1);   glVertex3f(0,1,0);
  10.  
  11. glEnd;
  12.  
  13.  


ich denke damit wäre das problem dann auch gelöst.

bitte .

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 26, 2002 18:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2002 00:54
Beiträge: 11
ne, hab ich nicht vergessen. ich hab alles wie im tutorial gemacht auch das mit den texturkoordinaten.(tutorial 4)
aber es geht net.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 26, 2002 18:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
das einzige, woran es noch liegen kann wäre ja dann nur, das du vergessen hast texturmodus zu aktivieren.

schau bitte im source mal, ob du vor dem ersten zeichnen irgendwo glEnable(GL_TEXTURE_2D); stehen hast.
falls ne dann einfach neischreiben.

sonst gibt es nur noch die möglichkeit, dass die datei nicht geladen wird und eine leere textur angezeigt wird.

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: ha
BeitragVerfasst: Do Sep 26, 2002 18:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2002 00:54
Beiträge: 11
ja, du hast recht das hat gefehlt....
danke schön ich probiers mal
mfg
Bountyhunter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 26, 2002 18:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
naja das stimmt soweit ich das sehe alles also kanns ja nur am glenable(GL_TEXTURE_2D); liegen. füge das einfach genau vor das glBegin ein.

wenns dann ne läuft dann mmm???

RSWM

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 26, 2002 19:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2002 00:54
Beiträge: 11
also, glEnable(GL_T....) hat gefehlt danke für den tipp. jedoch funzt es immer noch nicht. ich poste nochmal den GANZEN code
Code:
  1.  
  2.  
  3. unit template_main;
  4.  
  5.  
  6.  
  7. {
  8.  
  9. ********************[ Delphi OpenGL Template für eine VCL-Szene ]***************
  10.  
  11.  
  12.  
  13. visit http://dgl.quellcodes.de/
  14.  
  15.  
  16.  
  17. Made by DelphiC (redsoftware@gmx.de) and Modified by
  18.  
  19. Bountyhunter (bountyhunter4ever@hotmail.com).
  20.  
  21.  
  22.  
  23. Happy Coding!!!
  24.  
  25. }
  26.  
  27.  
  28.  
  29. interface
  30.  
  31.  
  32.  
  33. uses
  34.  
  35.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  36.  
  37.   OpenGL12, Geometry, StdCtrls, ExtCtrls, template_Fullscreen, GlAux;
  38.  
  39.  
  40.  
  41. const
  42.  
  43.   //Entfernung der Clipping planes
  44.  
  45.   FarClipping   = 1000.0;
  46.  
  47.   NearClipping  = 1.0;
  48.  
  49.  
  50.  
  51. type
  52.  
  53.   TForm1 = class(TForm)
  54.  
  55.     procedure FormCreate(Sender: TObject);
  56.  
  57.     procedure FormShow(Sender: TObject);
  58.  
  59.     procedure FormDestroy(Sender: TObject);
  60.  
  61.     procedure FormResize(Sender: TObject);
  62.  
  63.     procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  64.  
  65.   private
  66.  
  67.     { Private-Deklarationen }
  68.  
  69.     OpenGLInitialized : Boolean; //Ist true, wenn OpenGL bereit zum zeichnen ist
  70.  
  71.     RC : HGLRC;         //OpenGL Rendering Context
  72.  
  73.   public
  74.  
  75.     { Public-Deklarationen }
  76.  
  77.   end;
  78.  
  79.  
  80.  
  81. var
  82.  
  83.   Form1: TForm1;
  84.  
  85.   texture1: PTAUX_RGBImageRec;
  86.  
  87.   tex: TGLUint;
  88.  
  89.  
  90.  
  91. implementation
  92.  
  93.  
  94.  
  95. {$R *.DFM}
  96.  
  97.  
  98.  
  99. procedure TForm1.FormCreate(Sender: TObject);
  100.  
  101. begin
  102.  
  103.   //OpenGL ist noch nicht bereit
  104.  
  105.   OpenGLInitialized := False;
  106.  
  107.   //Nur starten, wenn die Bibliotheken auch geladen sind
  108.  
  109.   if not LoadOpenGL then
  110.  
  111.     Halt(100);
  112.  
  113. end; (*FormCreate*)
  114.  
  115.  
  116.  
  117. procedure TForm1.FormShow(Sender: TObject);
  118.  
  119.   procedure SetPixelFormat;
  120.  
  121.   var
  122.  
  123.     PixelFormat      : TGLuint;
  124.  
  125.     PFD              : pixelformatdescriptor;
  126.  
  127.   begin
  128.  
  129.     with pfd do
  130.  
  131.       begin
  132.  
  133.         nSize:= SizeOf( PIXELFORMATDESCRIPTOR );
  134.  
  135.         nVersion:= 1;
  136.  
  137.         dwFlags:= PFD_DRAW_TO_WINDOW
  138.  
  139.           or PFD_SUPPORT_OPENGL
  140.  
  141.           or PFD_DOUBLEBUFFER;
  142.  
  143.         iPixelType:= PFD_TYPE_RGBA;
  144.  
  145.         cColorBits:= 16;             //Farbtiefe
  146.  
  147.         cRedBits:= 0;
  148.  
  149.         cRedShift:= 0;
  150.  
  151.         cGreenBits:= 0;
  152.  
  153.         cBlueBits:= 0;
  154.  
  155.         cBlueShift:= 0;
  156.  
  157.         cAlphaBits:= 0;
  158.  
  159.         cAlphaShift:= 0;
  160.  
  161.         cAccumBits:= 0;              //Accumulation Buffer
  162.  
  163.         cAccumRedBits:= 0;
  164.  
  165.         cAccumGreenBits:= 0;
  166.  
  167.         cAccumBlueBits:= 0;
  168.  
  169.         cAccumAlphaBits:= 0;
  170.  
  171.         cDepthBits:= 16;             //Z-Buffer Tiefe
  172.  
  173.         cStencilBits:= 0;            //Stencil Buffer
  174.  
  175.         cAuxBuffers:= 0;
  176.  
  177.         iLayerType:= PFD_MAIN_PLANE;
  178.  
  179.         bReserved:= 0;
  180.  
  181.         dwLayerMask:= 0;
  182.  
  183.         dwVisibleMask:= 0;
  184.  
  185.         dwDamageMask:= 0
  186.  
  187.       end;
  188.  
  189.     //Pixel Format setzten
  190.  
  191.     PixelFormat := ChoosePixelFormat(Canvas.Handle, @pfd);
  192.  
  193.     if (PixelFormat=0) then
  194.  
  195.       MessageDlg('Es konnte kein passendes PixelFormat gefunden werden.', mtError, [mbOk], 0);
  196.  
  197.     if (not Windows.SetPixelFormat(Canvas.Handle,PixelFormat,@pfd)) then
  198.  
  199.       MessageDlg('PixelFormat konnte nicht gesetzt werden.', mtError, [mbOk], 0);
  200.  
  201.   end; (*SetPixelFormat*)
  202.  
  203.  
  204.  
  205.   procedure StartGL;
  206.  
  207.   begin
  208.  
  209.     //Rendering Context initialisieren
  210.  
  211.     RC := wglCreateContext(Canvas.Handle);
  212.  
  213.     if (RC=0) then
  214.  
  215.     begin
  216.  
  217.       MessageDlg('Rendering Context kann nicht erstellt werden.', mtError, [mbOk], 0);
  218.  
  219.       Halt(100);
  220.  
  221.     end;
  222.  
  223.  
  224.  
  225.     if (not wglMakeCurrent(Canvas.Handle, RC)) then
  226.  
  227.     begin
  228.  
  229.       MessageDlg('Rendering Context kann nicht aktiviert werden.', mtError, [mbOk], 0);
  230.  
  231.       Halt(100);
  232.  
  233.     end
  234.  
  235.   end; (*StartGl*)
  236.  
  237.  
  238.  
  239.   procedure SetupGL;
  240.  
  241.   begin
  242.  
  243.     //OpenGL Voreinstellungen
  244.  
  245.     glClearColor(0.0, 0.0, 0.0, 0.0); //Hintergrundfarbe
  246.  
  247.     glEnable(GL_DEPTH_TEST); //Tiefenpuffer aktivieren
  248.  
  249.     glShadeModel(GL_SMOOTH);
  250.  
  251.     glEnable(GL_TEXTURE_2D);
  252.  
  253.   end; (*SetupGL*)
  254.  
  255.  
  256.  
  257. begin
  258.  
  259.   RC := 0;
  260.  
  261.  
  262.  
  263.   SetPixelFormat;
  264.  
  265.   StartGL;
  266.  
  267.  
  268.  
  269.   //GL Extensions neu auslesen
  270.  
  271.   ClearExtensions;
  272.  
  273.   ReadExtensions;
  274.  
  275.   SetupGL;
  276.  
  277.  
  278.  
  279.   //OnIdle setzen
  280.  
  281.   Application.OnIdle := ApplicationEventsIdle;
  282.  
  283.  
  284.  
  285.   //OpenGL ist nun bereit
  286.  
  287.   OpenGLInitialized := True
  288.  
  289. end; (*FormShow*)
  290.  
  291.  
  292.  
  293. procedure TForm1.FormDestroy(Sender: TObject);
  294.  
  295. begin
  296.  
  297.   OpenGLInitialized := False;
  298.  
  299.  &nbsp;if RC<>0 then
  300.  
  301.  &nbsp; &nbsp;begin
  302.  
  303.  &nbsp; &nbsp; &nbsp;if (not wglMakeCurrent(Canvas.Handle,0)) then
  304.  
  305.  &nbsp; &nbsp; &nbsp; &nbsp;MessageDlg('Rendering Context konnte nicht abgewählt werden.', mtError, [mbOk], 0);
  306.  
  307.  &nbsp; &nbsp; &nbsp;if (not wglDeleteContext(RC)) then
  308.  
  309.  &nbsp; &nbsp; &nbsp; &nbsp;MessageDlg('Rendering Context konnte nicht freigegeben werden.', mtError, [mbOk], 0);
  310.  
  311.  &nbsp; &nbsp;end;
  312.  
  313.  &nbsp;RC:=0
  314.  
  315. end; (*Form Destroy*)
  316.  
  317.  
  318.  
  319. procedure TForm1.FormResize(Sender: TObject);
  320.  
  321. begin
  322.  
  323.  &nbsp;glViewport(0, 0, ClientWidth, ClientHeight);
  324.  
  325.  &nbsp;//Projektionsmatrix resetten
  326.  
  327.  &nbsp;glMatrixMode(GL_PROJECTION);
  328.  
  329.  &nbsp;glLoadIdentity();
  330.  
  331.  &nbsp;//Perspektivische Darstellung
  332.  
  333.  &nbsp;gluPerspective(60.0,ClientWidth/ClientHeight,NearClipping,FarClipping);// Calculate The Aspect Ratio Of The Window
  334.  
  335.  &nbsp;glMatrixMode(GL_MODELVIEW);
  336.  
  337.  &nbsp;glLoadIdentity;
  338.  
  339. end; (*FormResize*)
  340.  
  341.  
  342.  
  343. procedure LoadTexture;
  344.  
  345. begin
  346.  
  347. texture1 := auxDIBImageLoadA('D:/bumpmapping/background2.bmp');
  348.  
  349. glGenTextures(1, @tex);
  350.  
  351. glBindTexture(GL_TEXTURE_2D, tex);
  352.  
  353. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  354.  
  355. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  356.  
  357. glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1^.sizeX, texture1^.sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  358.  
  359. end;
  360.  
  361.  
  362.  
  363. procedure TForm1.ApplicationEventsIdle(Sender: TObject;
  364.  
  365.  &nbsp;var Done: Boolean);
  366.  
  367. var
  368.  
  369.  &nbsp;Error : LongInt; //Fehler?
  370.  
  371. begin
  372.  
  373.  &nbsp;//Abbrechen, wenn OpenGL noch nicht initialisiert ist
  374.  
  375.  &nbsp;if not OpenGLInitialized then Exit;
  376.  
  377.  &nbsp;//Immer schön neu zeichnen
  378.  
  379.  &nbsp;Done := False;
  380.  
  381.  
  382.  
  383.  &nbsp;//Puffer killen
  384.  
  385.  &nbsp;glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  386.  
  387.  &nbsp;glLoadIdentity;
  388.  
  389.  
  390.  
  391.  &nbsp;//Mini Kamerabewegung
  392.  
  393.  &nbsp;glTranslatef(0.0, 0.0, -4);
  394.  
  395.  
  396.  
  397.  &nbsp;//Hier muss alles rein was gerendert wird
  398.  
  399. glBindTexture(GL_TEXTURE_2D, tex);
  400.  
  401. glBegin(GL_QUADS);
  402.  
  403.  &nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  404.  
  405.  &nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(0,1); glVertex3f(-1,1,0);
  406.  
  407.  &nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(1,1); glVertex3f(1,1,0);
  408.  
  409.  &nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(1,0); glVertex3f(1,-1,0);
  410.  
  411. glEnd;
  412.  
  413.  &nbsp;
  414.  
  415.  &nbsp;//Error Handler
  416.  
  417.  &nbsp;Error := glgetError;
  418.  
  419.  &nbsp;if Error <> GL_NO_ERROR then
  420.  
  421.  &nbsp;begin
  422.  
  423.  &nbsp; &nbsp;Caption := gluErrorString(Error);
  424.  
  425.  &nbsp; &nbsp;//Rendering kurz anhalten
  426.  
  427.  &nbsp; &nbsp;Done := True;
  428.  
  429.  &nbsp; &nbsp;FlashWindow(Handle, True);
  430.  
  431.  &nbsp;end;
  432.  
  433.  &nbsp;//Und anzeigen
  434.  
  435.  &nbsp;SwapBuffers(Canvas.Handle);
  436.  
  437. end; (*ApplicationEventsIdle*)
  438.  
  439.  
  440.  
  441. end.
  442.  
  443.  

ich benutze die vcl template von delphiC. das glEnable(....) hab ich an mehreren stellen getestet, also daran kanns nicht lIegen. und das bild existiert auch, ich habs 3 mal geprüft. jedoch sehe ich nur ein weisses 4-eck ohne textur. was is da los?
mfg
Bountyhunter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 27, 2002 07:37 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Ich weiß ja nicht, ob's darn liegt. Aber ich hab' schon diverse komische Probleme (bis hin zu Systemabstürtzen) in den Griff bekommen, indem ich die neuesten Treiber meiner Grafikkarte installiert hab'.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 27, 2002 07:50 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Ich weiß nbicht recht, ob es daran liegen kann, aber muss
"glBindTexture(GL_TEXTURE_2D, tex);" Niczht nochmal in deriner Rendering - Prozedur aufgerufen werden? Es wird aus deinem Code nicht ganz ersichtilch, ob es da steht, oder nicht........

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 27, 2002 08:00 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Nun, Du must glBindTexture dann aufrufen, wenn Du eine Textur als Aktiv setzen willst. Das heißt, nach glBindTexture ist diese Textur solange aktiv, bist Du eine andere anwählst oder glBindTexture(0) aufrufst.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 27, 2002 08:05 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Das ist mir an sich auch klar.... mir kam der Source nur etwas Unvollständig vor....
Ich dachte halt, dass man dieses am anfang der Render - Prozedur nochmals ausführen muss, damit die Textur gesetzt wird (in seinem Beispiel ruft er es ja nur einmal auf.... Undzwar da, wo er die texturen lädt).....
Ich ahbe auch mal ein einfaches Progie geschriben (VCL), welches auch eine Textur lädt.... es funzt an sich ganz gut:

Code:
  1.  
  2.  
  3. unit Unit1;
  4.  
  5.  
  6.  
  7. interface
  8.  
  9.  
  10.  
  11. uses
  12.  
  13.  &nbsp;Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,opengl,
  14.  
  15.  &nbsp;ExtCtrls, DXClass, glaux;
  16.  
  17.  
  18.  
  19. type
  20.  
  21.  &nbsp;TForm1 = class(TForm)
  22.  
  23.  &nbsp; &nbsp;Timer2: TTimer;
  24.  
  25.  &nbsp; &nbsp;DXTimer1: TDXTimer;
  26.  
  27.  &nbsp; &nbsp;procedure FormCreate(Sender: TObject);
  28.  
  29.  &nbsp; &nbsp;procedure FormDestroy(Sender: TObject);
  30.  
  31.  &nbsp; &nbsp;procedure FormKeyDown(Sender: TObject; var Key: Word;
  32.  
  33.  &nbsp; &nbsp; &nbsp;Shift: TShiftState);
  34.  
  35.  &nbsp; &nbsp;procedure Timer2Timer(Sender: TObject);
  36.  
  37.  &nbsp; &nbsp;procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
  38.  
  39.  &nbsp; &nbsp;procedure DXTimer2Timer(Sender: TObject; LagCount: Integer);
  40.  
  41.  &nbsp;private
  42.  
  43.  &nbsp; &nbsp;{ Private-Deklarationen }
  44.  
  45.  &nbsp; &nbsp;myDC : HDC;
  46.  
  47.  &nbsp; myRC : HGLRC;
  48.  
  49.  &nbsp; myPalette : HPALETTE;
  50.  
  51.  &nbsp; procedure SetupPixelFormat;
  52.  
  53.  &nbsp;public
  54.  
  55.  &nbsp; &nbsp;{ Public-Deklarationen }
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  &nbsp;end;
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69. var
  70.  
  71.  &nbsp;Form1: TForm1;
  72.  
  73.  &nbsp;rotx : integer;
  74.  
  75.  &nbsp;roty : integer;
  76.  
  77.  &nbsp;rotz : integer;
  78.  
  79.  &nbsp;count : integer;
  80.  
  81.  &nbsp;tex : gluInt;
  82.  
  83.  
  84.  
  85. implementation
  86.  
  87.  
  88.  
  89. {$R *.DFM}
  90.  
  91.  
  92.  
  93. PROCEDURE glGenTextures(n: GLsizei; VAR textures: GLuint); STDCALL; EXTERNAL opengl32;
  94.  
  95. PROCEDURE glBindTexture(target: GLenum; texture: GLuint); &nbsp;STDCALL; EXTERNAL opengl32;
  96.  
  97.  
  98.  
  99. procedure TForm1.SetupPixelFormat;
  100.  
  101. var &nbsp; &nbsp;hHeap: THandle;
  102.  
  103.  &nbsp;nColors, i: Integer;
  104.  
  105.  &nbsp;lpPalette : PLogPalette;
  106.  
  107.  &nbsp;byRedMask, byGreenMask, byBlueMask: Byte;
  108.  
  109.  &nbsp;nPixelFormat: Integer;
  110.  
  111.  &nbsp;pfd: TPixelFormatDescriptor;
  112.  
  113. begin
  114.  
  115.  &nbsp;FillChar(pfd, SizeOf(pfd), 0);
  116.  
  117.  &nbsp;with pfd do begin
  118.  
  119.  &nbsp; &nbsp;nSize &nbsp; &nbsp; := sizeof(pfd); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  120.  
  121.  &nbsp; &nbsp;nVersion &nbsp;:= 1; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  122.  
  123.  &nbsp; &nbsp;dwFlags &nbsp; := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
  124.  
  125.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PFD_DOUBLEBUFFER; &nbsp; &nbsp; &nbsp; &nbsp;
  126.  
  127.  &nbsp; &nbsp;iPixelType:= PFD_TYPE_RGBA; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  128.  
  129.  &nbsp; &nbsp;cColorBits:= 24; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  130.  
  131.  &nbsp; &nbsp;cDepthBits:= 32; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  132.  
  133.  &nbsp; &nbsp;iLayerType:= PFD_MAIN_PLANE; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
  134.  
  135.  &nbsp;end;
  136.  
  137.  &nbsp;nPixelFormat:= ChoosePixelFormat(myDC, @pfd);
  138.  
  139.  &nbsp;SetPixelFormat(myDC, nPixelFormat, @pfd);
  140.  
  141. // Farbpalettenoptimierung wenn erforderlich
  142.  
  143.  &nbsp;DescribePixelFormat(myDC, nPixelFormat,
  144.  
  145.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sizeof(TPixelFormatDescriptor),pfd);
  146.  
  147.  &nbsp;if ((pfd.dwFlags and PFD_NEED_PALETTE) <> 0) then begin
  148.  
  149.  &nbsp; &nbsp;nColors &nbsp;:= 1 shl pfd.cColorBits;
  150.  
  151.  &nbsp; &nbsp;hHeap &nbsp; &nbsp;:= GetProcessHeap;
  152.  
  153.  &nbsp; &nbsp;lpPalette:= HeapAlloc
  154.  
  155.  &nbsp; &nbsp; &nbsp; (hHeap,0,sizeof(TLogPalette)+(nColors*sizeof(TPaletteEntry)));
  156.  
  157.  &nbsp; &nbsp;lpPalette^.palVersion := $300;
  158.  
  159.  &nbsp; &nbsp;lpPalette^.palNumEntries := nColors;
  160.  
  161.  &nbsp; &nbsp;byRedMask &nbsp;:= (1 shl pfd.cRedBits) - 1;
  162.  
  163.  &nbsp; &nbsp;byGreenMask:= (1 shl pfd.cGreenBits) - 1;
  164.  
  165.  &nbsp; &nbsp;byBlueMask := (1 shl pfd.cBlueBits) - 1;
  166.  
  167.  &nbsp; &nbsp;for i := 0 to nColors - 1 do begin
  168.  
  169.  &nbsp; &nbsp; &nbsp;lpPalette^.palPalEntry[i].peRed &nbsp;:=
  170.  
  171.  &nbsp; &nbsp; &nbsp; &nbsp;(((i shr pfd.cRedShift) &nbsp;and byRedMask) &nbsp;*255)DIV byRedMask;
  172.  
  173.  &nbsp; &nbsp; &nbsp;lpPalette^.palPalEntry[i].peGreen:=
  174.  
  175.  &nbsp; &nbsp; &nbsp; &nbsp;(((i shr pfd.cGreenShift)and byGreenMask)*255)DIV byGreenMask;
  176.  
  177.  &nbsp; &nbsp; &nbsp;lpPalette^.palPalEntry[i].peBlue :=
  178.  
  179.  &nbsp; &nbsp; &nbsp; &nbsp;(((i shr pfd.cBlueShift) and byBlueMask) *255)DIV byBlueMask;
  180.  
  181.  &nbsp; &nbsp; &nbsp;lpPalette^.palPalEntry[i].peFlags:= 0;
  182.  
  183.  &nbsp; &nbsp;end;
  184.  
  185.  &nbsp; &nbsp;myPalette:= CreatePalette(lpPalette^);
  186.  
  187.  &nbsp; &nbsp;HeapFree(hHeap, 0, lpPalette);
  188.  
  189.  &nbsp; &nbsp;if (myPalette <> 0) then begin
  190.  
  191.  &nbsp; &nbsp; &nbsp;SelectPalette(myDC, myPalette, False);
  192.  
  193.  &nbsp; &nbsp; &nbsp;RealizePalette(myDC);
  194.  
  195.  &nbsp; &nbsp;end;
  196.  
  197.  &nbsp;end;
  198.  
  199.  
  200.  
  201.  &nbsp;glMatrixMode(GL_PROJECTION);
  202.  
  203. glLoadIdentity;
  204.  
  205. glPolygonMode(GL_FRONT_AND_BACK, Gl_fill);
  206.  
  207. glMatrixMode(GL_MODELVIEW);
  208.  
  209. end;
  210.  
  211.  
  212.  
  213. procedure Render;
  214.  
  215. begin
  216.  
  217.  
  218.  
  219.  
  220.  
  221. inc(count);
  222.  
  223.  
  224.  
  225. glClearColor(0, 0, 0.0, 1);
  226.  
  227. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  228.  
  229. glLoadIdentity;
  230.  
  231. glrotate(rotx,1,0,0);
  232.  
  233. glrotate(roty,0,1,0);
  234.  
  235. glrotate(rotz,0,0,1);
  236.  
  237.  
  238.  
  239. glBindTexture(GL_Texture_2d, tex);
  240.  
  241.  
  242.  
  243.  glBegin(GL_QUADS); &nbsp;
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  &nbsp;gltexcoord2f(0,0);
  250.  
  251.  &nbsp;glVertex3d(0.5, -0.5, 0.5); &nbsp; &nbsp; //Linke Seite
  252.  
  253.  &nbsp;gltexcoord2f(0,1);
  254.  
  255.  &nbsp;glVertex3d(-0.5, -0.5, 0.5);
  256.  
  257.  &nbsp;gltexcoord2f(1,1);
  258.  
  259.  &nbsp;glVertex3d(-0.5, -0.5, -0.5);
  260.  
  261.  &nbsp;gltexcoord2f(1,0);
  262.  
  263.  &nbsp;glVertex3d(0.5, -0.5, -0.5);
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  &nbsp;gltexcoord(0,0);
  270.  
  271.  &nbsp;glVertex3d(-0.5, -0.5, -0.5); //Rückseite
  272.  
  273.  &nbsp;gltexcoord(0,1);
  274.  
  275.  &nbsp;glVertex3d(-0.5, 0.5, -0.5);
  276.  
  277.  &nbsp;gltexcoord(1,1);
  278.  
  279.  &nbsp;glVertex3d(0.5, 0.5, -0.5);
  280.  
  281.  &nbsp;gltexcoord(1,0);
  282.  
  283.  &nbsp;glVertex3d(0.5, -0.5, -0.5);
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  &nbsp;gltexcoord(0,0);
  290.  
  291.  &nbsp;glVertex3d(0.5, -0.5, -0.5); &nbsp; //Oberseite
  292.  
  293.  &nbsp;gltexcoord(0,1);
  294.  
  295.  &nbsp;glVertex3d(0.5, 0.5, -0.5);
  296.  
  297.  &nbsp;gltexcoord(1,1);
  298.  
  299.  &nbsp;glVertex3d(0.5, 0.5, 0.5);
  300.  
  301.  &nbsp;gltexcoord(1,0);
  302.  
  303.  &nbsp;glVertex3d(0.5, -0.5, 0.5);
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  &nbsp;gltexcoord(0,0);
  310.  
  311.  &nbsp;glVertex3d(-0.5, -0.5, 0.5); &nbsp; //Vorderseite
  312.  
  313.  &nbsp;gltexcoord(0,1);
  314.  
  315.  &nbsp;glVertex3d(-0.5, 0.5, 0.5);
  316.  
  317.  &nbsp;gltexcoord(1,1);
  318.  
  319.  &nbsp;glVertex3d(0.5, 0.5, 0.5);
  320.  
  321.  &nbsp;gltexcoord(1,0);
  322.  
  323.  &nbsp;glVertex3d(0.5, -0.5, 0.5);
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  &nbsp;gltexcoord(0,0);
  330.  
  331.  &nbsp;glVertex3d(-0.5, -0.5, 0.5); &nbsp; &nbsp; //Boden / Unterseite
  332.  
  333.  &nbsp;gltexcoord(0,1);
  334.  
  335.  &nbsp;glVertex3d(-0.5, 0.5, 0.5);
  336.  
  337.  &nbsp;gltexcoord(1,1);
  338.  
  339.  &nbsp;glVertex3d(-0.5, 0.5, -0.5);
  340.  
  341.  &nbsp;gltexcoord(1,0);
  342.  
  343.  &nbsp;glVertex3d(-0.5, -0.5, -0.5);
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  &nbsp;gltexcoord(0,0);
  350.  
  351.  &nbsp;glVertex3d(-0.5, 0.5, 0.5); &nbsp; //Rechte Seite
  352.  
  353.  &nbsp;gltexcoord(0,1);
  354.  
  355.  &nbsp;glVertex3d(0.5, 0.5, 0.5);
  356.  
  357.  &nbsp;gltexcoord(1,1);
  358.  
  359.  &nbsp;glVertex3d(0.5, 0.5, -0.5);
  360.  
  361.  &nbsp;gltexcoord(1,0);
  362.  
  363.  &nbsp;glVertex3d(-0.5, 0.5, -0.5);
  364.  
  365.  &nbsp;glEnd();
  366.  
  367.  
  368.  
  369.  
  370.  
  371. SwapBuffers(form1.myDC); //scene darstellen
  372.  
  373.  
  374.  
  375.  
  376.  
  377. end;
  378.  
  379.  
  380.  
  381. procedure InitTextures;
  382.  
  383. var
  384.  
  385.  &nbsp;texture1: PTAUX_RGBImageRec;
  386.  
  387. begin
  388.  
  389.  &nbsp;texture1 := auxDIBImageLoadA('holz.bmp');
  390.  
  391.  &nbsp;if not Assigned( texture1 ) then begin
  392.  
  393.  &nbsp; &nbsp;MessageBox(0,'Texturenpfad oder Dateiname falsch!'+#13+' Bitte den Pfad überprüfen!','Fehler beim Laden der Textur!',MB_OK or MB_ICONERROR);
  394.  
  395.  &nbsp;end;
  396.  
  397.  
  398.  
  399.  &nbsp;glGenTextures(1, tex);
  400.  
  401.  &nbsp;glBindTexture(GL_TEXTURE_2D, tex);
  402.  
  403.  &nbsp;glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  404.  
  405.  &nbsp;glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  406.  
  407.  &nbsp;glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1^.sizeX, texture1^.sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  408.  
  409.  
  410.  
  411. end;
  412.  
  413.  
  414.  
  415. procedure TForm1.FormCreate(Sender: TObject);
  416.  
  417. begin
  418.  
  419. form1.myDC:= GetDC(Handle);
  420.  
  421. SetupPixelFormat;
  422.  
  423. myRC:= wglCreateContext(myDC);
  424.  
  425. wglMakeCurrent(myDC, myRC);
  426.  
  427. glEnable(GL_DEPTH_TEST);
  428.  
  429. glEnable(GL_TEXTURE_2D);
  430.  
  431. glLoadIdentity;
  432.  
  433.  
  434.  
  435. InitTextures;
  436.  
  437. end;
  438.  
  439.  
  440.  
  441.  
  442.  
  443. procedure TForm1.FormDestroy(Sender: TObject);
  444.  
  445. begin
  446.  
  447. wglmakecurrent(0,0);
  448.  
  449. wgldeletecontext(mydc);
  450.  
  451. releasedc(handle,mydc);
  452.  
  453. end;
  454.  
  455.  
  456.  
  457. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  458.  
  459.  &nbsp;Shift: TShiftState);
  460.  
  461. begin
  462.  
  463.  
  464.  
  465.  if key = vk_down then
  466.  
  467.  begin
  468.  
  469.  rotx := rotx+1;
  470.  
  471.  end;
  472.  
  473.  
  474.  
  475.  if key = vk_up then
  476.  
  477.  begin
  478.  
  479.  rotx := rotx-1;
  480.  
  481.  end;
  482.  
  483.  
  484.  
  485.  if key = vk_right then
  486.  
  487.  begin
  488.  
  489.  roty := roty+1;
  490.  
  491.  end;
  492.  
  493.  
  494.  
  495.  if key = vk_left then
  496.  
  497.  begin
  498.  
  499.  roty := roty-1;
  500.  
  501.  end;
  502.  
  503. end;
  504.  
  505.  
  506.  
  507. procedure TForm1.Timer2Timer(Sender: TObject);
  508.  
  509. begin
  510.  
  511. form1.caption := inttostr(count) + ' Bilder pro Secunde';
  512.  
  513. count := 0;
  514.  
  515. end;
  516.  
  517.  
  518.  
  519. procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
  520.  
  521. begin
  522.  
  523. render; &nbsp; {
  524.  
  525. rotx:=rotx+2;
  526.  
  527. roty:=roty+1;
  528.  
  529. rotz:=rotz+2;}
  530.  
  531.  
  532.  
  533. end;
  534.  
  535.  
  536.  
  537. procedure TForm1.DXTimer2Timer(Sender: TObject; LagCount: Integer);
  538.  
  539. begin
  540.  
  541. rotx:=rotx+1;
  542.  
  543. roty:=roty+1;
  544.  
  545. end;
  546.  
  547.  
  548.  
  549. end.
  550.  
  551.  

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 27, 2002 08:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Das Programm funktioniert?!? Und das andere nicht? Dass ist seltsam... Nur um nochmal sicher zu gehen: die Textur wird auch korrekt geladen?!? Stimmen die Seitenverhätnisse der Textur (manche ältere Karten können nicht mit allen Textur-Formaten umgehen).

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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