Cockpit view for flight simulation

I am working on a flight simulation project and have trouble understanding how to move the camera in behind the trackedEntity to simulate the flight from pilot’s perspective(the camera needs to rotate as the aircraft with respect to the heading pitch and roll values for a given point).

The code I have now:

// The SampledPositionedProperty stores the position and timestamp for each sample along the radar sample series.
        const positionProperty = new Cesium.SampledPositionProperty();
        // store the orientation in each timestamp as well
        const orientationProperty = new Cesium.SampledProperty(Cesium.Quaternion);

        for (let i = 0; i < flightData.length; i++) {
            const dataPoint = flightData[i];
            let { longitude, latitude, altitude, heading, pitch, roll, timestamp } = dataPoint
            // Declare the time for this individual sample and store it in a new JulianDate instance.
            const time = Cesium.JulianDate.fromDate(new Date(timestamp));
            const position = Cesium.Cartesian3.fromDegrees(longitude, latitude, altitude);
            // Store the position along with its timestamp.
            positionProperty.addSample(time, position);

            let orientation = Cesium.Transforms.headingPitchRollQuaternion(position, convertHpr(heading, pitch, roll));

            orientationProperty.addSample(time, orientation);

            viewer.entities.add({
                description: `Location: (${dataPoint.longitude}, ${dataPoint.latitude}, ${dataPoint.height})`,
                position: position,
                point: { pixelSize: 10, color: Cesium.Color.RED }
            });
        }
        
        async function loadModel() {
            // Load the glTF model from Cesium ion.
            const airplaneUri = await Cesium.IonResource.fromAssetId(MY_ASSET_ID);

            viewer.trackedEntity = viewer.entities.add({
                availability: new Cesium.TimeIntervalCollection([ new Cesium.TimeInterval({
                    start: start,
                    stop: stop
                }) ]),
                position: positionProperty,
                // Attach the 3D model instead of the green point.
                model: { uri: airplaneUri },
                // Automatically compute the orientation from the position.
                orientation: orientationProperty,
                path: new Cesium.PathGraphics({ width: 3 })
            });
        }

        loadModel();
        viewer.clock.shouldAnimate = true

viewer.clock.onTick.addEventListener(function (clock) {
           // should I do updates here? 
 });

I have a flightData object containing the lat, lng, alt, heading, pitch, roll and timestamp for each point in the flightpath.