Salut j'ai une classe générique qui remet à jour toutes les animations du jeux et bien sûr la classe animation qui contient toutes les "frames" des animations.
Salut j'ai une classe générique qui remet à jour toutes les animations du jeux et bien sûr la classe animation qui contient toutes les "frames" des animations.
Salut, j'ai remarqué que quelques petites choses n'allaient pas dans le design du framework alors j'ai décidé de le changer :
-Ajouter un composant ShadowRenderComponent pour rendre les ombres car ce n'est pas à la map de gérer celà.
-Ajouter un composant LightRenderCompoenent pour rendre les lumières.
-Ajouter un composant RefractionRenderComponent pour les reflets.
-Ajouter un composant WaterRenderComposant pour l'eau.
-Ajouter un composant CustomShaderRenderComposant pour rendre des entités avec des shaders définis par l'utilisateur lui même.
-Ajouter une entité RenderTextureEntity pour les rendu en plusieurs passes.
-Faire hériter le classe ParticuleSystem de Entity pour rendre les particules sur un composants plutôt que directement sur la fenêtre.
Par contre j'ai deux bugs gênants qui m'empêche d'avancer pour le jeux :
-L'animation du personnage qui marche se joue bien par contre l'animation du personnage qui attaque ne se joue pas bien, je ne sais pas pourquoi, pourtant c'est le même code source qui joue les deux animations.
-La sous fenêtre pour ressicuter le personnage parfois ne se ferme pas quand je clique sur le bouton du coup le jeux reste bloqué.
Ces deux bugs m'empêchent d'avancer sur le jeux ça fait des mois que je suis bloqué.
C'est pour cela que je n'ai plus trop donné de nouvelles...
J'ai un message d'erreur failed to link the target render texture.
Je vais réinstaller pour voir.
Mais il y a des jeux ou ma carte graphique n'affiche pas les animations des sors. (ragnarok online)
Et des jeux qui ne marchent pas (battle field, matrix, ...)
Je crains que ma cg soit foutue.
J'ai essayé de compiler sous windows mais dirent n'existe pas sous windows je vais devoir arranger ça aussi.
Bon sous windows je n'ai pas de soucis avec les renderTextures il les créent bien, mais le soucis c'est que les compilateurs windows me renvoient pleins d'errreurs hors que les compilateurs linux non donc ici j'essaie de faire fonctionner un compilateur linux sur windows mais ce n'est pas facile je ne m'y connais pas du tout là dedans ...
J'ai réussi à le compiler sous windows par contre il m'a l'air d'être trop lent (le programme ne répond pas) donc je vais essayer d'optimiser en utilisant de l'opengl moderne.
Sous linux ça tourne bien par contre.
Enfin non ce n'est pas que c'est lent c'est que ça ne m'affiche rien sur windows les composants ou j'utilise des shaders ne s'affichent pas hors que je n'ai pas ce problème sous linux ...
J'arrête le portage sous windows, ça ne m'affiche rien, je ne sais pas si c'est à cause de mon driver graphique mais sous ubuntu avec le même code l'affichage fonctionne.
Windows a ses spécificités, pour initialiser un contexte openGL, il a par exemple besoin du handle de la fenêtre hôte, contrairement à Linux
PXL le retro-gaming facile: Essayez-le
Yildiz-Engine an open-source modular game engine: Website
Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page
Oui mais je laisse le soin à SFML de gérer la création du contexte openGL. Mais sur windows dès que j'utilise un shader un peu plus compliqué ça n'affiche plus rien.
C'est probablement parce que tu as fait des choses non standards dans ton shader (genre peut-être des cast implicites) et ton driver sur windows ne les supportent pas. En général, il faut faire attention quand tu écris en GLSL car d'un driver à l'autre la sensibilité peut changer fortement. Vérifie que tout est bien correct selon les conventions standards et ça devrait passer mieux.
Ce sont ces shaders là qui bug. (sous windows)
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 const std::string depthGenFragShader = "#version 130 \n" "uniform sampler2D depthBuffer;" "uniform sampler2D texture;" "uniform vec3 resolution;" "uniform float haveTexture;" "in mat4 projMat;" "void main () {" "vec2 position = ( gl_FragCoord.xy / resolution.xy );" "vec4 previous_depth_alpha = texture2D(depthBuffer, position);" "vec4 texel = texture2D(texture, gl_TexCoord[0].xy);" "vec4 colors[2];" "colors[1] = texel * gl_Color;" "colors[0] = gl_Color;" "bool b = (haveTexture == 1);" "float current_alpha = colors[int(b)].a;" "float current_depth = (gl_FragCoord.w != 1.f) ? (inverse(projMat) * vec4(0, 0, 0, gl_FragCoord.w)).w : gl_FragCoord.z;" "colors[1] = vec4(0, 0, current_depth, current_alpha);" "colors[0] = vec4(0, 0, previous_depth_alpha.z, previous_depth_alpha.a);" "b = (current_depth >= previous_depth_alpha.z);" "gl_FragColor = colors[int(b)];" "}"; const std::string frameBufferGenFragShader = "#version 130 \n" "uniform sampler2D depthBuffer;" "uniform sampler2D frameBuffer;" "uniform sampler2D texture;" "uniform vec3 resolution;" "uniform float haveTexture;" "in mat4 projMat;" "void main () {" "vec2 position = ( gl_FragCoord.xy / resolution.xy );" "vec4 previous_depth_alpha = texture2D(depthBuffer, position);" "vec4 previous_color = texture2D(frameBuffer, position);" "vec4 texel = texture2D(texture, gl_TexCoord[0].xy);" "vec4 colors[2];" "colors[1] = texel * gl_Color;" "colors[0] = gl_Color;" "bool b = (haveTexture == 1);" "vec4 current_color = colors[int(b)];" "float current_depth = (gl_FragCoord.w != 1.f) ? (inverse(projMat) * vec4(0, 0, 0, gl_FragCoord.w)).w : gl_FragCoord.z;" "colors[1] = current_color * current_color.a + previous_color * (1 - current_color.a);" "colors[1].a = current_color.a + previous_color.a * (1 - current_color.a);" "colors[0] = previous_color * previous_color.a + current_color * (1 - previous_color.a);" "colors[0].a = previous_color.a + current_color.a * (1 - previous_color.a);" "b = (current_depth >= previous_depth_alpha.z);" "gl_FragColor = colors[int(b)];" "}";
Heu...le cast int(b) passe sous windows ou pas comment je fais pour vérifier si mes shaders sont correct selon la convention standart il y a des sites webs pour ça ?
Tu peux regarder dans la doc de GLSL. Sinon, logiquement openGL devrait te cracher des erreurs dans la console au moment de la compilation de tes shaders.
Hé bah justement il n'y a pas d'erreur GLSL!
Au fait j'ai trouvé le soucis avec l'animation qui ne se lançait pas.
Maintenant tout fonctionne au niveau du graphisme il ne manquera plus que le chargement de modèles 3D mais ça se sera pour plus tard car pour commencer j'ai envie de faire un jeux en 2D iso.
J'ai des bugs par contre encore au niveau du fenêtrage et des évènements avec SFML par contre lorsque j'utilise des sous fenêtres.
Les fenêtres ne répondent plus.
Autre chose, c'est une erreur que j'ai déjà fait aussi, mais évite
avec haveTexture qui est un float. Les float peuvent avoir tendance à prendre des approximations et ton 1 peut vite devenir un .99999999999. Du coup, une solution est d'utiliser un > .9 par exemple. Ou alors utiliser des uint ou quoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part bool b = (haveTexture == 1);
D'ailleurs Il faut mieux éviter d’ailleurs de faire des if niveau shader , ça réduit fortement les performances , ils sont performant uniquement sur les calculs mul/add en grand nombre.
L'erreur vient peut être de là, haveTexture ...
Bonne nouvelle j'ai presque réussi à corrigé tout les bugs le système de combat fonctionne!!!
Il me reste juste un soucis avec l'affichage des textes dans les fenêtres pourtant avant ça marchait bien.
Et j'ai un crash quand je déplace le héro au clavier mais à la souris ça fonctionne.
Bientôt je vais entamer le système de quêtes, ensuite les objets l'inventaire et tout ça et enfin les compétences!
J'espère que lorsque j'aurai un jeux plus complet à montrer je pourrai recruter plus de monde ça serait amusant de créer avec une équipe comme c'était le cas avant que Guillaume Merlini ne m'ai lâché.
J'avais arrêté à cause de tout ces bugs hé bien j'ai bien fais de reprendre.
ODFAEG n'utiliseras plus SFML, car, SFML ne supporte pas ODFAEF, je vais essayé de trouver une lib qui ne bug pas avec ODFAEG.
Ici par exemple dans la classe application pour les event la méthode pollEvent de la classe sf::Window me renvoie un sf::Event keypressed et keyreleased en même temps lorsque j'appuie sur une touche du clavier.
J'en ai parlé au développeur de SFML mais il m'a envoyé chié.
Pour le réseau aussi j'ai des message qui arrive au client et d'autre pas.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager