hallo!
ich hab jetzt mal angefangen das texturen tut zu lesen und verstehe bisher alles, nur ein problem habe ich noch:
Code:
glGenTextures(1, tex);
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:
glBindTexture(GL_TEXTURE_2D, tex);
Incompatible Types 'Cardinal' and 'PGLuint'
was muss ich machen, damit tex "erkannt" wird?
mfg
Bountyhunter
1. Musst Du "tex" als Variable deklarieren, und
2. PGLuint ist ein Pointer (Zeiger) auf TGLuint. Versuch mal folgendes:
Code:
var
tex : TGLuint;
begin
glGenTextures(1, @tex);
glBindTexture(GL_TEXTURE_2D, tex);
end;
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?
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)
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
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?
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!
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?
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:
glVertex3d(-0.5, 0.5, 0.5); //Rechte Seite
gltexcoord(0,1);
glVertex3d(0.5, 0.5, 0.5);
gltexcoord(1,1);
glVertex3d(0.5, 0.5, -0.5);
gltexcoord(1,0);
glVertex3d(-0.5, 0.5, -0.5);
glEnd();
SwapBuffers(form1.myDC); //scene darstellen
end;
procedure InitTextures;
var
texture1: PTAUX_RGBImageRec;
begin
texture1 := auxDIBImageLoadA('holz.bmp');
if not Assigned( texture1 ) then begin
MessageBox(0,'Texturenpfad oder Dateiname falsch!'+#13+' Bitte den Pfad überprüfen!','Fehler beim Laden der Textur!',MB_OK or MB_ICONERROR);
_________________ 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!
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?
Mitglieder in diesem Forum: 0 Mitglieder und 40 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.