# Position Models with another as reference (moving from Google Earth to Cesiumjs)

**URL:** <https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493>\
**Category:** CesiumJS\
**Created:** [September 16, 2014, 11:26am UTC](https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493 "2014-09-16T11:26:12Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![andre.santos](https://avatars.discourse-cdn.com/v4/letter/a/d6d6ee/32.png) [@andre.santos](https://community.cesium.com/u/andre.santos)\
**Post date:** [September 16, 2014, 11:26am UTC](https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493/1 "2014-09-16T11:26:12Z")

</div>

On my attempt to port my project (youbeq) from Google Earth to Cesiumjs I've encountered some difficulties that are preventing me from moving forward.

You can check out a part of what is already running on Cesium: [http://dev.youbeq.com/Apps/Sandcastle/gallery/FollowModel.html](http://dev.youbeq.com/Apps/Sandcastle/gallery/FollowModel.html)

If you check that example you can see that I have a vehicle you can control around the world with different components "attached" to it, like the wheels.  
Unfortunately I can't seem to find the correct way to position them according to the position of the vehicle (lat, lng, alt, heading, tilt, roll), and in the example, since the wheels are spinning, the roll affects the other transformations in a bad way.

What I was doing in GE was constructing a Quaternion with the heading, tilt and roll of the vehicle:

// code snippet -----\>

// helper object ----\>  
Quaternion = function (x, y, z, w) {  
&nbsp;&nbsp;&nbsp;&nbsp;this.x = x;  
&nbsp;&nbsp;&nbsp;&nbsp;this.y = y;  
&nbsp;&nbsp;&nbsp;&nbsp;this.z = z;  
&nbsp;&nbsp;&nbsp;&nbsp;this.w = w;

&nbsp;&nbsp;&nbsp;&nbsp;this.mul = function (q) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var \_x = this.w \* q.x + this.x \* q.w + this.y \* q.z - this.z \* q.y;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var \_y = this.w \* q.y + this.y \* q.w + this.z \* q.x - this.x \* q.z;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var \_z = this.w \* q.z + this.z \* q.w + this.x \* q.y - this.y \* q.x;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var \_w = this.w \* q.w - this.x \* q.x - this.y \* q.y - this.z \* q.z;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Quaternion(\_x, \_y, \_z, \_w)  
&nbsp;&nbsp;&nbsp;&nbsp;};

&nbsp;&nbsp;&nbsp;&nbsp;this.get\_eulerAngles = function () {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var h;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var p;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var b;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var sp = -2 \* (this.z \* this.y - this.w \* this.x);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Math.abs(sp) \> .998) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = Math.PI / 2 \* sp;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = Math.atan2(-this.x \* this.y + this.w \* this.z, .5 - this.z \* this.z - this.y \* this.y);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b = 0  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = Math.asin(sp);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h = Math.atan2(this.x \* this.y + this.w \* this.z, .5 - this.x \* this.x - this.z \* this.z);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b = Math.atan2(this.x \* this.z + this.w \* this.y, .5 - this.x \* this.x - this.y \* this.y)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return EulerAngles(h, p, b)  
&nbsp;&nbsp;&nbsp;&nbsp;};  
};  
Quaternion.euler = function (heading, pitch, bank) {  
&nbsp;&nbsp;&nbsp;&nbsp;var hq = Quaternion.angleAxis(heading, new Vector3(0, 0, 1));  
&nbsp;&nbsp;&nbsp;&nbsp;var pq = Quaternion.angleAxis(pitch, new Vector3(1, 0, 0));  
&nbsp;&nbsp;&nbsp;&nbsp;var bq = Quaternion.angleAxis(bank, new Vector3(0, 1, 0));  
&nbsp;&nbsp;&nbsp;&nbsp;return bq.mul(pq).mul(hq)  
};  
Quaternion.angleAxis = function (radian, axis) {  
&nbsp;&nbsp;&nbsp;&nbsp;var h = radian / 2;  
&nbsp;&nbsp;&nbsp;&nbsp;var s = Math.sin(h);  
&nbsp;&nbsp;&nbsp;&nbsp;return Quaternion(s \* axis.x, s \* axis.y, s \* axis.z, Math.cos(h))  
};  
//\<----- helper object

var qVehicle = Quaternion.euler(heading, tilt, roll);  
//\<----- code snippet

Then I would find the new LatLngAlt of that component according to the offset in the xyz axis and the orientation multiplying the heading, tilt and roll of the component with the Quaternion of the vehicle:

// code snippet -----\>

//helper function ----\>  
getLatLngAlt = function (x, y, z) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var p = new Vector3(x, y, z);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var m = new Matrix3x3;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.setRotationY(-vehicleRoll.position); // vehicleRoll contains the current roll value for the vehicle  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.multiply(m);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.setRotationX(-vehicleTilt.position); // vehicleTilt contains the current tilt value for the vehicle  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.multiply(m);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var angle = -Math.atan2(p.y, p.x) + 1.570796326794897;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var length = lengthVector(p.x, p.y); // returns the vector length  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var latLng = vehiclePosition.createOffset(getVehicleHeading() + angle, length); // vehiclePosition contains the current LatLngAlt of the vehicle. CreateOffset will compute the new location according to the direction (heading) and distance (length)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var alt = 0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alt = vehicleAltitude.position + p.z; // vehicleAltitude contains the current altitude value for the vehicle

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new LatLngAlt(latLng.lat(), latLng.lng(), alt);  
};  
//\<------- helper function

var latLngAlt = getLatLngAlt(x, y, z);

var q1 = Quaternion.angleAxis(wheelHeading, new Math3D.geometry.Vector3(0, 0, 1));  
var q2 = Quaternion.angleAxis(wheelTilt+wheelSpeedForward, new Vector3(1, 0, 0));  
var e = q2.mul(q1).mul(qVehicle).get\_eulerAngles();

var pitch = e.pitch;  
var bank = e.bank;  
var heading = e.heading;  
//\<----- code snippet

With this I could position the components and they kept "attached" to the main body. In the Google Earth Plugin everything works by setting LatLngAlt and the heading, tilt and roll.  
In Cesium I attempted to accomplish the same with no success, when I try to generate a rotation matrix from the computed Quaternion and apply it to the Model Matrix all hell breaks lose:

// code snippet -----\>

//helper function ----\>  
var euler = function (heading, pitch, bank) {  
&nbsp;&nbsp;&nbsp;&nbsp;var hq = new Cesium.Quaternion();  
&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Quaternion.fromAxisAngle(new Cesium.Cartesian3(0, 0, 1), heading, hq);  
&nbsp;&nbsp;&nbsp;&nbsp;var pq = new Cesium.Quaternion();  
&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Quaternion.fromAxisAngle(new Cesium.Cartesian3(1, 0, 0), pitch, pq);  
&nbsp;&nbsp;&nbsp;&nbsp;var bq = new Cesium.Quaternion();  
&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Quaternion.fromAxisAngle(new Cesium.Cartesian3(0, 1, 0), bank, bq);

&nbsp;&nbsp;&nbsp;&nbsp;var bpq = new Cesium.Quaternion();  
&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Quaternion.multiply(bq, pq, bpq);  
&nbsp;&nbsp;&nbsp;&nbsp;var bphq = new Cesium.Quaternion();  
&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Quaternion.multiply(bpq, hq, bphq);  
&nbsp;&nbsp;&nbsp;&nbsp;return bphq;  
};  
//\<------- helper function

var qVehicle = euler(heading, tilt, roll);

var q1 = new Cesium.Quaternion();  
Cesium.Quaternion.fromAxisAngle(new Cesium.Cartesian3(0, 0, 1), wheelHeading, q1);  
var q2 = new Cesium.Quaternion();  
Cesium.Quaternion.fromAxisAngle(new Cesium.Cartesian3(1, 0, 0), wheelTilt+wheelSpeedForward, q2);  
var q21 = new Cesium.Quaternion();  
Cesium.Quaternion.multiply(q2, q1, q21);  
var q21v = new Cesium.Quaternion();  
Cesium.Quaternion.multiply(q21, qVehicle, q21v);

var currentTranslation = new Cesium.Cartesian3();  
var position = Cesium.Cartesian3.fromDegrees(lng, lat, alt, scene.globe.ellipsoid, new Cesium.Cartesian3());  
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);  
Cesium.Matrix4.getTranslation(modelMatrix, currentTranslation);

var currentRotation = new Cesium.Matrix3.fromQuaternion(q21v);

Cesium.Matrix4.fromRotationTranslation(  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRotation,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentTranslation,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.modelMatrix  
);  
//\<----- code snippet

and if I apply heading, tilt and roll to the current model matrix rotation I have the issue of the roll messing with the heading and tilt:

// code snippet -----\>

//helper function ----\>  
var rotateMatrix = function(mat, h, t, r){  
&nbsp;&nbsp;&nbsp;&nbsp;var mh, mt;

&nbsp;&nbsp;&nbsp;&nbsp;// Heading  
&nbsp;&nbsp;&nbsp;&nbsp;if (h === 0) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mh = Cesium.Matrix3.IDENTITY;  
&nbsp;&nbsp;&nbsp;&nbsp;} else {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mh = Cesium.Matrix3.fromRotationZ(-h);  
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;// Tilt  
&nbsp;&nbsp;&nbsp;&nbsp;if (t !== 0) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt = Cesium.Matrix3.fromRotationX(-t);  
&nbsp;&nbsp;&nbsp;&nbsp;} else {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TBD  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt = Cesium.Matrix3.IDENTITY;  
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;// Taken from [https://github.com/AnalyticalGraphicsInc/cesium/issues/1133](https://github.com/AnalyticalGraphicsInc/cesium/issues/1133)  
&nbsp;&nbsp;&nbsp;&nbsp;// perform these two rotations so that we can determine the direction vector for roll  
&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.multiply(mat, mh, mat);  
&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.multiply(mat, mt, mat);

&nbsp;&nbsp;&nbsp;&nbsp;// Roll (-180 \< 0 \< 180)  
&nbsp;&nbsp;&nbsp;&nbsp;// Roll around the calculated direction axis  
&nbsp;&nbsp;&nbsp;&nbsp;if (r !== 0) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var right = new Cesium.Cartesian3();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.getColumn(mat, 0, right);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var up = new Cesium.Cartesian3();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.getColumn(mat, 1, up);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var direction = new Cesium.Cartesian3();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.getColumn(mat, 2, direction);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var rad = r;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var mr = Cesium.Matrix3.fromQuaternion(Cesium.Quaternion.fromAxisAngle(direction, rad));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.multiplyByVector(mr, right, right);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.multiplyByVector(mr, up, up);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.multiplyByVector(mr, direction, direction);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.setColumn(mat, 0, right, mat);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.setColumn(mat, 1, up, mat);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cesium.Matrix3.setColumn(mat, 2, direction, mat);  
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;return mat;  
};  
//\<------- helper function

var currentTranslation = new Cesium.Cartesian3();  
var position = Cesium.Cartesian3.fromDegrees(lng, lat, alt, scene.globe.ellipsoid, new Cesium.Cartesian3());  
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);  
Cesium.Matrix4.getTranslation(modelMatrix, currentTranslation);

var currentRotation = new Cesium.Matrix3();  
Cesium.Matrix4.getRotation(initialModelMatrix, currentRotation);

// Apply rotation to model  
currentRotation = rotateMatrix(currentRotation, heading, tilt, roll);

Cesium.Matrix4.fromRotationTranslation(  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRotation,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentTranslation,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.modelMatrix  
);  
//\<----- code snippet

If anyone can give me some help in finding the correct way to accomplish this type of movement it would be greatly appreciated.

---

<div class="post-metadata">

**Author:** ![Dan\_Bagnell](https://avatars.discourse-cdn.com/v4/letter/d/ba9def/32.png) [@Dan\_Bagnell](https://community.cesium.com/u/Dan_Bagnell)\
**Post date:** [September 16, 2014, 8:55pm UTC](https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493/2 "2014-09-16T20:55:46Z")

</div>

Is your model a hierarchy of meshes? If it is, like the sample ground vehicle in the Sandcastle, you can change the individual model matrices of the nodes of the model. The model will do the work of making sure everything is placed correctly within the hierarchy when it updates before the next render.

I inserted a working Sandcastle example below that rotates and turns the wheels. Use the ‘w’/‘s’ keys to increase/decrease the speed. Use the ‘a’/‘d’ keys to turn the wheels left and right.

In the onTick event, I update the quaternions used to rotate/turn the wheels, get the nodes of the model for the wheels, and set the model matrices using the quaternions, existing translation and no scale.

Code sample:

 Cesium Demo @import url(../templates/bucket.css);

# Loading...

---

<div class="post-metadata">

**Author:** ![andre.santos](https://avatars.discourse-cdn.com/v4/letter/a/d6d6ee/32.png) [@andre.santos](https://community.cesium.com/u/andre.santos)\
**Post date:** [September 17, 2014, 5:18pm UTC](https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493/3 "2014-09-17T17:18:59Z")

</div>

No, they are actually different models that I position on each tick. Unfortunately in GE using that kind of approach (hierarchy of meshes) wouldn't help because there is none of the magic that Cesium has.

But your approach works and makes sense to me so I'm gonna adapt my code. Thanks for the help!

By the way, is there a way to hide those nodes? Let's say I have the landing gear of an airplane, when we take off they retract and are inside the model so they don't need to be rendered.

Even though I'm going to use your solution there may be a need to position a model with another as a reference, the first not being part of the hierarchy of meshes of the second, how would I go about finding the right translation and orientation?

Thanks again for your help.

Terça-feira, 16 de Setembro de 2014 12:26:12 UTC+1, [andre....@inovmapping.com](mailto:andre....@inovmapping.com) escreveu:

---

<div class="post-metadata">

**Author:** ![Dan\_Bagnell](https://avatars.discourse-cdn.com/v4/letter/d/ba9def/32.png) [@Dan\_Bagnell](https://community.cesium.com/u/Dan_Bagnell)\
**Post date:** [September 18, 2014, 4:45pm UTC](https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493/4 "2014-09-18T16:45:57Z")

</div>

There is no way to hide only the nodes of a model. I submitted issue [#2135](https://github.com/AnalyticalGraphicsInc/cesium/issues/2135) to add the feature.

To position one model with another as a reference, you can multiply it by the reference model’s model-matrix. For example, something like:

var translationOrientation = Cesium.Matrix4.fromTranslationQuaternionRotationScale(translation, quaternion, scale);

var modelMatrix = Cesium.Matrix4.multiply(referenceModel.modelMatrix, translationOrientation, new Cesium.Matrix4());

var model = Cesium.Model.fromGltf({

url : ‘/path/to/model’,

modelMatrix : modelMatrix

});

---

<div class="post-metadata">

**Author:** ![andre.santos](https://avatars.discourse-cdn.com/v4/letter/a/d6d6ee/32.png) [@andre.santos](https://community.cesium.com/u/andre.santos)\
**Post date:** [September 18, 2014, 5:30pm UTC](https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493/5 "2014-09-18T17:30:34Z")

</div>

Cool, thanks for that.  
That makes sense, a solution along those lines came to mind after I asked that.

Thanks for help.

Quinta-feira, 18 de Setembro de 2014 17:45:57 UTC+1, Daniel Bagnell escreveu:

---

<div class="post-metadata">

**Author:** ![patrick](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/patrick/32/2045_2.png) [@patrick](https://community.cesium.com/u/patrick)\
**Post date:** [December 26, 2014, 11:35pm UTC](https://community.cesium.com/t/position-models-with-another-as-reference-moving-from-google-earth-to-cesiumjs/1493/6 "2014-12-26T23:35:04Z")

</div>

Andre,

We just added per-node show/hide in [#2352](https://github.com/AnalyticalGraphicsInc/cesium/pull/2352). This will most likely make Cesium 1.5 at the start of January. Feel free to use the branch in the meantime. Let me know if you have any issues with this in youbeQ.

Patrick
