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

Aktuelle Zeit: Fr Jul 18, 2025 15:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Webcam / TV-In als Textur?
BeitragVerfasst: Do Mär 02, 2006 21:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

gibt's ne möglichkeit in OpenGL das was über die Webcam, bzw die TV-Karte in den PC kommt als Textur zu nutzen???
Und vorallem so das es nicht lagt und nicht ruckelt.. :)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 02, 2006 22:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

Falls du französisch kannst, hier kannste evtl was finden ...
http://www.cppfrance.com/code.aspx?ID=20846

ansonsten such einfach mal unter Google (Stichwort: OpenGL Webcam)
http://www.google.de/search?hl=de&clien ... uche&meta=

da könnte man was finden, auch etwas was vll nicht auf französisch ist *g*

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 03:11 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Auf Englisch von Jan Horn: http://www.sulaco.co.za/opengl2.htm#VideoCapture


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 08:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich habe vor ne Ewigkeit mal ein Pogramm geschrieben was ne Webcam ausliest und es als Bilder abspeichert und da habe ich meines Wissens BMPs bekommen oder etwas vergleichbares und das kannste ja direkt als Textur benutzen. Die Texturen werden aber alle nicht Standardkonform sein. Was aber eigentlich nichts macht, da du dafür entweder TextureRectangles oder NPOT Texturen benutzen kannst. Hackbart hatte dazu auch mal einen DirectShow Filter geschrieben und Finalspace hatte das selbe Problem in ziemlich genau der selben Zeit.

Man kann mit OpenGL sicherlich einiges reißen aber es ist Primär nicht für so etwas ausgelegt weswegen irgendwo immer ein paar Probleme haben wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 15:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

tausend dank.. hat mir gut geholfen :)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 16:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

eine frage an die Assembler-Spezies :)

Code:
  1. procedure MoveLine(const Buffer, TextureData : Pointer);
  2. asm
  3.   push eax
  4.   push ebx
  5.   push ecx
  6.   push esi
  7.  
  8.   mov esi, eax
  9.   add esi, 352*3*16
  10.   mov ebx, 256
  11.  
  12. @@loop1:
  13.   mov ecx, 256
  14.  
  15. @@loop :
  16.   mov eax,[esi+0]
  17.   ror eax,16
  18.   mov ah, byte ptr [esi+1]
  19.   mov [edx],eax
  20.   add edx,3
  21.   add esi,3
  22.   dec ecx
  23.   jnz @@loop
  24.  
  25.   add esi, (352-256)*3
  26.   dec ebx
  27.   cmp ebx, 0
  28.   jnz @@loop1
  29.  
  30.   pop esi
  31.   pop ecx
  32.   pop ebx
  33.   pop eax
  34. end;


Wie muß ich das abändern das es auch mit texturen <> 256 funktioniert (auch mit nicht quadratischen)??
Kann das ganze zwar auch einfach ohne Assembler machen, aber ich denk mal asm ist einfach ein stück schneller..

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 17:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hmmm. Bin nicht der Assamblercrack aber schon mal an die Methode Move gedacht? Das ist eine VCL Kappsellung von genau dem was du haben willst. Und der geht vor allem auch her und kopiert gleich 4 Bytes am Stück. Dadurch wird erstens die Schleife kleiner und es werden mehr Daten pro Takt bewegt. Besser kannst du es nicht haben.

Benutze den Befehl in der glBitmap sehr häufig und kann mich über dessen Geschwindigkeit echt nicht beschweren. ;-)

PS: Versuch am Besten die Textum immer am Stück zu betrachten. Also solltest du auch in kauf nehmen, dass die Textur auf dem Kopf steht oder sonst etwas so lange du sie am Stück kopieren kannst. Wobei es nicht so extrem viel langsamer ist wenn man sie Zeilenweise kopiert aber du musst bei jeder Zeile neu aufsetzen und das kostet dennoch mehr als am Stück.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 17:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

wenn ich's einfach nur mit move mache bekomm ich AcessViolations.. irgendwas muß also an dem Buffer den die Webcam schickt anders sein.. (buffer size unterscheidet sich auch ganz extrem)

http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/htm/isamplegrabbercbbuffercb.asp
Kann mir wer verraten in welchem format der pBuffer da ist?? Ich find da nix zu... :(

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 18:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Dasn denke ich mal, dass eine handgeschriebene AssemblerMethode da auch nicht mehr bringt.

Hab gerade nur mal geschaut. Sieht nach massig Einstellungen aus.
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/htm/isamplegrabbersetmediatype.asp


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 18:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

umh.. das sind echt ne menge daten...
aber die asm funktion Moveline da oben kopiert genau den teil des buffers in die textur (ist von JanHorn).. nur aber halt nur mit 256x256er texturen :(

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 19:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Aya hat geschrieben:
aber die asm funktion Moveline da oben kopiert genau den teil des buffers in die textur (ist von JanHorn).. nur aber halt nur mit 256x256er texturen :(

Und? Der Code dürfte ja auch schon ein bisschen älter sein und nur weil es von Jan ist heißt es noch lange nicht, dass es optimal ist. Er Swapt in seinen Codes auch ganz gerne die R und B Kanäle. Was seit OpenGL 1.2 absolut nicht mehr nötig ist. Aber im Endeffket musst du wissen was du tun willst. Ist schließlich dein Programm.

Wenn Windows eine Datei im Cache hat kann ich ein BMP/TGA/DDS in locker 2-3ms Laden. Und das alles ohne irgendwelchen Assambler einzusetzen. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 20:20 
Offline
DGL Member

Registriert: Di Sep 06, 2005 20:40
Beiträge: 26
Wohnort: Aarhus, Denmark
Die function MoveLine nehmt daten von die 352x288x3 buffer input. Die esi pointer wird addiert 16(*3 byte) um start und 48(*3 byte) rows im start each loop Dann werden die daten rotiert und bewegt in dem texturepointer. Die probleme ist nur das der implementation sind programmiert für dieses speciallen daten input. Dieses weg hast du nicht andere möglichkeiten als methoden wie gluScaleImage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 10:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
gluScaleImage würde ich nicht vewenden, da dabei das Bild neu berechnet wird was auf jeden Fall sehr lange dauert. gluScaleImage wird auch intern in gluBuildMipMaps benutzt und diese Methode ist so ziemlich das langsamste was man bei Texturen benutzen kann. Du solltest auf jeden Fall die Daten so belassen wie sie sind. OpenGL ist an der Stelle flexibel genug um damit klar zu kommen. So lange du nicht zu viel haben willst. Also normale Texturen ohne MipMaps sind durchaus kein problem.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 14:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

mir geht's ja nicht unbedingt darum das ich das mit ASM machen will oder so, nur ich hab nach wie vor keine ahnung in welcher form die daten in diesem Buffer von DirectShow da sind..

http://msdn.microsoft.com/archive/defau ... iatype.asp

Die ASM Procedure die ich oben gezeigt hab liest diesen Buffer für eine 256x256 textur ein.. daher dachte ich evtl kann mir entweder anhand dieser procedure sagen wie der buffer aussieht oder evtl weiß wer wie ich sie umändern muß für andere auflösungen.. :)

Ich würd ja gerne auch einfach nur Move() oder sonstwas verwenden.. aber auch OpenGL ist nur solange tolerant iwe man ihm sagt wie der buffer aufgebaut ist :(

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 10, 2006 23:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

hab noch ein anderes Problem...
Sobald eine TVKarte angeschlossen ist an einen Rechner funktioniert das programm nichtmehr (AcessViolation).. Hab es an drei rechnern mit verschiedener TVKarte probiert, überall das gleiche Problem... ohne TVKarte (z.B. nur mit Webcam) geht alles..

Es muß an dieser Zeile liegen, denn wenn ich die auskommentiere startet das programm zumindest:
Capture.ChooseDevices(...);

Hat wer ne ahnung was das sein könnte??

Passiert auch bei dem Original von JanHorn, also falls ihr es nachvollziehen wollt :)
i0n0s hat geschrieben:


Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 16 Queries | GZIP : On ]