Rotating Object

I pulled the example below together from some other forum posts. The issue I’m having is that in 3-D the object rotates around its end point and in the 2 and 2.5-D views its rotating around some other unknown point. I’ve just started playing around with this so I’m certainly doing this wrong. Any insight or suggestions would be helpful. Thanks

Nate Knight

require([‘Cesium’], function(Cesium) {
“use strict”;

var viewer = new Cesium.Viewer('cesiumContainer');
var scene = viewer.scene;
var primitives = scene.primitives;

// Green Cylinder
var length = 400000.0;
var positionOnEllipsoid = Cesium.Cartesian3.fromDegrees(-100.0, 40.0);
var modelMatrix = Cesium.Matrix4.multiplyByTranslation(
    Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid),
    new Cesium.Cartesian3(0.0, 0.0, length * 0.5)
);

var cylinderGeometry = new Cesium.CylinderGeometry({
    length : length,
    topRadius : 200000.0,
    bottomRadius : 200000.0,
    vertexFormat : Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
});


// Red Cone
positionOnEllipsoid = Cesium.Cartesian3.fromDegrees(-105.0, 40.0);
modelMatrix = Cesium.Matrix4.multiplyByTranslation(
    Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid),
    new Cesium.Cartesian3(0.0, 0.0, length * 0.5)
);

cylinderGeometry = new Cesium.CylinderGeometry({
    length : length,
    topRadius : 0.0,
    bottomRadius : 200000.0,
    vertexFormat : Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
});

var redCone = new Cesium.GeometryInstance({
    geometry : cylinderGeometry,
    modelMatrix : modelMatrix,
    attributes : {
        color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED)
    }
});

// Add instances to primitives
var primitive;
primitives.add(primitive = new Cesium.Primitive({
    geometryInstances : [redCone],
    appearance : new Cesium.PerInstanceColorAppearance({
        closed : true,
        translucent: false
    })
}));

var counter = 90;
setInterval(function () {
   
    if (counter >= 360) {
        counter = 0;
    }
    var angleRad = 3.14 * counter / 180;
    var rotMatrix = new Cesium.Matrix3.fromRotationX(angleRad);
    var enu2ecef = Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid);
    var rotMat4 = Cesium.Matrix4.fromRotationTranslation(rotMatrix, new Cesium.Cartesian3(0.0, 0.0, 0.0));
    var itrans = Cesium.Matrix4.inverseTransformation(enu2ecef);
    var modelMatrix = Cesium.Matrix4.multiply(Cesium.Matrix4.multiply(enu2ecef,rotMat4),itrans);
    primitive.modelMatrix = modelMatrix;

    counter += 5;
   
}, 100);

Sandcastle.finishedLoading();

});