# How to get primitive orientation?

**URL:** <https://community.cesium.com/t/how-to-get-primitive-orientation/19993>\
**Category:** CesiumJS\
**Created:** [August 17, 2022, 4:32am UTC](https://community.cesium.com/t/how-to-get-primitive-orientation/19993 "2022-08-17T04:32:58Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![steven11329](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/steven11329/32/7088_2.png) [@steven11329](https://community.cesium.com/u/steven11329)\
**Post date:** [August 17, 2022, 4:32am UTC](https://community.cesium.com/t/how-to-get-primitive-orientation/19993/1 "2022-08-17T04:32:58Z")

</div>

Hi.

I want to get primitive’s orientation and transform to Heading, Pitch, Roll.

```auto
const tileset = viewer.scene.primitives.add(
      new Cesium.Cesium3DTileset({
        url: Cesium.IonResource.fromAssetId(933228),
      }),
    );

// What I need to do next

```

---

<div class="post-metadata">

**Author:** ![Gabby\_Getz](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/gabby_getz/32/7838_2.png) [@Gabby\_Getz](https://community.cesium.com/u/Gabby_Getz)\
**Post date:** [August 18, 2022, 7:07pm UTC](https://community.cesium.com/t/how-to-get-primitive-orientation/19993/2 "2022-08-18T19:07:16Z")

</div>

Hi there,

3D tilesets in particular have a [`modelMatrix`](https://cesium.com/learn/cesiumjs/ref-doc/Cesium3DTileset.html?classFilter=Cesium3dT#modelMatrix) property which describes the transformation. A bit verbose, but you can turn this into `HeadingPitchRoll` like so:

```nohighlight
const rotation = Cesium.Matrix4.getMatrix3(modelMatrix, new Cesium.Matrix3());
const quaternion = Cesium.Quaternion.fromRotationMatrix(rotation);
const hpr = Cesium.HeadingPitchRoll.fromQuaternion(quaternion);

```

---

<div class="post-metadata">

**Author:** ![steven11329](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/steven11329/32/7088_2.png) [@steven11329](https://community.cesium.com/u/steven11329)\
**Post date:** [August 19, 2022, 2:14am UTC](https://community.cesium.com/t/how-to-get-primitive-orientation/19993/3 "2022-08-19T02:14:30Z")

</div>

> [@steven11329](#):
>
> `933228`

Hi Gabby\_Getz

This is my 3d tile in Cesium Ion

 ![model](https://global.discourse-cdn.com/cesium/original/3X/d/3/d3decc63b84d85cbbc9e5607b4be5d6def267c12.jpeg)  
This model heading is 90 degree

I follow your example and get this result

```auto
    const viewer = new Cesium.Viewer('cesium-viewer');
    const tileset = viewer.scene.primitives.add(
      new Cesium.Cesium3DTileset({
        url: Cesium.IonResource.fromAssetId(933228),
      }),
    );
    const rotation = Cesium.Matrix4.getMatrix3(
      tileset.modelMatrix,
      new Cesium.Matrix3(),
    );
    const quaternion = Cesium.Quaternion.fromRotationMatrix(rotation);
    const hpr = Cesium.HeadingPitchRoll.fromQuaternion(quaternion);

    console.log('modelMatrix', tileset.modelMatrix);
    /* Matrix4
     [
         1, 0, 0, 0
         0, 1, 0, 0
         0, 0, 1, 0
         0, 0, 0, 1
     ]
    */
    console.log('hpr', hpr);
    // HeadingPitchRoll {heading: -0, pitch: -0, roll: 0}

```

---

<div class="post-metadata">

**Author:** ![janine](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/janine/32/5135_2.png) [@janine](https://community.cesium.com/u/janine)\
**Post date:** [August 23, 2022, 5:40pm UTC](https://community.cesium.com/t/how-to-get-primitive-orientation/19993/4 "2022-08-23T17:40:58Z")

</div>

Hi @steven11329,

To clarify: do you want to get the orientation of the models within the tileset? I’m afraid you can’t access individual models through the public API, but you _can_ find the transform of the tile that contains the geometry.

For example, if the root tile of the tileset has geometry, you can fetch it via [`tileset.root`](https://cesium.com/learn/cesiumjs/ref-doc/Cesium3DTileset.html#root) and get its [`transform`](https://cesium.com/learn/cesiumjs/ref-doc/Cesium3DTile.html#transform). If the geometry is located in its children instead, you can access them via [`tile.children`](https://cesium.com/learn/cesiumjs/ref-doc/Cesium3DTile.html#children). Hope that helps!

---

<div class="post-metadata">

**Author:** ![Gabby\_Getz](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/gabby_getz/32/7838_2.png) [@Gabby\_Getz](https://community.cesium.com/u/Gabby_Getz)\
**Post date:** [August 23, 2022, 7:38pm UTC](https://community.cesium.com/t/how-to-get-primitive-orientation/19993/5 "2022-08-23T19:38:53Z")

</div>

Also [`Transforms.fixedFrameToHeadingPitchRoll`](https://cesium.com/learn/cesiumjs/ref-doc/Transforms.html?classFilter=transforms#.fixedFrameToHeadingPitchRoll) is an easier way to get the heading, pitch, and roll values from the original matrix.

---

<div class="post-metadata">

**Author:** ![steven11329](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/steven11329/32/7088_2.png) [@steven11329](https://community.cesium.com/u/steven11329)\
**Post date:** [August 24, 2022, 7:07am UTC](https://community.cesium.com/t/how-to-get-primitive-orientation/19993/6 "2022-08-24T07:07:43Z")

</div>

Yes, I want to get rotation info like Cesium Ion (I posted photo before) by public API.  
If no way, It’s OK.
