Afficher une séquence avec OpenGL
Chacha
Membre
Salut,
Désolé, ce n'est pas une vraie question de Cocoa, mais d'OpenGL (et encore). Sur Mac, je sais faire, le problème c'est que je ne sais pas comme attaquer mon problème sur d'autres systèmes.
Voici :
J'aimerais plonger l'affichage d'un film (sur un plan) dans un monde 3D (un peu comme ce qu'on voit dans les démos de Core Animation, ou de LookingGlass, tiens). Avec QuartzComposer, oh là , c'est pas dur. On charge son film, on l'affiche, on peut faire des rotations dans tous les sens. Par derrière, je sais qu'OpenGL tourne à plein régime, c'est formidable.
Mais... maintenant je voudrais le faire sous Windows, avec .NET. Et là je me pose la question : comment ça marche en vrai ? Je me doute bien que si je crée une texture pour chaque frame, et que je les balance une par une à la carte, ça risque de ne pas être très efficace. Alors y a-t-il un autre principe général que je pourrais appliquer ? Ou dois-je forcément me tourner vers les APIs du système hôte ?
+
Chacha
Désolé, ce n'est pas une vraie question de Cocoa, mais d'OpenGL (et encore). Sur Mac, je sais faire, le problème c'est que je ne sais pas comme attaquer mon problème sur d'autres systèmes.
Voici :
J'aimerais plonger l'affichage d'un film (sur un plan) dans un monde 3D (un peu comme ce qu'on voit dans les démos de Core Animation, ou de LookingGlass, tiens). Avec QuartzComposer, oh là , c'est pas dur. On charge son film, on l'affiche, on peut faire des rotations dans tous les sens. Par derrière, je sais qu'OpenGL tourne à plein régime, c'est formidable.
Mais... maintenant je voudrais le faire sous Windows, avec .NET. Et là je me pose la question : comment ça marche en vrai ? Je me doute bien que si je crée une texture pour chaque frame, et que je les balance une par une à la carte, ça risque de ne pas être très efficace. Alors y a-t-il un autre principe général que je pourrais appliquer ? Ou dois-je forcément me tourner vers les APIs du système hôte ?
+
Chacha
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si c'est ce qui t'intéresse, je devrais pouvoir retrouver ça
Donc tu décodes ta vidéo frame par frame, et tu utilises la frame comme nouvelle texture pour ton objet 3D...
Ben ouais... ça marche, mais ça rame un chtit peu. En fait, j'ai essayé d'utiliser les FBO (frame buffer), mais de toutes façons, à un moment où un autre, vu que je ne contrôle pas où s'affiche la vidéo, il faut que je recopie les frames.
J'ai un peu mieux compris où interviennent les APIs de l'OS dans ce problème : il "suffirait" que l'API "lecture de film" puisse être configurée pour effectuer ses rendus dans une texture OpenGL, ou au pire un buffer spécifique, que je serais libre de lier ensuite à un frame buffer.
+
Chacha
J'ai trouvé ce tuto sur NeHe j'ai pas lu en totalité (rassures-toi même si le tuto se base sur le code de Windows, tu as les sources pour XCode dispos aussi) mais le résumé disait que ça permettait de modifier une texture déjà chargée... ?
Bon là c'est du très orienté Windows, mais en général ce qui est intéressant c'est de parcourir le code en diagonale et surtout lire les commentaires qu'ils mettent dans les bulles tout au long du code. Pour comprendre les petites subtilités.
Apparament là toute la magie du truc se fait grace à [tt]glTexSubImage2D[/tt] qui met à jour la texture d'après les données que tu lui passes, ce qui sera à priori bien plus rapide que de recréer une texture (pas de réallocation, pré-retaillée en puissance de 2, et tout).
Super, Ali, merci.
J'ai effectivement essayé un truc avec TexImage, et dans ce cas ça roule. Chez Nehe, je vais donc trouver comment "rendre" une séquence dans un buffer donné, ce que je sais faire en Cocoa, mais pas sous Windows...
En fait dans mon cas les FrameBuffer n'étaient pas super intéressants... je crois.
Demain, j'essaye sous Windows :-) Argh ! ça me fait mal de revenir à cet environnement de dev.
+
Chacha