oZone3D.Net Forums
Our Softwares
»
Demoniak3D - French Forums
»
Wish List
»
Container pour objet ?
Username:
1 Hour
1 Day
1 Week
1 Month
Forever
Password:
Home
Help
Search
Quick Search
Advanced Search
[Close]
Login
Register
Pages: [
1
]
« previous
next »
Print
Author
Topic: Container pour objet ? (Read 1456 times)
0 Members and 1 Guest are viewing this topic.
Steph3D
Administrator
Capo Regime
Posts: 325
Container pour objet ?
«
on:
February 14, 2008, 04:40:12 AM »
J'aurais besoin de stocker des infos variables dans un objet, style
Speed = 5;
Force = 20;
etc...
Vouis, il y a les tableaux, mais la c'est pour mes clones variables dans le temps et qui sont donc basé sur un objet de référence, les données sont initialisées au clonage, mais après chaque clone à des données différentes et une durée de vie indéfinie.
Dans C4D, je peux créer des zones de stockage pour les variables propre à chaque objet, style
SetContainer(Mon_Objet, id, valeur);
Pour un truc comme ça
Quote
Nb= HYP_Object.GetNumChildren( "Layer1" );
Index=3; i=0;
while (i<Nb) do
ID = HYP_Object.GetChildByIndex( "Layer1", i );
Live=GetContainer(ID,Index);
if(Live==0) then HYP_Object.RemoveChild( "Layers1",ID); Nb=Nb-1; end
i=i+1;
end
A moins qu'il existe une autre methode de taf aussi efficace ?
Logged
Steph
JeGX
Global Moderator
Capo Bastone
Posts: 1847
Re: Container pour objet ?
«
Reply #1 on:
February 14, 2008, 12:44:52 PM »
le plus simple est de faire quelque chose en LUA pour gérer tes containers:
Code:
function newContainer( object_id, speed, force )
local container = { m_id=object_id, m_speed=speed, m_force=force};
return(container);
end
id = HYP_Object.GetChildByIndex( "Layer1", i );
myContainer = newContainer(id, 5.0, 20.0);
et après tu accèdes directement aux variables membres d'un container:
Code:
local speed = myContainer.m_speed;
Bon ce code serait plus élégant avec une structure plus orienté objet. Dès que la math lib sera dispo, tu pouras t'en inspirer pour coder en objet avec LUA.
Logged
Don't Play, Code or Die!
JeGX's Infamous Lab
|
Demoniak3D Blog:
|
The Geeks Of 3D - Daily 3D Fresh News
Steph3D
Administrator
Capo Regime
Posts: 325
Re: Container pour objet ?
«
Reply #2 on:
February 14, 2008, 05:11:05 PM »
Oki, je vais expérimenter le truc, à 1er vue ça risque quand même d'être lourds comme je disais avec les tableaux, la ta déjà prédéfini à l'avance l'emplacement.
Mais si j'ai des objets de type différents avec chacun une 10e de containers, ça en fait des trucs à prédéfinir. Si en plus je crée des centaines de milliers de clones pendant la session avec une durée de vie courte, vas falloirs nettoyer aussi les tableaux, car la c'est pas très propre.
C'est effectivement plus simple en objet, faudrait certainement définir une class objet avec ses propre containers. Puis faire create ma_classe_objet et destroy ma_classe_objet. Mais en LUA, je sais pas trop comment ça marche, surtout que ça semble pas être un vrai langage objet, mais de la bidouille. Pis faut que je me rappelle comment en programme en objet, j'ai plus fait ça depuis 10ans sur Delphi2
Enfin bon, j'ai déjà fait pas mal de p'tites fonctions, encor un peu, et j'aurais un moteur de jeu.
Pour le moment j'en suis la
http://forum.steph3d.net/index.php/topic,349.msg767.html#msg767
gestion des collisions simplifiées avec le décor, déplacement avancé du véhicule. Maintenant j'attaque le système de tire
Logged
Steph
Steph3D
Administrator
Capo Regime
Posts: 325
Re: Container pour objet ?
«
Reply #3 on:
February 15, 2008, 05:53:56 AM »
Le vraie code pour des chaines d'objets multiple et variable, c'est avec un tableau à deux dimentions
Code:
function SetFireContainer( id, speed, impact )
if( f_container==nil) then f_container = {}; end
f_container[id] = {c_speed=speed,c_impact=impact};
end
pour mémoriser l'objet dans la chaine
Code:
id_objet= HYP_Object.Clone("Roquette");
SetFireContainer(id_objet, speed, impact);
pour recup les données
Code:
ID = HYP_Object.GetChildByIndex( "Layer", i );
local FireSpeed=f_container[ID].c_speed;
local Impact=f_container[ID].c_impact;
Reste qu'un truc à trouver, comment effacé des entrées dans un tableau ? en même temps que l'objet associé, histoire de pas remplir la mémoire pour rien avec un tableau énorme aussi bien rangé que mon bureau à la fin
«
Last Edit: February 15, 2008, 06:32:50 AM by Steph3D
»
Logged
Steph
JeGX
Global Moderator
Capo Bastone
Posts: 1847
Re: Container pour objet ?
«
Reply #4 on:
February 15, 2008, 09:37:07 AM »
cool ta petite video. Dès que tu en as une nouvelle, tiens nous informé.
Souvent pour suuprimer un objet en LUA, il suffit de lui affecter la valeur null. Le garbage collector de lua se chargera de nettoyer la memoire.
Logged
Don't Play, Code or Die!
JeGX's Infamous Lab
|
Demoniak3D Blog:
|
The Geeks Of 3D - Daily 3D Fresh News
Steph3D
Administrator
Capo Regime
Posts: 325
Re: Container pour objet ?
«
Reply #5 on:
February 15, 2008, 11:47:11 AM »
Ok, j'ai netoyé les tableaux comme ça
Code:
f_container[ID]=nil;
Testé avec le gestionnaire des taches, la ram se remplis effectivement moins vitte quand je crée et detruit des clones en rafale, au depar j'etait vitte passé de 50Mo à 300, comme je m'en doutais
Mais meme avec ça, la ram continue à augmenter quand je lance les clones, alors je sais pas si c'est le LUA, ou ton RemoveChild
mais il y a encor des résidus indésirable en memoire
Allé, encor quelques fonctions et optimisations, et ça sera plus un probleme pour faire des gros jeux
tu pourra foutre la paté à microsoft et son XNA
Logged
Steph
JeGX
Global Moderator
Capo Bastone
Posts: 1847
Re: Container pour objet ?
«
Reply #6 on:
February 15, 2008, 02:24:07 PM »
oui c'est nil la valeur pour lua, je confond avec le php
Sinon en LUA, tu as la fonction collectgarbage():
Code:
collectgarbage("collect");
pour nettoyer la memoire
et
Code:
bytes_allocated = collectgarbage("count");
qui te donne l'occupation courante de la memoire par LUA.
Logged
Don't Play, Code or Die!
JeGX's Infamous Lab
|
Demoniak3D Blog:
|
The Geeks Of 3D - Daily 3D Fresh News
Steph3D
Administrator
Capo Regime
Posts: 325
Re: Container pour objet ?
«
Reply #7 on:
February 15, 2008, 09:11:05 PM »
Tiens, essaye mon script, c'est un clonage en rafale ( pis un debut de sprite 3d pour shadow
)
Tu verra vitte, au début ça carbure à 60 img/s, puis doucement les fps vont chuter, et la ram méchamment augmenter
tu dois avoir un problème avec les clones
Code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<hyperion version="1.0">
<scene name="training_scene" display_fps="TRUE" show_ref_grid="TRUE" >
<window_size width="800" height="600" />
<background_color r="0.0" g="0.0" b="0.0" />
</scene>
<camera name="my_camera" navigation_mode="FLY" fov="50.0" >
<position x="0.0" y="50.0" z="150.0" />
</camera>
<light name="my_light" type="OMNI" render="FALSE" >
<position x="0.0" y="100.0" z="100.0" />
<diffuse r="1.0" g="1.0" b="1.0" a="1.0" />
</light>
<gizmo name="Main_Gizmo" render="FALSE" ><position x="0.0" y="100.0" z="0.0" /></gizmo>
<mesh name="my_torus" render="TRUE" shape_type="TORUS" lighting="TRUE"
auto_spin="TRUE" polygon_mode="SOLID" average_normals="TRUE" >
<position x="0.0" y="0.0" z="0.0" />
<torus radius="10.0" vertex_density="10" section_radius="5.0" />
<attach_material name="mat_torus" />
<vertices_color r="1.0" g="1.0" b="1.0" a="1.0" />
<spin_values x="0.0" y="0.0" z="0.0" />
</mesh>
<script name="updateScene" run_mode="EXECUTE_EACH_FRAME" >
<raw_data><![CDATA[
clone_id=HYP_Object.Clone("my_torus");
local _x=math.random(-200.0,200.0);
local _y=-100;
local _z=math.random(-200.0,200.0);
HYP_Object.SetPosition( clone_id, _x, _y, _z);
HYP_Scene.RemoveObject(clone_id);
HYP_Object.AddChild("Main_Gizmo", clone_id );
Nb= HYP_Object.GetNumChildren( "Main_Gizmo"); i=0;
while (i<Nb) do
local ID = HYP_Object.GetChildByIndex( "Main_Gizmo", i );
local _x, _y, _z = HYP_Object.GetPosition( ID );
HYP_Object.SetPosition( ID, _x, _y+2, _z);
if(_y>150) then
HYP_Object.RemoveChild("Main_Gizmo",ID); Nb=Nb-1; end
i=i+1; end
]]></raw_data>
</script>
</hyperion>
Logged
Steph
JeGX
Global Moderator
Capo Bastone
Posts: 1847
Re: Container pour objet ?
«
Reply #8 on:
February 26, 2008, 09:04:38 AM »
Je viens d'ajouter la fonction HYP_Object.Destroy(). Avec une très légère modif de ton code, la demo tourne à 300 FPS en permance sans perte de mémoire... Merci pour avoir souvelé ce pb
Logged
Don't Play, Code or Die!
JeGX's Infamous Lab
|
Demoniak3D Blog:
|
The Geeks Of 3D - Daily 3D Fresh News
Steph3D
Administrator
Capo Regime
Posts: 325
Re: Container pour objet ?
«
Reply #9 on:
February 26, 2008, 09:38:14 AM »
Enorme probleme meme
Cool, on vas enfin pouvoir faire des jeux de shoot, des particules ou des forets en clones sans que ça rame
Logged
Steph
JeGX
Global Moderator
Capo Bastone
Posts: 1847
Re: Container pour objet ?
«
Reply #10 on:
February 26, 2008, 10:06:20 AM »
Bon faut tout de même pas pousser. La gestion de l'instancing est super naze dans Demoniak3D. Je viens de coder du vrai instancing (la demo sera sur mon blog aujourd'hui) et Demoniak3D est à la masse sur ce sujet. Tu pourras cloner des objets dans une limite raisonnable mais c'est tout (genre une foret d'une centaine d'arbres...). Je vais améliorer le support de l'instancing dans Demoniak3D mais un peu plus tard (manque de temps pour le moment).
Logged
Don't Play, Code or Die!
JeGX's Infamous Lab
|
Demoniak3D Blog:
|
The Geeks Of 3D - Daily 3D Fresh News
Steph3D
Administrator
Capo Regime
Posts: 325
Re: Container pour objet ?
«
Reply #11 on:
February 26, 2008, 08:01:22 PM »
Par grave, d'ici à se que je digère bien le code et les shader, ta le temps avant que j'en arrive aux démos serieuse, c'est un boulot monstre tout ça ! Si déjà je peux faire des tires, sans que ça rame au bout de 3 minutes, je peux déjà avancer, pareil pour la recherche de clonage des plantes
Et ça marche comment avec les vertex shaders, si je déforme un objet en vertex shader, et que je le clone une 20e de fois, ça va ramé je suppose ?
Logged
Steph
shadow
Moderator
Capo Regime
Posts: 278
Re: Container pour objet ?
«
Reply #12 on:
February 26, 2008, 08:14:12 PM »
Quote
Et ça marche comment avec les vertex shaders, si je déforme un objet en vertex shader, et que je le clone une 20e de fois, ça va ramé je suppose ?
Non, c'est comme pour les pixel shaders : tout dépend des perfos du shader.
Et comme le vertex shader n'est exécuté que pour les... vertex (wow, je suis fort moi çe soir
), il a beaucoup moins d'impact sur les perfos qu'un pixel shader, à complexité d'algo égale.
Logged
3D, photos panoramiques :
http://www.shadows.fr
Steph3D
Administrator
Capo Regime
Posts: 325
Re: Container pour objet ?
«
Reply #13 on:
February 26, 2008, 08:35:23 PM »
Hum, oui ça dépend, si l'objet et complexe, alors il y a beaucoup de vecteurs, de plus, j'ai l'impression qu'une déformation bouffe bien plus qu'une simple colorisation par vertex :?
J' peu pas dir que mon test de hiegfield soit un modèle de performance par rapport à l'original, et ça serait bien que ça s'exécute pas en permence pour une déformation fixe, ces cons de shader non aucune mémoire. Faut que je regarde se qui se passe quand je stop la fonction par LUA, mon GPU va explosé ? une fracture vers la 4e dimension ?
Bon pour les clones, faut voir si le vertex shader et cloné, ou si ça s'applique pour chaque clone, sais pas se que ça peu donner...
Sinon mon eclairage par vertex serait plus rapide qu'un en fragment ? mais toute maniere, comme ça finit par un remplissage par pixel, donc hors du cas de la simple deformation, je ne pense pas.
Logged
Steph
Pages: [
1
]
Print
« previous
next »
Jump to:
Please select a destination:
-----------------------------
Our Softwares
-----------------------------
=> Demoniak3D - English Forums
===> Beginners
===> Users's Tutorials and Articles
===> Wish List
===> WIP
=====> Beginners
=> Demoniak3D - French Forums
===> Débutants
===> Tutoriels et Articles Utilisateurs
===> Wish List
=====> Whish List: ADDED
===> WIP
=====> Débutants
=> GPU Caps Viewer
=> Benchmarking
===> Other Benchmarks
-----------------------------
Site Forums
-----------------------------
=> oZone3D.Net News
=> General News
=> Members's News and Announcements - English/French
=> Demoscene
=> Le Bar - Discussions générales - French
=> The CatchAll Tavern - English
=> Comments and Feedbacks - English/French
=> G-Truc Creation
-----------------------------
Old Forums
-----------------------------
=> Graphics Cards News
=> Video Games
=> Weekly News
Loading...