2010-07-28 12 views
2

Je fais une application qui dessine des formes et j'utilise une caméra pour dessiner dans d'autres endroits. Fondamentalement, disons que j'ai un rectangle 4x3 et que j'aimerais utiliser glgetpixels pour obtenir tous les pixels pour quelque chose qui est 1024x768, mais mon moniteur pourrait ne pas supporter cette résolution. Comment puis-je rendre quelque chose de plus grand que le moniteur. Je fais cela afin que je puisse laisser l'utilisateur enregistrer une image des formes à une résolution arbitraire. Est-ce que l'utilisation de glviewport s'étendrait au-delà du cadre, alors je peux juste faire du glgetpixels?peut OpenGL faire cela?

Merci

+0

Je l'ai fait sous Windows. IIRC, vous définissez fondamentalement le contexte de rendu (RC) à un bitmap hors écran (de dimensions arbitraires). –

Répondre

3

Vous pouvez RTT (render-to-texture) en définissant un FBO (Frame Buffer Object) et en y attachant une texture. Vérifiez glBindFramebufferEXT().

Et après avoir dessiné la scène, vous pouvez exécuter glGetTexImage() et récupérer les pixels pour cela.

RTT est une technique très bien établie et documentée.

2

Je ne suis pas un développeur OpenGL mais vous pouvez certainement effectuer le rendu à une texture qui peut avoir des dimensions plus grandes que l'écran.

recherche Google Un m'a donné cela, peut-être il est utile: http://developer.nvidia.com/attach/6725

2

Ce n'est pas une réponse complète, mais il devrait être utile. Vous faites RTT, Render to Texture. Vous allez configurer un nouveau rendererbuffer, le définir comme cible de rendu, puis utiliser glGetPixels pour obtenir sa valeur. Lorsque vous réalisez le rendu avec:

void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); 

Vous pouvez définir sa taille, qui ne doit pas correspondre à celle de votre écran. Espérons que cela aide!

0

En fait, cela dépend. Je pense que les FBO ne résoudront pas vos problèmes (cela aidera quand même).

Je suppose que vous essayez de créer une version haute résolution d'une scène 3D, par exemple pour l'imprimer à 300dpi. Vous aurez probablement besoin de plus que votre résolution FBO maximale (4096 * 4096 sur une carte graphique décente), vous devrez donc utiliser le rendu carrelé.

L'idée est de rendre votre image finale comme un ensemble de sous-images (tuiles)

L'auteur de Mesa3d a écrit une bonne bibliothèque qui fait cela, TR. L'utilisation est assez simple.