# Why change primitive ellipsoid's position failing?

**URL:** <https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023>\
**Category:** CesiumJS\
**Created:** [May 9, 2024, 3:01am UTC](https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023 "2024-05-09T03:01:40Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![KrazyPhish](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/krazyphish/32/23439_2.png) [@KrazyPhish](https://community.cesium.com/u/KrazyPhish)\
**Post date:** [May 9, 2024, 3:01am UTC](https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023/1 "2024-05-09T03:01:40Z")

</div>

I used EllipsoidGeometry and EllipsoidOutlineGeometry to create ellipsoids with outline like Entity did. I found that when using primitve way to do this, the only way to change the ellipsoid’s position is giving a modelMatrix value to it. however, this dosn’t work. I debuged and found that the ellipsoid’s modelMatrix changed when it is rendered, different to it’s initial value, but appears at the right position, so even I use the same modelMatrix (the initial value) of it, to change it’s position, it won’t work (it not stay, appears at another place). Why this would happen, does cesium do some other things before rendering a primitive ellipsoid? This behaves different to models, when changing model’s matrix, it’s position changes correctly.

---

<div class="post-metadata">

**Author:** ![KrazyPhish](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/krazyphish/32/23439_2.png) [@KrazyPhish](https://community.cesium.com/u/KrazyPhish)\
**Post date:** [May 9, 2024, 3:32am UTC](https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023/2 "2024-05-09T03:32:37Z")

</div>

the version of the cesium that I using is 1.116

---

<div class="post-metadata">

**Author:** ![ZhefengJin](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/zhefengjin/32/11504_2.png) [@ZhefengJin](https://community.cesium.com/u/ZhefengJin)\
**Post date:** [May 9, 2024, 8:32am UTC](https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023/3 "2024-05-09T08:32:07Z")

</div>

please share code as Sandcastle

---

<div class="post-metadata">

**Author:** ![KrazyPhish](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/krazyphish/32/23439_2.png) [@KrazyPhish](https://community.cesium.com/u/KrazyPhish)\
**Post date:** [May 9, 2024, 9:19am UTC](https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023/5 "2024-05-09T09:19:35Z")

</div>

const viewer = new Cesium.Viewer(“cesiumContainer”);

const collection = new Cesium.PrimitiveCollection();

const radii = new Cesium.Cartesian3(30000, 15000, 10000);  
const position = Cesium.Cartesian3.fromDegrees(104, 31, 50000);  
const hpr = Cesium.HeadingPitchRoll.fromDegrees(0, 0, 0);  
const modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, hpr);

const outline = new Cesium.GeometryInstance({  
id: “\_outline”,  
modelMatrix,  
geometry: new Cesium.EllipsoidOutlineGeometry({  
radii,  
stackPartitions: 16,  
slicePartitions: 8,  
}),  
attributes: {  
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUAMARINE.withAlpha(0.5)),  
},  
});

const instance = new Cesium.GeometryInstance({  
id: “instance”,  
modelMatrix,  
geometry: new Cesium.EllipsoidGeometry({  
radii,  
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX\_FORMAT,  
}),  
});

const instancePrimitive = new Cesium.Primitive({  
asynchronous: false,  
geometryInstances: instance,  
appearance: new Cesium.EllipsoidSurfaceAppearance({  
aboveGround: false,  
material: Cesium.Material.fromType(“Color”, {  
color: Cesium.Color.AQUAMARINE.withAlpha(0.25),  
}),  
}),  
});

const outlinePrimitive = new Cesium.Primitive({  
asynchronous: false,  
geometryInstances: outline,  
appearance: new Cesium.PerInstanceColorAppearance({  
flat: true,  
renderState: {  
lineWidth: 1,  
},  
}),  
});

collection.add(instancePrimitive);  
collection.add(outlinePrimitive);  
viewer.scene.primitives.add(collection);  
viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(104, 31, 150000) });

setTimeout(() =\> {  
//use the initial modelMatrix,but can’t stay its position  
instancePrimitive.modelMatrix = modelMatrix;  
outlinePrimitive.modelMatrix = modelMatrix;  
viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(90, 61, 7000000) });  
}, 10000);

//paste these code to [Cesium Sandcastle](https://sandcastle.cesium.com/index.html?label=All), then you can see the whole situation

---

<div class="post-metadata">

**Author:** ![ZhefengJin](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/zhefengjin/32/11504_2.png) [@ZhefengJin](https://community.cesium.com/u/ZhefengJin)\
**Post date:** [May 9, 2024, 9:25pm UTC](https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023/6 "2024-05-09T21:25:25Z")

</div>

A GeometryInstance can have a modelMatrix. Let it be G.  
A Primitive can also have a modelMatrix. Let it be P.  
The primitive is finally rendered using multiplied matrix with G and P.  
In you code  
You set G. Let it be G0  
You did not set P. so P will be the Idenity matrix. let it be I  
At setTimeout you set P as G0.  
So the primitive is rendered with the matrix, G0\*G0.

See this [Sandcastle](https://sandcastle.cesium.com/index.html#c=tVZtb9owEP4rFp+CFBlY126jFA11bTdprF3Lun1AqkxyNFYdO7IdKKv477u8gRPo1mmahQS277mX5853BEoaSxYclqDJCZGwJKdgeBrT2/zMm7aCfH+qpGVcgp622sdTOZVBjgyUEBBYrmQdfaV5zC1fwOlGwHNxmoWc1yGnTFv8xeSBd9DF5ZPeYfGV7TJwAU2U4aXBHSSdaxV/gHsNYLxe97VPDno+OawriBK9xX4E9ETeX3EbRNfoa00DGs8+W2isQhBjZjV/3KqYaCbNXOnY0KihbaLO+SOE55rF4FWO+5kHLhkqtQKprdNxASoGq1efUILJALynqSS4eNgn09ZdiZm2/ExPdnFfAvquljMheGIUDy8L+UprpS1beS787R7tBQ9XyGnuremT3pF7K3gA7u3b4m7dLoWYRXpmKWakTxwrWClK9zcpy3bNEEcVMk9CLuK58nT09dtoPLr+9OWMLrmNRiKJmNelh+126cNUrl1iean4b5itMC9m9iWULgAr9PEca4TZ/o6Gm1TPGYafJMB0Zpvenl1Pzn7cnV9ej0eTit9ngts8tWdeYOUXMysZRFpJlWJm5kwY8OvxVYTgdaW8yunGtf0c7ETgksFmagEXWqUyrNvNFhICmjOxYWVcHuQ1MFklgC0ozz4mxK2nZ2rquRp5ddjeYtftRs0679pv0Fw+tP/Ccqn79yRfga4geYT7SZ6LrLKsTl1yNcgQ9I1FSvtN7jLD33loI3zfDjMvI6bq6ZSFobdTiEW/rMk0WcxEiqlDTQASaFLdmFx+C3ckA+yimtG5WE2U90RCMJZLlgn1XzoKesUsIGUkBuyEx4DeeV6bnAwrkjodqZZkyYUgUuGUi5i8B2Ij2EyfsmU0Q6f1CeHsjgtEk4g/Av459nc4wo4w9DfdrhP72pmrLb81MHYlYFgVwnseJ0pbkmrhUdqxECdYX2A6szR4AEsDY9qlf4OOCx2EfIGN9GTP3wYSCGYM3sxTIW74T+yww0EH5XegQuVT9BK7pmCrTCzqDT8Xh5TSQQe3+5FWKTFjuqH5Fw)

---

<div class="post-metadata">

**Author:** ![KrazyPhish](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/krazyphish/32/23439_2.png) [@KrazyPhish](https://community.cesium.com/u/KrazyPhish)\
**Post date:** [May 10, 2024, 1:46am UTC](https://community.cesium.com/t/why-change-primitive-ellipsoids-position-failing/32023/7 "2024-05-10T01:46:49Z")

</div>

Got it, I seemed forget about this, the primitive’s modelMatrix rendering, thanks anyway, this is really helpful.
