Rotation when flipping up vector from Y to Z

I have a rotation problems.

I have the camera set up so that up vector is Z, -X is forward and right is Y. I have models that are exported in another coordinate system where Y is up, -Z is forward, X is right.

My challenge/problem is with rotation. How to do correct rotation in this case without changing the coordinate system of objects that I import. Scale and transform are working as they should.

So far I have tried swapping Y and Z axis in the rotation matrix manual, doing the rotation matrix separately, doing the rotation as we read control file, flipping Z and Y rotation axis, changing the matrix to

| 1 0 0 |
| 0 0 1 |
| 0 1 0 |

etc.

PS. I dont want to change the coordinate system of the object files that I import now and when I write in the control file rotateY it will rotate the object in my Y axis not the object Y axis.

This is the part of code I am trying the transformations


for(int i = 0; i< controls.size(); i++) {
		meshStruct tempMesh;

		int isMeshLoaded = loadObjFile((char*)controls[i].path, &tempMesh.objectInfo_, &tempMesh.numObjects_);
		if(isMeshLoaded)
		{
			cout<< "Mesh " << controls[i].path << " loaded sucesfully." << endl;
		} else {
			cout<< "Mesh " << controls[i].path << " loaded failed." << endl;
		}

		tempModelMatrix = mat4(1.0f, 0.0f, 0.0f, 0.0f,
								0.0f, 1.0f, 0.0f, 0.0f,
								0.0f, 0.0f, 1.0f, 0.0f,
								0.0f, 0.0f, 0.0f, 1.0f);

		//mat4 tempModelMatrixFlip = mat4(1.0f, 0.0f, 0.0f, 0.0f,
		//								0.0f, 0.0f, 1.0f, 0.0f,
		//								0.0f, 1.0f, 0.0f, 0.0f,
		//								0.0f, 0.0f, 0.0f, 1.0f);
		//tempModelMatrix *= tempModelMatrixFlip;

		tempModelMatrix = glm::translate(tempModelMatrix, controls[i].translate);
		
		tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.x), vec3(1.0, 0.0, 0.0));
		tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.y), vec3(0.0, 1.0, 0.0));
		tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.z), vec3(0.0, 0.0, 1.0));
		
		mat4 r  = mat4(1.0f);
		mat4 rx = mat4(1.0f); 
		mat4 ry = mat4(1.0f);
		mat4 rz = mat4(1.0f);
		rx = rotate(radians(controls[i].rotation.x), vec3(1.0, 0.0, 0.0));
		ry = rotate(radians(controls[i].rotation.y), vec3(0.0, 1.0, 0.0));
		rz = rotate(radians(controls[i].rotation.z), vec3(0.0, 0.0, 1.0));
		r = rx * ry * rz;		
		/*
		vec4 temp;

		temp = column(r, 1);
		cout << to_string(temp) << endl;
		r = column(r,1, column(r, 2));
		r = column(r,2, temp);

		temp = row(r,1);
		r = row(r, 1,row(r,2));
		r = row(r, 2, temp);
		//cout << to_string(column(tempModelMatrix, 1)) << endl;
 
		//tempModelMatrix *= r;
		float tempModelMatrix2[16];// = mat4(1.0f);

		tempModelMatrix2[0] =  controls[i].scale.x * column(r, 0).x;//controls[i].scale.x * controls[i].rotation.x;
    	tempModelMatrix2[1] =  controls[i].scale.x * column(r, 0).y;//controls[i].scale.x * controls[i].rotation.x;
    	tempModelMatrix2[2] =  controls[i].scale.x * column(r, 0).z;//controls[i].scale.x * controls[i].rotation.x;
    	tempModelMatrix2[3] =  0.0f;
    	tempModelMatrix2[4] =  controls[i].scale.y * column(r, 2).x;//controls[i].scale.y * controls[i].rotation.y;
    	tempModelMatrix2[5] =  controls[i].scale.y * column(r, 2).y;//controls[i].scale.y * controls[i].rotation.y;
    	tempModelMatrix2[6] =  controls[i].scale.y * column(r, 2).z;//controls[i].scale.y * controls[i].rotation.y;
    	tempModelMatrix2[7] =  0.0f;
    	tempModelMatrix2[8] =  controls[i].scale.z * column(r, 1).x;//controls[i].scale.z * controls[i].rotation.z;
    	tempModelMatrix2[9] =  controls[i].scale.z * column(r, 1).y;//controls[i].scale.z * controls[i].rotation.z;
    	tempModelMatrix2[10] = controls[i].scale.z * column(r, 1).z;//controls[i].scale.z * controls[i].rotation.z;
    	tempModelMatrix2[11] = 0.0f;
    	tempModelMatrix2[12] = controls[i].translate.x;
    	tempModelMatrix2[13] = controls[i].translate.y;
    	tempModelMatrix2[14] = controls[i].translate.z;
    	tempModelMatrix2[15] = 1.0f;*/

		tempModelMatrix = glm::scale(tempModelMatrix, controls[i].scale);
		//cout << controls[i].path << " controls[i].translate " << to_string(controls[i].translate) << endl;
		//cout << controls[i].path << " controls[i].rotation.X " <<  controls[i].rotation.x << endl;
		//cout << controls[i].path << " controls[i].rotation.y " <<  controls[i].rotation.y << endl;
		//cout << controls[i].path << " controls[i].rotation.Z " <<  controls[i].rotation.z << endl;
		//cout << controls[i].path << " controls[i].scale " << to_string(controls[i].scale) << endl;

		string basedir = dirname(controls[i].path);
		for(int j = 0; j < tempMesh.numObjects_; j++){
			//tempMesh.objectInfo_[j].modelMatrix = controls[i].modelMatrix;
			tempMesh.objectInfo_[j].modelMatrix = tempModelMatrix;
			//tempMesh.objectInfo_[j].modelMatrix = make_mat4(tempModelMatrix2);

Fixed the problem after going through some emails with the professor and had a small error when calculating rotation matrix. I was doing it in the reverse way


tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.x), vec3(1.0, 0.0, 0.0));
tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.y), vec3(0.0, 1.0, 0.0));
tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.z), vec3(0.0, 0.0, 1.0)); 

instead of

tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.z), vec3(0.0, 0.0, 1.0));
tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.y), vec3(0.0, 1.0, 0.0));
tempModelMatrix = glm::rotate(tempModelMatrix, radians(controls[i].rotation.x), vec3(1.0, 0.0, 0.0));

Thanks