Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Affichage de son propre objet drawable dans un render-texture (problème de vue)  (Lu 4778 fois)

0 Membres et 1 Invité sur ce sujet

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Tout d'abord, je vous souhaite à toutes et à tous, une merveilleuse nouvelle année 2015 !!!

Voici donc mon nouveau problème, je précise tout de même que je programme avec la JSFML (Binding JAVA)

J'ai créé un objet implémentant les interfaces Drawable et Transformable

Dans cet objet je crée un VertexArray contenant des Vertex formant des PrimitiveType.QUADS afin au final de générer une map contenant un ensemble de Tiles.

Jusque ici pas de problème.

Lorsque je dessine mon objet Map (Drawable) comme ceci :

window.clear(new Color(32,32,48));
window.draw(map);  // map étant mon objet drawable
window.display();
 

L'ensemble de ma map en TileSet ( 256 * 256) s'affiche correctement et lorsque je modifie la vue, je peux facilement effectuer des translations, Scale et Rotation...

J'ai besoin ensuite d'afficher ma scène non pas directement dans le RenderWindow mais dans un RenderTexture afin d'y effectuer quelques modifications par pixel shader.

Pour ce faire je procède ainsi :

RenderStates rstates = new RenderStates(Camera.View.getTransform());
// View étant l'objet obtenu depuis le RenderWindow permettant d'effectuer translation, rotation, ...

map.draw(renderText, rState);  // renderText étant la RenderTexture et rState étant le RenderStates

 

Dans le code de ma méthode Draw :

public void draw(RenderTarget renderTarget,RenderStates states)
        {
                RenderStates newStates = new RenderStates(
                        Transform.combine(states.transform, this.getTransform()));

                renderTarget.draw(listVertex,newStates);
        }
 

Le problème c'est que lorsque je procède ainsi, ma map en TileSet ne s'affiche qu'en partie (elle ne dépasse pas  la taille donnée au RenderTexture. (ici la taille de ma fenêtre 1024 * 768)

Je pensais que la multiplication des matrices de transformation de ma vue avec la matrice de transformation locale de ma map (qui est une matrice Transform.IDENTITY) allait résoudre le problème, ... mais non.

Pouvez-vous m'aider ?

Merci d'avance

THOCED

« Modifié: Janvier 01, 2015, 03:08:00 pm par Laurent »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32105
    • Voir le profil
    • SFML's website
    • E-mail
J'ai du mal à saisir ton problème. Si tu affiches ta map dans une render-texture, comment voudrais-tu que celle-ci dépasse sa taille ? Ce qui dépasse serait dessiné où ? Je pense qu'un petit dessin ou screenshot pourrait aider à mieux comprendre ton problème.
Laurent Gomila - SFML developer

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Voici les photos (j'espère que ce sera compréhensible car les photos ne sont pas très explicites)

En deux mots :

La première photo, c'est l'affichage de 100 * 100 tiles directement dans le RenderWindow


 
La seconde photo, c'est l'affichage de 100 * 100 tiles à partir d'une RenderTexture qui est ensuite copiée dans le le RenderWindow.



On constate que l'ensemble de ma map n'est pas visible dans la deuxième methode.

Lorsque je bouge ou de-zoom (avec la methode zoom de la class View), je peux voir l'ensemble de mes tiles lorsque ceux-ci sont dessinés directement dans le RenderWindow mais pas lorsque je fais la même chose lorsque les Tiles sont affichés dans le RenderTexture.

THOCED

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
J'ai compris mon probleme.

Initialement je récupérais l'objet View de mon RenderWindow et donc modifiais cette vue.

J'ai tout simplement oublié de récupérer la View de mon RenderTexture à la place.

Dés lors, je n'effectuais pas les transformations sur le RenderTexture mais sur le RenderWindow.

Le problème est corrigé.

THOCED