Hi,
ich bastle immernoch an einem Programm mit WebCams herum, ich habe in jetzt alles soweit fertig, dass ich die Daten in eine Textur legen kann, da ich erstmal testen wollte ob alles geht habe ich mir eine kleine Funktion geschrieben:
Leider wird nur eine weise Textur angezeigt und es wird kein Fehler ausgegeben, wisst ihr was ich falsch mache? Die Zeile "Texs.Texture[FTex1].Enable(EN_STATE_EDIT);" ist übrigens aus meiner Texturunit und bindet die Textur. (Zur Not kann ich die Unit auch posten)
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Das erste Problem ist, du verwendest npot Texturen also Texturen deren Kantenlängen nicht zur Basis2 passen.
Ein weiteres Problem wird deine FillMemory funktion bieten, da du nur 640x480 bytes füllst aber 640x480x3 Bytes hast, ergo wird ein Teil der Textur nur mit Grau gefüllt sein.
Du solltest auch definitiv mal Prüfen, ob die Bilddaten in RGB und nicht BGR oder standard YUV vorliegen, also der Frame grabber auch schon die Konvertierung übernimmt.
Weiße Textur deutet auf Texturfehler oder nicht aktivierte Texturen(glEnable(GL_TEXTURE_2D);) hin.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Oh nein, mir ist gerade aufgefallen, das ich noch gar keine Textur erstellt habe. . Dazu aber nochmal eine Frage, wie erstelle ich aus dem nichts eine Texture, also ohne Datei. (Ich benutze die glBitmap.pas)
Registriert: Do Aug 25, 2005 16:00 Beiträge: 189
Programmiersprache: Java, C#
mori hat geschrieben:
Oh nein, mir ist gerade aufgefallen, das ich noch gar keine Textur erstellt habe. . Dazu aber nochmal eine Frage, wie erstelle ich aus dem nichts eine Texture, also ohne Datei. (Ich benutze die glBitmap.pas)
Genauso wie mit Datei
Nein, ernsthaft - die glBitmap.pas macht das gleiche was du tun musst, nur bekommst du nichts davon mit. Zuerst brauchst du eine TexturId. Die bekommst du mit dem Befehl
Code:
glGenTextures(1,@TexID);
wobei die Variable TexID glaub ich vom Typ Cardinal ist. Danach musst du die Textur binden, damit sich alle Änderungen die Folgen nur auf diese Auswirken:
Code:
glBindTexture(GL_TEXTURE_2D, TexID);
Jetzt werden ein paar Filtereinstellungen gesetzt:
Da die letzte Funktion doch ein paar Parameter mehr hat udn du die evntl. anpassen musst solltest du im Zweifelsfall hier schauen.
Aber nach den Schritten kannst du deinen Speicher, den du in X reserviert hast freigeben und die Textur mit glBindTexture(GL_TEXTURE_2D, TexID); binden, also benutzen.
Wird auch im Tutorial 4, Abschnitt "Texturen richtig zubereitet", erklärt, nur das da per SDL die Textur geladen wird (falls du es nochmal ein bisschen ausführlicher nachlesen willst). Aber die Schritte an sich sind gleich.
Zuletzt geändert von Deathball am So Aug 16, 2009 12:31, insgesamt 2-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das was Deathball geschrieben hat passt so weit. Allerdings ein paar Anmerkungen. Das erste Initialisieren der Textur muss mit glTexImage2D gemacht werden. Ja. Dort kann man aber als Daten auch ein NIL übergeben. Zu aktualisieren der Texturen solltest du aber glTexSubImage2D verwenden. Denn glTexImage2D initialisiert die Textur und dessen Größe, Format etc. glTexSubImage2D kopiert lediglich Daten. Ist also um ein vielfaches schneller.
Kleine Anmerkung zur glBitmap. Du kannst auch eine Leere Textur erstellen. Dazu musst du lediglich folgendes aufrufen.
Damit würdest du dann eine Textur mit den Maßen Breite*Höhe erstellen und als Format würde RGB8 benutzt werden. Also Format kannst alle unkomprimierten Formate benutzen die die glBitmap kennt. Wenn du dann die Daten aktualisieren wolltest müsstest du sie nur noch binden und glTexSubImage2D aufrufen.
Das glBindTexture sagt OpenGL nur welche Textur benutzt werden soll. Das ist wichtig zum Einstellen von Parametern oder hochladen von Daten oder zum Benutzen. In welchem Zustand sich diese Textur befinden ist egal.
Danke für die Hilfe, ich habe das WebCam-Bild jetzt endlich in richtigrum und in richtigen Farben auf der Textur. Ich muss jetzt nur noch nen Shader für Kantenerkennung schreiben.
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.