Ca a l'air très sympa, un petit exemple peut-être ?
Ca a l'air très sympa, un petit exemple peut-être ?
D'accord. Voici deux exemples : un mesh et un shader :
exemple 1:
On enregistre ce script dans un fichier .mesh.
Code : 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 mesh { element { shape { type triangle; vertex { x 50; y 50; s 0; t 0; } vertex { x 100; y 50; s 1; t 0; } vertex { x 75; y 100; s 0.5; t 1; } } } }
Le mesh est subdivisé en elements, chaque element a son propre gizmo, c'est à dire qu'on peut le positionner et le redimensionner et le tourner librement. de plus, chaque element peut avoir son propre shader.
Maintenenat, voici un shader :
Le principe des shaders est le suivant : on applique plusieures passes sur l'objet à dessiner, autant de passes que de sections pass dans le shader. les paramètres sont, pour la plupart controlables via des fonctions comme le sin, le cos ...
Code : 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 shader { pass { map texture1.jpg minfilter linear_mimap_linear; magfilter linear; blend off; color { r 1; g 0.1; b 0.5; a 1; } } pass { map texture2.jpg minfilter linear_mimap_linear; magfilter linear; blend on one one_minus_src_color; color { r sin 0 2000 0.2 1; g sawtooth 0 2000 0.2 1; b 0.5; a 1; } translate { s sin 0 2000 0 1; t cos 0 2000 0 1; } rotate { angle triangle 0 2000 0 360; } } }
Ceci est loin d'être une explication complète, je le sais, et c'est pourquoi je suis en train de développer une réference pour les shaders et les mesh, pour pouvoir les publier plus tard, quand j'arriverais enfin à :
1- arriver à une version de base de toodee qui marche et qui trace les grands lignes à suivre
2- arriver à créer un site fonctionnel pour pouvoir partager mon experience avec tout le monde, et avoir de l'aide, car franchement, je suis en train de couler sous la quantité immense de travail nécessaire !
En attendant, je suis ouvert à toutes vos suggestions, alors n'hésitez pas à en donner !
Ca à l'air vraiment sympa !
Mais juste une question qui me vient à l'esprit, pourquoi ne pas avoir utilisé du XML pour formatter ton langage de script (en tout cas pour la partie mesh / shaders) ? Ca serait plus "ouvert" vers l'exterieur, par exemple si tu veux que des personnes contribuent en écrivant des scripts d'export, ou des tools pour ton moteur.
Mais ce n'est qu'une suggestion comme ça En tout cas je suis vraiment impressionné par la qualité de ton travail, toutes mes félicitation, rien que pour avoir eu le courage de pousser ton moteur jusque là malgré tout ce que ça a du demander !
Merci beaucoup. C'est vrai que je galère comme un fou et ce n'est pas du tout evident de trouver le temps pour mon sport favorie : la programmation.
Concernant la partie concernant XML, j'y avais pensé au début, et je comptais l'utiliser, mais ça m'a eu l'air trop lourd et trop géneraliste pour mes besoins, de plus, j'essai de limiter les dependances de mon moteur à l'exterieur au strict minimum : si je peux réaliser un truc, et qu'il y'a une biblio qui réalise le même truc, je prefère la réaliser moi même. C'est un peu bête, mais ca aide bcp à apprendre.
De plus, le BOSL (le langage de script que j'ai développé) n'est pas si difficile que ça, et on peut facilement l'apprendre et l'utiliser.
Et tant que j'y pense, il est tout à fait possible de rendre le moteur indépendant du langage de scripting, en passant comme paramètre supplementaire à toute fonction qui est chargé de charger un fichier un objet loader en plus du nom du script ! ce serait un peu merdique à coder mais ça reste possible !
Réinventer la roue, c'est super génialEnvoyé par Modjo
Le plus simple, template avec un paramètre par défaut contenant le loader DOSL ou XML ?
Mauvais nouvelle pour les C++iens ! Le projet est entièrement développé sur Delphi ! Il s'agit d'une DLL qui exporte des interfaces, donc, normalement, ca devrait être possible de l'utiliser à partir du C++ par exemple, mais je n'en suis pas sur.
Sinon, une première version completement fonctionnele de toodee est enfin disponible, et je suis en train d'effectuer des tests la dessus et de la peaufiner.
Il me reste de trouver un hébergeur gratuit et de réaliser un site. Mais le plus difficile est déja fait !
salu modjo tu m'as l'air de bien te prendre la tete =) en gros pour les eclairage on peut dire qu'il ya deux facon principale de les calculer soit calculer les couleur
1. soit calculer une couleur pour chaque polygone ou vertex en utilisant sa normale et en faisant des dot product avec le vecteur lumiere/vertex et la normale et en prennant en compte les parametre des materiaux le dot product a la particularité de donner zero en cas de face perpendiculaire et 1 en cas de vecteur normalisé oposé ce qui donne que les face/vertex ayant une normale face a la lumiere auront la couleur diffuse du material + ambient et ceux qui ont une normale perpendiculaire auront uniquement la couleur ambient. le speculaire sert ensuite a faire un effet de brillance la valeur du specular est plus forte qd le vecteur reflechi lumiere/eye est proche de la normale et le parametre SHININESS de materiaux sert a calculer l'exposant de cette valeur et ca permet d'avoir une tache de lumiere plus ou moins petite a certain endroit
2. soit on peu aussi utiliser une texture pour avoir les pixel qui sont entre les vertex soient en utilisant l'envmap ou autre
le tout etant d'avoir une variation de la couleur des pixel selon l'orientation des faces par raport a la/les lumiere
pour l'architecture general je pense le mieux est d'abbor d'avoir une librairie de math vecteur/matrice assez solide etant donné que la plupart des effets ne sont en fait que des math et physics vectoriels pour calculer des couleur ou uv que ce soit pour de la refraction/reflection/lumiere et des bonnes classes de vecteur/uv qu'on peut utiliser pour avoir des uv, ou des couleur en fonction d'autre vecteur c'est ce qu'il faut pour reussir la plupart des effet et avoir des rendu 'realistes'
et au fait les dll ne ralentisse pas l'execution le code des dll etant chargé dans l'espace du process qd l'exe est chargé ca peut ralentir un poil le lancement parce qu'il faut charger les dll en memoire et resoudre les symbole de l'exe principale mais une fois ceci fait l'execution n'est pas plus lente sauf peut etre si on prend en compte le cache du cpu qui ne doit pas etre optimisé bien parcque les differentes fonction on plus de chances d'etre eloignées en memoire =)
j'ajouterai aussi a cela que ce qui bride bien souvent la vitesse du rendu est effectivement la vitesse des bus pci/agp et pour avoir les meilleur performance il vaut mieux eviter un maxium les transfer entre la ram et la carte graphique et aligner un maximum les donnée envoyée et utiliser de preference des vertex buffer pour stocker les vertex dans la carte graphique une seule fois et sinon utiliser des pointer aligné sur 32/64bit pour transfer des donnée via glVertex*v(); ou utiliser des array et drawelement ca diminue le nombre de requete envoyée a la carte et augmente donc la bande passante disponible pour les vertex et autre donnée
Merci les gars de vous interresser toujours à ce topic malgré son age et la frequence médiocre de mes réponses.
Pour ce qui est des transferts RAM<-->GPU, notamment pour la géometrie, je me suis en effet penché ladessus, et j'ai remplacé les pauvres glVertex3f par des glVertexPointer etc..., mais sans utiliser les VBO : Je ne sais pas pourquoi, mais sur ma carte ATI Radeon 9200 les VBO font chuter les performances d'une façon drastique, allez donc comprendre pourquoi !
Pour ce qui est de l'éclairage, je l'ai enfin implanté dans mon moteur. Bon, je vais essayer d'en expliquer le principe. Mais avant ça, je vais revenir un peu sur les meshes et les shaders dans toodee.
Un mesh est une classe qui permet de stocker la géometrie des objets.
Les shaders servent à controler la manière dont une surface est remplie.
un objet dans toodee est un couple (mesh, shader) complété par un gizmo qui sert à controler sa position, sa rotation, etc ...
à part les mesh, tout est dynamique dans toodee, par exemple une couleur dans un shader peut varier en sinus au cours du temps, de même, la position x par exemple peut varier selon une autre fonction, bref, presque tout est dynamique.
J'ai trouvé que la manière la plus simple et élegante d'integrer l'éclairage dans mon moteur est d'utiliser la puissance des meshs et des shaders.
Une lumière est don similaire à un objet, sauf pour ce qui est de l'utilisation.
Le rendu d'une image se déroule comme ceci :
- on part d'une scène vide dont la couleur est la lumière ambiante (Ra, Ga, Ba)
- on dessine les lumières (dessiner le mesh en le remplissant avec son shader associé) avec un blend activé GL_ONE, GL_ONE pour additionner les contributions des lumières.
- effectuer un glReadPixels vers une texture LMAP (c'est juste un nom, pas un terme technique ;-) )
- commencer une nouvelle scene avec une couleur de fond.
- dessiner les objets(comme les lights)
- appliquer la texture LMAP sur la nouvelle scène avec un blend GL_ZERO, GL_SRC_COLOR
- c'est tout !
Et les résultats sont tout simplement magnifiques ! époustouflantes !
Bon, trève de vanité.
C'est vrai que ca peut avoir l'air leger et non réaliste, vu que l'intensité ne depend pas de al géomètrie, mais c'est un moteur 2D ! une simple texture en niveaux de gris multiplié par une couleur dynamique donne des résultats très probantes ! Dommage que je ne peux pas vous montrer des screenshots ! (Si quelqu'un peut m'aider ...) !
De plus, c'est trés performant, avec une scène de 12000 faces et plus de 100 lumières (oui, c'est bien un cent), je suis dans les 180fps, et c'est du vrai éclairage dynamique !
des suggestions ? des remarques ?
Quelques screenshots seraient bien, je vois que tu dis que tu ne peux pas, comment cela se fait? N'as-tu pas un endroit sur le net pour les créer? Il y forcément quelque part où tu peux les mettre, même un hébergeur gratuit...Envoyé par Modjo
Jc
Oups ! quel lapsus, je corrige :
JE NE PEUX PAS, c'est pas je ne VEUX pas !
Désolé!
Moi j'ai lu peux, mais alors pour quelle raison? Parce que tu n'as nul part où les mettre?Envoyé par Modjo
http://weblogs.about.com/gi/dynamic/...ageshack.us%2FEnvoyé par Modjo
Mets ta photo, click host it! et ils te donneront un lien... Je ne sais pas combien de temps cela restera là mais ce sera déjà ça...
Jc
Merci. Je vais essayer la prochaine fois. Et si ça marche ... ce serait vraiment cool !
PS : Je me connecte pas depuis mon PC, en fait il s'agit d'un PC à ma fac, donc, ca peut prendre du temps ...
Le même en plus direct : http://imageshack.us/http://weblogs.about.com/gi/dynamic/offsite.htm?zi=1/XJ&sdn=weblogs&zu=http%3A%2F%2Fwww.imageshack.us%2F
Et sinon, tu n'as pas une petite démo ?
Bon,c'est pas très clair,mais ça presente quelque uns des capabilités de toodee : la console au dessus est un plugin.
En bas à droite, un écran radar qui est possible grace au rendu vers une texture.
Enfin, Il y'a l'eclairage dynamique et les animations des objets, mais il faut une démo pour les voir !
Ahhh, maintenant on voit de quoi tu parles =>
Faudrait peut-être rendre le jeu plus clair comme tu le dis mais cela fait aussi un look nocturne...
Pas mal pas mal!
Jc
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