Ich habe ein kleines Programm geschrieben, welches auf Knopfdruck einfach nur ein Quadrat texturieren soll. Haben alles (so weit ich weiß) nach dem Tutorial gemacht, das es hier auf der Website gibt. Blöderweise wird die Textur nicht angezeigt, das Quadrat wird ausgegeben, bleibt aber vollkommen Weiß.
Ich sitzt etz scho seit mind. 4 Stunden über diesem (entschuldigung) mist, habe gegoogelt, habe ihr gesucht und trotzdem nichts gefunden.
Hier ist der Quelltext
Code:
var
Form3: TForm3;
T:Integer;
TexID: TgluInt;
const
NearClipping =1;
FarClipping =1000;
....
implementation
procedure TForm3.FormCreate(Sender:TObject);
begin
DC:= GetDC(Handle);
ifnot InitOpenGL then Application.Terminate;
RC:= CreateRenderingContext( DC,
[opDoubleBuffered],
32,
24,
0,0,0,
0);
ActivateRenderingContext(DC, RC);
SetupGL;
glClearColor(0.3,0.4,0.7,0.0);
end;
procedure TForm3.Render;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wenn du in Delphi eine Anwendung kompilierst, dann stellt Delphi vor jeder benutzten Quellcodezeile ein kleines blaues Pünktchen dar. Sofern Debugginfos aktiv sind. Ist aber standard. Wenn du dir mal die Methode LoadTexture genau anschaust dürftest du feststellen, dass dort die Punkte fehlen.
Mit anderen Worten. Ich kann nicht entdecken, dass du die Methode LoadTexture überhaupt benutzt. Schreibe diese mal an das Ende von SetupGL oder FormCreate.
Wenn du die Textur im Render benutzt solltest du sie Dort auch noch mal binden. und wenn du sie nicht mehr benötigst solltest du sie auch wieder deaktivieren.
Sorry, hatte vergessen, mein OnClick - Event mit reinzuschreiben.
Habe die Textur auch eingebunden, funktioniert trotzdem nicht. Interresanterweise kommt bei ersten Mal klicken ein weißes Quadrat, wenn ich das zweite Mal klicke, wird das weiße Quadrat grün
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du musst die Textur natürlich auch vor dem Darstellen laden.
Aber noch eine kleine Ergänzung zu meinem letzten Beitrag. OpenGL ist eine Statemaschine. Das heißt das was aktiviert wurde bleibt so lange aktiv bis es wieder deaktiviert wird. Wenn du also eine Fläche mit einer Textur zeichnest und anschließend eine Ohne zeichnen möchtest und die Textur aber nicht deaktivierst dann wird das Texel (Pixel der Textur) was du als Letztes mit glTexCoord angegeben hast über die gesammte Fläche gespannt.
Ich gehe auch mal davon aus, dass das mit OnClick nur ein Test ist aber trotzdem der Hinweis. Texturen auch bitte nur 1 Mal laden und für den Anfang das direkt nach dem Erstellen des Kontextes erledigen. Wenn du die ganzen Zusammenhänge verstanden hast kannst du es natürlich so gestalten wie du willst nur zu Anfang fährt man damit am Besten.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Ich würde eher in Richtung "global & lokal" suchen. Du lädst die Textur in eine lokale Variable "TexID", die am Ende er Prozedur verworfen wird. Im Render hingegen verwendest Du eine globale Variable, die vermutlich uninitalisiert ist. Würde also mal die lokale unten entfernen.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
So, ich hab jetzt das LoadTexture vor das Render geschrieben und ich habe die lokale Variable TextID aus dem LoadTexture entfernt. Das Ergebniss bleibt das selbe, ein weißes Quadrat. Das Bild hat eigendlich auch die richtige Auflösugn (256x256). Habe auch mal das LoadTexture mal in das OnCreate geschoben, hat nichts geändert
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich kann so jetzt nichts entdecken. Aber packe das mal bitte alles zusammen und schicke es mir per Mail. Meine Adresse findest du auf der Team Seite. Aber bitte mit allen benötigten Quellen und bildern.
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.