1
\$\begingroup\$

I want to match 1:1 the 3ds max camera render with my 3d engine (DirectX 11, C++).

I believe that my mesh exporter (coded with MaxScript) works fine, I see the right shapes.

But something about the perspective, translation (of the camera) and/or rotation is not quite right - the scene looks similar, but not the same:

enter image description here

enter image description here

As you can see:

  • the window proportion and size is ok,
  • the mesh looks fine (I'm not interested with the materials or shading now, just the 1:1 match of view & perspective),
  • to get the better match, I had to translate the window (as you can see on the second image, the corner of one has some offset),
  • the rotation or rather perspective seems to be a bit wrong (note the smaller teapot on second image).

I guess I've missed something:

  • My object and camera are places in the same position as in 3ds max (3ds max is set to millimeters, engine don't use any units - e.g. camera is at [20mm, 10mm, 0mm] in 3ds max and [20, 10, 0] in game engine).
  • Game engine camera uses DirectX::XMMATRIX projection = DirectX::XMMatrixPerspectiveFovLH(DirectX::XM_PIDIV2, screenWidth / (FLOAT)screenHeight, 0.01f, 1000.0f); and the 3ds max camera is set to FOV = 90: enter image description here
  • The position and orientation of the object and camera (camera has no rotation applied) are converted from 3ds max right-handed z-up coordinate system to engine's left-handed y-up coordinate system. The orientation is expressed in quaternion and it's transformed from one system to another with:

.

temp = q.z
q.z = q.y
q.y = temp

q.z = -q.z
q.x = -q.x
q.y = -q.y

What did I miss and should take into account when matching game engine view with 3d edition software like 3ds max?

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.