Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - thoced

Pages: [1] 2 Suivante »
1
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




2
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

3
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


4
Graphique / Re : lumiere et multitexturing
« le: Décembre 30, 2014, 09:53:22 pm »
Merci pour la réponse,

Petite question supplémentaire, certainement déjà posée plusieurs fois, mais pourquoi la librairie SFML ne permet pas de passer plusieurs niveaux de coordonnées de texture ?

Merci

5
Graphique / Re : lumiere et multitexturing
« le: Décembre 30, 2014, 08:10:10 pm »
J'ai trouvé une solution intermédiaire.

1er, je dessine dans un RenderTexture ma scene principale

2eme, je dessine dans un second RenderTexture ayant les même dimensions que ma première RenderTexture, ma lumière à l'endroit souhaité.

3eme, je dessine dans un troisieme RenderTexture ma scene complete en passant en paramètre dans le Fragment Shader la Texture du Second RenderTexture contenant ma lumière. Dans le Fragment Shader je fusionne les pixels qui m'intèressent.

Mais bon si il y a d'autres méthodes, je suis preneur...

THOCED




6
Graphique / Re : lumiere et multitexturing
« le: Décembre 30, 2014, 05:43:31 pm »
La texture de la lampe a des dimensions quelconques, différentes de celle de la scène principale.  Le Sprite contenant la texture de la lampe va également bouger dans la scène.

merci

THOCED

7
Graphique / Re : lumiere et multitexturing
« le: Décembre 30, 2014, 04:34:44 pm »
Oui cela fonctionne bien mais j en avais besoin afin notamment de pouvoir jouer sur l intensité de la lumiere ou de modifier la couleur sur certain pixel en fonction de ce qui est éclairé dans ma scene principale.

De plus, cela  m'aurai fait un bon exercice.

Rhoced

 

8
Graphique / lumiere et multitexturing
« le: Décembre 30, 2014, 03:57:30 pm »
Bonjour à toutes et à tous.

Je tente d appliquer par shader une texture comprenant un dégradé de lumiere afin de simuler dans ma scene principale un effet de lampe de poche.

Je passe donc a mon shader la texture de ma scene dessiner dans un rendertexture.

Comment dans le fragment shader pourrais je ensuite obtenir les bonnes coordonnées de la texture de ma scene afin de récupérer le bon pixel a melanger avec celui de la texture de la lampe ?

Est il possible d'utiliser le multitexturing et donc inscrire dans les vertex de mon sprite, 2 niveaux de coordonnées de textures ?

Merci d avance




9
merci, cela fonctionne maintenant

10
Citer
Et il faudrait aussi préciser "aucun résultat" : ça signifie que rien ne s'affiche ? Ou bien ta forme sans effet particulier du shader ?

rien ne s'affiche, l'ombre n'existe plus.

Citer
il faut plutôt utiliser la composante diffuse.

tu veux dire utiliser gl_FrontMaterial.diffuse ?

merci déjà pour les explications.

11
Bonjour à toutes et à tous,

j'aurai besoin d'appliquer un pixel shader sur un convexshape lors de son affichage dans une rendertexture.

le but étant d'effectuer une dégradé sur un shadow texture.

Jusqu'a présent, j'ai créé un shadow map à l'aide de convershapes dans un rendertexture.

ces ombres sont réalisés à l'aide des côtés de mes formes et projetés en fonction de la position d'une lumière.

J'affiche ma scene principale également dans une deuxieme rendertexture.

et lors de l'affichage final dans le renderwindow, j'applique par pixel shader mon shadow map avec un dégradé en fonction de la distance avec la lumière.

Cela marche bien mais voulant par la suite utiliser plusieurs sources de lumières, j'aurai besoin d'effectuer les calculs en fonction de la lumière qui a généré l'ombre.

Pour ce faire, j'aurai aimé pouvoir précalculer mon shadow map déja dégradé à l'avance lors de sa création.

Lorsque je tente d'appliquer un shader lors de l'affichage du convexshape, celui-ci ne me rend pas l'image de l'ombre, je n'ai aucune erreur affiché mais aucun résultat non plus.

voici le bout de code.

Citer
/
/
cs -> étant un convershape
state -> contenant mon shader

_shader->setParameter("texture",sf::Shader::CurrentTexture);
_shader->setParameter("poslight",sf::vector2f(10,10));
_stencil->draw(cs,state);


ma question est donc la suivante, est-il possible d'appliquer un pixel shader directement lors de le l'affichage
du convexshape dans un rendertexture ? est-il logique de procéder ainsi ?

merci d'avance

12
Graphique / Re : Texture non trouvé dans le shader (SFML 2.0)
« le: Juillet 29, 2012, 03:18:53 pm »
Ah effectivement, moi qui avançait pas à pas pour éviter tout problème, je n'utilisait donc pas la variable mtexel dans ce cas de figure.

Un grand merci pour la réponse.

13
Graphique / Texture non trouvé dans le shader (SFML 2.0)
« le: Juillet 29, 2012, 11:08:33 am »
Bonjour à tous,

je dois utiliser deux textures dans un shader, j'ai donc créé deux sampler2d nommés tex et tex2.

voici le code fragment :


uniform sampler2D tex;

uniform sampler2D tex2;

void main()
{
   

      vec4 texel = texture2D(tex,gl_TexCoord[0].st);

      vec4 mtexel = texture2D(tex2,gl_TexCoord[0].st);

        if(texel.rgb == vec3(0,0,0))
                texel.rgba = vec4(0.5,0.5,0.5,0.1);


    gl_FragColor =   texel;


}

dans mon appel voici ce que je fais:

                sf::RenderStates rs;
                rs.shader = _shader;
                _shader->setParameter("tex",sf::Shader::CurrentTexture);
                _shader->setParameter("tex2",_stencil.getTexture());
                app->draw(sp,rs);

lorsque je ne passe qu'une texture "tex", cela ne pose aucun probleme par contre lorsque je tente de passer les deux textures, lors de l'éxécution j'obtiens le message suivant affiché sur la console ::

Citer
Texture  "tex2" not found in shader

Quelqu'un a t il une explication à mon probleme ?

merci d'avance

14

Citer
En fait je voulais savoir pourquoi, car beaucoup de gens se trompent et je ne sais pas comment éviter ça.

A vrai dire, je n'avais même pas fait l'effort de regarder où la placer, l'accueil du forum est très clair

Citer
sf::Shader::CurrentTexture représente la texture de l'objet que tu dessines avec le shader, pas le contenu de la fenêtre. Si tu veux repasser tout ce que tu as dessiné dans un shader, alors il faut dessiner dans un RenderTexture et utiliser le résultat dans un sprite, auquel tu pourras appliquer ton shader.

ok j'ai compris, juste qu'il me semble avoir déjà tenté ceci mais si je ne me trompe pas lors de l'affichage de la RenderTexture au RenderWindow en utilisant la méthode draw, ( en passant par un sprite) le transfert était très lent.

Je vais retenter à moins que quelqu'un sache pourquoi cela pourrait être très lent.

15
Bonjour,

concernant la rubrique, effectivement je me suis trompé.

Maintenant concernant le code, bien sur que j'ai essayé et non mon pc n'a pas explosé lol, c'est bien cela le problème. (enfin non je suis content qu'il n'ai pas explosé ;) )

je pensais pouvoir donc récupérer mon image du rendu avec la méthode:

_shader->setParameter("tex",sf::Shader::CurrentTexture);

dans mon pixel shader je défini la variable suivante

 uniform sampler2D tex;

lorsque je tente simplement d'afficher ma texture compris dans la variable tex
en effectuant ceci :

vec4 pixel= texture2D(tex, gl_FragCoord.xy);

gl_FragColor =   pixel;

le résultat est un écran noir.

Lorsque je tente de passer n'importe qu'elles autres textures à ma variable tex, j'ai le même probleme.

Ma question est donc la suivante, ai je bien compris le principe ? n'ai je pas oublié quelques choses ?

Merci d'avance pour vos réponses.

PS : Pour l'instant pour afficher ma texture de shadow j'utilise le :

sf::RenderStates rs;
rs.blendMode = sf::BlendMode::BlendMultiply;


ma texture des ombres portés s'affiche correctement mais je voudrai pouvoir utiliser les shaders.

merci d'avance

Pages: [1] 2 Suivante »
anything