Ambiera Forum

Discussions, Help and Support.

Ambiera Forum > CopperCube > Programming and Scripting
Lod filter problems

rolevix
Registered User
Quote
2018-03-05 15:53:17

I'm trying to create "Lod Filter" behavior, based on "LodFilter_V1" by pmax.
I'm just need to unhide child node 0, and hide 1,2 when player is near to object what attached this plugin, and unhide 1 when he is average,
etc.



/*
<behavior jsname="behavior_LodLK" description="Lod Filter Lonekin">
<property name="Near" type="int" default="750" />
<property name="Average" type="int" default="800" />
<property name="Far" type="int" default="1800" />
</behavior>
*/

//
behavior_LodLK = function()
{

}

behavior_LodLK.prototype.onAnimate = function(node, timeMs)
{
var roota = ccbGetCurrentNode();
for(var i=0; ii=1; iii=2)
{
var ch0 = ccbGetChildSceneNode(roota, i);
var ch1 = ccbGetChildSceneNode(roota, ii);
var ch2 = ccbGetChildSceneNode(roota, iii);
}
var a = ccbGetSceneNodeProperty(ch0, "Position");
var cam = ccbGetSceneNodeFromName("PLAYER");
var b = ccbGetSceneNodeProperty(cam, "Position");
var distancefloat = Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));

var distanceint = Math.floor(distancefloat);
//print('Distance :'+distanceint);

if(distanceint <= this.Near)
{
ccbSetSceneNodeProperty(ch0, "Visible", true);
ccbSetSceneNodeProperty(ch1, "Visible", false);
ccbSetSceneNodeProperty(ch2, "Visible", false);
}
if(distanceint > this.Average )
{
ccbSetSceneNodeProperty(ch0, "Visible", false);
ccbSetSceneNodeProperty(ch1, "Visible", true);
ccbSetSceneNodeProperty(ch2, "Visible", false);
}
if(distanceint > this.Far)
{
ccbSetSceneNodeProperty(ch0, "Visible", false);
ccbSetSceneNodeProperty(ch1, "Visible", false);
ccbSetSceneNodeProperty(ch2, "Visible", true);
}
}



tim12345
Guest
Quote
2018-03-06 02:55:40

i modified it slighty. maybe it works now?





/*
<behavior jsname="behavior_LodLK" description="Lod Filter Lonekin">
<property name="Near" type="int" default="750" />
<property name="Average" type="int" default="800" />
<property name="Far" type="int" default="1800" />
</behavior>
*/

//
behavior_LodLK = function()
{

}

behavior_LodLK.prototype.onAnimate = function(node, timeMs)
{

var ch0 = ccbGetChildSceneNode(node, 0);
var ch1 = ccbGetChildSceneNode(node, 1);
var ch2 = ccbGetChildSceneNode(node, 2);

var a = ccbGetSceneNodeProperty(ch0, "Position");
var cam = ccbGetSceneNodeFromName("PLAYER");
var b = ccbGetSceneNodeProperty(cam, "Position");
var distancefloat = Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));

var distanceint = Math.floor(distancefloat);
//print('Distance :'+distanceint);

if(distanceint <= this.Near)
{
ccbSetSceneNodeProperty(ch0, "Visible", true);
ccbSetSceneNodeProperty(ch1, "Visible", false);
ccbSetSceneNodeProperty(ch2, "Visible", false);
}
if(distanceint > this.Average )
{
ccbSetSceneNodeProperty(ch0, "Visible", false);
ccbSetSceneNodeProperty(ch1, "Visible", true);
ccbSetSceneNodeProperty(ch2, "Visible", false);
}
if(distanceint > this.Far)
{
ccbSetSceneNodeProperty(ch0, "Visible", false);
ccbSetSceneNodeProperty(ch1, "Visible", false);
ccbSetSceneNodeProperty(ch2, "Visible", true);
}
}






rolevix
Registered User
Quote
2018-03-06 05:21:41

Yeah! Great thanks! But need to replace
var a = ccbGetSceneNodeProperty(ch0, "Position");

to
var a = ccbGetSceneNodeProperty(node, "Position");


and it works!
Thanks! My hero


tim12345
Guest
Quote
2018-03-06 09:15:10

ah yes it wouldn't make much sense to compare the camera position to that...


Create reply:


Posted by: (you are not logged in)


Enter the missing letter in: "I?ternational" (you are not logged in)


Text:

 

  

Possible Codes


Feature Code
Link [url] www.example.com [/url]
Bold [b]bold text[/b]
Image [img]http://www.example.com/image.jpg[/img]
Quote [quote]quoted text[/quote]
Code [code]source code[/code]

Emoticons


   






Copyright© Ambiera e.U. all rights reserved.
Privacy Policy | Terms and Conditions | Imprint | Contact