IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

screenshot dans une résolution > a celle affichée


Sujet :

DirectX

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 79
    Points : 36
    Points
    36
    Par défaut screenshot dans une résolution > a celle affichée
    Salut tlm,

    Je travaille sur un moteur 3D temps réel, et je dois implémenter une fonction qui prendrai un screenshot de l'ecran (ca j'avais deja fait) mais cette fois-ci dans une résolution supérieure à celle affichée. Par ex le moteur fait en rendu en 800*600 et par appuye sur une touche ca prend un screenshot en 1600*1200, et ceci sans changer la taille de la fenêtre.
    j'aurai besoin d'aide pour le rendu dans une autre résolution sans changer la taille de la fenetre, comment faire ? , apres l'enregistrement du screenshot je sais faire.

    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Tu as le choix:
    soit tu crees une offscreen surface a 4 fois la resolution
    où tu rediriges le rendu le temps du screenshot.
    Seul probleme: tu n'as pas toujours la bonne quantité de mémoire disponible (surtout avec l'AA) et tu ne peux pas avoir de bonnes performances avec un offscreen surface 4 fois plus grand qui sert juste à prendre des screenshots en mémoire video.

    soit tu rends 4 dois ta scene avec une matrice de transformation creee pour un viewport 4 fois plus grand mais en décalant les coordonnées écran pour avoir les quatre coins dans ton viewport de 800x600.
    Evidemment lors de ces quatre rendus il faut renvoyer quatre fois les donnés de rendu identique (tu peux faire du culling rapide meme si la performance lors de la prise du screenshot n'est pas la plus importante).
    Puis avec ces quatre screenshots tu recomposes l'écran complet à la main juste avant de sauvegarder.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    merci pour ta réponse,
    je prefere la 1ere méthode, la personne qui va utiliser ca a 1 GO de ram, donc ca devrai aller. JE ne vois pas comment rediriger mon rendu sans changer la résolution visible à l'ecran en fait ? ...
    Le niveau de perf ce n'es pas important pour moi, meme si ca met 30s a faire le screenshot, l'important est de l'avoir.

  4. #4
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    La limite n'est pas la place en mémoire en mémoire systeme
    mais en mémoire video et elle est en general
    plus restreinte.
    Ton backbuffer, ton front buffer, tes textures + ton gros offscreen surface ca va faire beaucoup pour une petite carte video.

    Tu es capable de lire une doc sinon?
    dx sdk -> createrendertarget, setrendertarget etc..

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    ah ok, pour la carte video, ils en ont des de 256 mo, mais c vrai que devrai etre vite rempli. enfin l'important c'est de faire un screenshot dans une résolution au moin de 1600*1200 et ca devrai passer ca.
    je connais createrendertarget et setrendertarget mais je pensais qu'il etais obligé de faire un setdisplaymode pour avoir le backbuffer d'une autre taille.

    Il faudrai donc que je crée une nouvelle surface de rendu de 1600*1200 et je fais createrendertarget puis setrendertarget dessus c ca ? :/

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    apres différents tests, j'arrive juste a faire des screenshot d'une taille <= à la taille de l'ecran, par ex en 1280/1024, peux faire maxi du 1280/1024 ou 1024/1024 en taille de screenshot ...
    quelqu'un a une idée sur comment faire pour une taille + grande sans changer la résolution à l'écran ? je copie colle mon code si ca peux aider.
    j'ai essayé avec des setviewport, setrendertarget etc ... rien à faire.

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    salut,

    finalement, en ajoutant des modes manuellement à la liste des modes asociés au device, j'arrive à monter jsuqu'a du 4000 * 3000 mais il me faudrai du 5000 * 3750, et ca ne passe pas, surement à cause de la limite des 128 mo de la carte vidéo.

    j'ai utilisé la 1ere méthode de Legreg, pour la 2eme je ne voit pas comment deplacer correctement ma caméra pour faire les 4 images ... car en fait il est impossible de recoler les images apres, vu que la perspectuve a changé. Imaginez un test avec un appareil photo qui prend 4 clichés, si vous les mettez a coté ca permet pas de faire une image ... c pas un puzzle.

  8. #8
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Imagine que tu rends dans un viewport imaginaire de 1000 sur 1000
    tu vas mettre en place ta matrice de projection
    pour transformer tes coordonnées 3d en coordonnées ecran.(en réalité ils les transpose dans un cube de coordonnées (-1,-1,0)-(1,1,1).

    Maintenant tu veux seulement tracer la partie inférieure gauche de ce viewport imaginaire (en 500x500), tu vas donc effectuer une mise à l'echelle et une translation des coordonnées finales pour que (-1,-1)-(0,0) (z ne doit pas changer) soit transposé en (-1,-1)-(1,1) c'est à dire recouvre la totalité du viewport reel.

    Pour cela il suffit donc de multiplier la matrice de projection originale par une matrice qui fasse la mise à l'échelle *2 sur les deux coordonnées x et y finales et fasse la translation pour ramener (-1,-1) en (-1,-1)
    x' = 2 * x + 1
    y' = 2 * y + 1

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    merci, j'ai réussi à monter en 2048 * 1536

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/11/2008, 18h34
  2. [XSLT]Afficher plusieurs balises element dans une ligne avant de l'afficher
    Par ethan_decoster dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/10/2007, 16h19
  3. Réponses: 5
    Dernier message: 03/09/2007, 21h36
  4. récuperer dans une variable ce que AWK affiche
    Par Marcolinho dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/06/2007, 12h36
  5. Ecrire dans une autre fenetre que celle de l'application
    Par aurelien59 dans le forum Windows
    Réponses: 3
    Dernier message: 15/05/2007, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo