Jump to content

Problem with serialise for light.range


Dad72
 Share

Recommended Posts

Hello,
 
When one does not inform the property range to all light and that it serializes the scene. you get a number => 1.7976931348623157e+308.
If I information this value "light.range = 1.8"  for example, it works well, the serialized value is correct but not the default value.
 
see line 1 in the console of playground :
 
{"autoClear":true,"clearColor":[0.2,0.2,0.3],"ambientColor":[0,0,0],"gravity":[0,-9.807,0],"lights":[{"name":"light1","id":"light1","tags":null,"type":3,"direction":[0,1,0],"groundColor":[0,0,0],"intensity":0.7,"range":1.7976931348623157e+308,"diffuse":
 
http://www.babylonjs-playground.com/#2EAMX1#3
 
Je pense que le fix serait:
 
this.range = parseFloat(Number.MAX_VALUE);
 
Ou directement mettre une valeur par défaut qui semble être 1.8 à chaque fois quand on arrondit tout sur 1.797...
 
this.range = 1.8;

Link to comment
Share on other sites

No you do not understand.
The bug is in the return value when the serializer light.
 
e+  is the bug in one value number float

1.7976931348623157e+308

 

understand  Number.MAX_VALUE, but parseFloat(Number.MAX_VALUE); This would avoid e+ in a float.

 

If you recharge the scene serialize this (e+) provoke an error

 

@Temechon: ce que je veux dire, c'est que ce e+ dans cette valeur par défaut n'est pas correct quand tu recharge la scene sérialiser. donc si on ajoute un parseFloat()Number.MAX_VALUE (qui existe oui je le sait) ce signe e+ n’apparaît plus et corrige le probleme de sérialisation de scene. le probleme est quand on recharge la scene..

Essaye de recharger ma demo du playground sérialiser, tu verras que cela provoque une erreur de formation json a cause de ce signe e+ dans le nombre float. (une valeur float est attendu et "e+" est un string)

 

ce e+ dans le nombre flottant renvoie une erreur.

Link to comment
Share on other sites

I tried to load your serialized scene: no problem for me...

 

The code is too long and won't let me save it, but it works! 

 

i did this: 

var createScene = function () {    var scene = new BABYLON.Scene(engine);	    BABYLON.SceneLoader.Append(      "",       'data:json_string_here',       scene,       function() {          console.log("finish")      }    );    return scene;};
Link to comment
Share on other sites

I think I understand. The serializeLight() in SceneSerializer.ts does actively store .range in line 35. https://github.com/BabylonJS/Babylon.js/blob/master/src/Tools/babylon.sceneSerializer.ts#L35

 

if you do not specify a range, then the default ends up getting serialized.  The default IS MAX_VALUE.

 

The problem of not being able to reload MAX_VALUE expressed as an actual number could be fixed by only serializing range when it is not equal to MAX_VALUE.  That way nothing is put in the .babylon.  When reloaded, it will get the default the normal way.

Link to comment
Share on other sites

Temechon.  the bug is here: sphere.position.y = 1.19782E+1; I'll put in bold red the problem. I think you do not look at the problem where it is.
 
you to correct the problem adds a result : camera.position.y = sphere.position.y; but sphere.position.y returns a good value, but 1.19782E+1 is not a good value, is not "int", not "float".
 
but if I was recovering after you fix: sphere.position.y = 1.19782E+1;  we have the problem again.
 
this is not a number : 1.19782E+1; but becomes a 'string'
 
So no it does not work if you add this number "1.19782E+1" containing a letter in a number. I do not know how you can make this kind of numbers. (one + 1) does not return 2
 
If you calculate this with a calculator: :  1.5 + 1.3e+1 = ??? (error) You happen to have a result here ? E+ is a number? for me, no, the problem jumps eyes though.
 
Check here on a vector3 and this number with E+
http://www.babylonjs-playground.com/#K46GN#5
 
Je crois que j'allucine, tu te moque de moi temechon, tu me fait une blague, hein c’est ca ? :P  ca ne te saute pas au yeux cette valeur avec ce e+ en plein milieux d'un nombres qui n’est pas un nombre au final et ne peut pas être calculer avec un autre nombre ? Babylon attend un nombre int ou float, mais avec ce E+, ce n’est ni l'un, ni l'autres.

Link to comment
Share on other sites

Le probleme n'est pas la jerome. vous ne comprenez pas je pense . toi tu formate ce nombre dans un console.log. mais quand tu sérialise ta scene tu fait un console log aussi pour formater toutes les valeurs de la scene sérialiser...

 

Vous avez essayer concrètement, je ne pense pas sinon vous verriez l'erreur aussi.

 

Quand tu sérialise une scene avec des lumières, la propriété range a une valeur avec ce e+. cette scene sérialiser enregistrer dans un .babylon, si tu la recharge, ne ce charge pas et dans la console c'est a cause de ce e+ dans un nombre. je ne vous demande pas des formules pour me prouver que ce nombre peut être formater. je dit que quand tu charge un .babylon avec une chaîne dans un nombre ca ne fonctionne pas, le bug est ici.

 

Donc il y a bien un probleme. C 'est pas français ce que je dit là ? 'il y en a bien un bug quand la scene est sérialiser et enregistrer dans un .babylon, puis recharger ensuite. je ne pense pas que vous avez tester. même avec une démo concrète qui montre le bug, vous dites encore que cela n'en est pas un. Mais comment vous faites pour pas comprendre, je m'exprime mal ou vous lisez en diagonal ?

 

quand je sérialise la scene, il y a un bug, ce e+ dans un nombre n’est pas bon. ne cherche pas plus loing que ca ou ailleur. moi je parle juste d'ajouter un parseFloat par exemple pour que ce probleme soit régler quand la scene est sérialiser affin d’éviter d'avoir ce morceau de chaîne dans un nombres.

Link to comment
Share on other sites

Je vient de voir que tu a éditer Jerome. non, ce n’est pas bon.

 

essaye avec ta méthode:

sphere.position.y = 1.19782E+1;

 

maintenant compare avec:

sphere.position.y = 1.197821; Regarde la difference de hauteur quand on part de 0 unity en Y

 

La position de la sphère est a 1 unité virgule 2 en gros. mais avec ce E+ est elle est a 11 unité. Donc cette valeur n’est pas cohérente. De plus quand je charge une scene .babylon avec une valeur de ce genre, j'ai des erreurs et quand je les parse, plus d'erreur.

 

en gros ce qui ce passe:

 

1.19782E+1  == 11 . la valeur n’est plus que considérer comme un float, mais un int et additionne 1 comme une chaîne après le E et rend la variable une chaîne et donne un int 11 au final. La preuve avec ta démo jerome. SI vous voyez de la cohérence, je ne comprend vraiment pas.

 

en plus cours: ca donne (string)"1" + (int)1 = (string)"11". Ce E dans un nombre transforme la variable en string et additionne le string 1 additionner après un int 1 après un + et donne une chaine de caractaire "11" et est traiter par babylon comme un nombre 11. voila pourquoi je doit monter ma camera a 11 unité ors que la sphère devrais être  a 1.2 unité environs.

Link to comment
Share on other sites

Re David, 

 

en JS, quand tu écris un nombre avec E, cela veut dire que tu multiplie par 10 le nombre. 1E+1 = 10, 1E+2 = 100 etc

Ouvre la console debug de ton browser, et tape 1.197E+1: cela fait 11.97. C'est donc un nombre.

Le fait de parser 1.197E+1 va te renvoyer 1.197, ce qui est inexact, vu qu'il s'agit en fait de 11.97 :)

 

As-tu un fichier babylon qui pose le problème que tu décris ? Si oui, peux-tu faire un exemple en le chargeant dans le playground ? 

Je ne pense pas que cela soit la cause du problème que tu décris ici : 

 

 

 

Quand tu sérialise une scene avec des lumières, la propriété range a une valeur avec ce e+. cette scene sérialiser enregistrer dans un .babylon, si tu la recharge, ne ce charge pas et dans la console c'est a cause de ce e+ dans un nombre
Link to comment
Share on other sites

Alors si c’est ca, ok, je ne savais pas que cela faisais office de multiplicateur, mais quand je met un signe plus après une valeur string, j'ai un resultat string. "1"+1 vas donner un "11".

 

Moi ce que je voie c’est que quand je sérialise une scene et que je ne modifie pas la valeur range et que je recharge ma scene enregistrer dans un .babylon, j'ai un bug. mais si je met light.range = 1.8 par exemple, ma scene ce recharge correctement. donc je ne l'invente pas le bug. Il est peut être ailleurs, mais il y en a un.

Link to comment
Share on other sites

Ok, I understood why I was wrong. is that when I save a file after the + E disappears and replaces it with a space which gives this error when I load the scene.

 
So it's my fault and I thought it was the E + sign because not knowing that this serves as a multiplier. I would have learned something more. Maybe if you had me explain this from the beginning, we would not have discussed all this time.
 
You're there put a lot without ever explain this sign.  :(
 
Thanks for help. So the bug was home. but I find this really strange multiplier value.
Link to comment
Share on other sites

Et excuser moi de pas avoir compris. j'ai fait trop d’école buissonnière et disons que j'ai pas été loin dans les études j'ai arrêter en 5 iem, donc j’ai pas vue ces chose là en mathématique.

 

And excuse me for not having understood. I did too school  truancy and say that I have not been away in the studies I stop 5 em year, so I have not seen such thing in mathematics there.

 

:ph34r:

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...