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

Aktuelle Zeit: Sa Jul 05, 2025 17:19

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: Texture beschreiben
BeitragVerfasst: Sa Aug 15, 2009 14:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
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:
Code:
  1. procedure TForm1.ToTex();
  2. var
  3.    X:Pointer;
  4. begin
  5. GetMem(X,480*640*3);
  6. FillMemory(X,480*640,127);
  7. Texs.Texture[FTex1].Enable(EN_STATE_EDIT);
  8. glTexImage2d(GL_TEXTURE_2D,0,GL_RGB8,640,480,0,GL_RGB,GL_BYTE,X);
  9. FreeMem(X,480*640*3);
  10. end;

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)

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 15, 2009 14:55 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 15, 2009 15:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Oh nein, mir ist gerade aufgefallen, das ich noch gar keine Textur erstellt habe. :oops: . Dazu aber nochmal eine Frage, wie erstelle ich aus dem nichts eine Texture, also ohne Datei. (Ich benutze die glBitmap.pas)

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 15, 2009 17:15 
Offline
DGL Member
Benutzeravatar

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. :oops: . 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 :P

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:
  1.  
  2. glGenTextures(1, @TexID);
  3.  

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:
  1.  
  2. glBindTexture(GL_TEXTURE_2D, TexID);
  3.  

Jetzt werden ein paar Filtereinstellungen gesetzt:
Code:
  1.  
  2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  3. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  4.  


Und dann kommt der eigentlich interessante Teil - die Textur mit einen Werten füllen:
Code:
  1.  
  2. glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height,0, GL_RGB, GL_UNSIGNED_BYTE, X);
  3.  


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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 15, 2009 18:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Danke :D ich wuste es nicht weil ich davonausgegangen bin, dass man für BindTexture schon eine Fertige Textur mit Höhe, Breite, etc. brauchen würde.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 16, 2009 10:50 
Offline
DGL Member
Benutzeravatar

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.
Code:
  1.   glBitmap := TglBitmap2D.Create(glBitmapPosition(Breite, Höhe), ifRGB8);
  2.   glBitmap.GenTexture;

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 16, 2009 13:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Danke für die Hilfe, ich habe das WebCam-Bild jetzt endlich in richtigrum und in richtigen Farben auf der Textur. :D Ich muss jetzt nur noch nen Shader für Kantenerkennung schreiben.

_________________
You even trying ...

Website: http://rise-of-light.de/


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]