У меня проблема, когда я могу видеть желаемый объект в перспективной проекции, не будучи в состоянии видеть объект в ортогональной проекции, даже когда камера находится в тех же координатах и смотрит на нее координат.Вытяжка Ortho2D Проецирование не отображается
Я знаю, что объект визуализируется правильно, так как он правильно отображает в перспективе следующим образом:
Самолет расположен в начале координат с высотой 10, шириной 50, и никакой глубины. Он расположен на (0, -10, 0)
Я хотел был бы иметь возможность просмотреть это в орфографической проекции. Так я поставил его, как это в моем CameraManager классе:
void CameraManager::UpdateCamera() {
// exit in erroneous situations
if (m_screenWidth == 0 && m_screenHeight == 0)
return;
switch (m_projectionType)
{
case TWO_DIMENSIONAL:
SetupOrthographicCamera();
break;
case THREE_DIMENSIONAL:
SetupPerspectiveCamera();
break;
default:
break;
}
SetupModelView();
}
Тогда в моей SetupOrthographicCamera() Я делаю это:
void CameraManager::SetupOrthographicCamera() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//float aspectRatio = m_screenWidth/(float)m_screenHeight;
gluOrtho2D(-50, 50, -100, 100);
/*
m_cameraPosition = btVector3(0, 0, -1);
glMatrixMode(GL_MODELVIEW);
gluLookAt(m_cameraPosition[0], m_cameraPosition[1], m_cameraPosition[2], m_cameraTarget[0], m_cameraTarget[1], m_cameraTarget[2], m_upVector.getX(), m_upVector.getY(), m_upVector.getZ());
*/
}
Это моя перспектива камеры:
void CameraManager::SetupPerspectiveCamera() {
// select the projection matrix
glMatrixMode(GL_PROJECTION);
// set it to the matrix-equivalent of 1
glLoadIdentity();
// determine the aspect ratio of the screen
float aspectRatio = m_screenWidth/(float)m_screenHeight;
// create a viewing frustum based on the aspect ratio and the
// boundaries of the camera
glFrustum(-aspectRatio * m_nearPlane, aspectRatio * m_nearPlane, -m_nearPlane, m_nearPlane, m_nearPlane, m_farPlane);
// the projection matrix is now set
}
И это мой SetupModelView():
void CameraManager::SetupModelView() {
// select the view matrix
glMatrixMode(GL_MODELVIEW);
// set it to '1'
glLoadIdentity();
// our values represent the angles in degrees, but 3D
// math typically demands angular values are in radians.
float pitch = m_cameraPitch * RADIANS_PER_DEGREE;
float yaw = m_cameraYaw * RADIANS_PER_DEGREE;
// create a quaternion defining the angular rotation
// around the up vector
btQuaternion rotation(m_upVector, yaw);
// set the camera's position to 0,0,0, then move the 'z'
// position to the current value of m_cameraDistance.
btVector3 cameraPosition(0, 0, 0);
cameraPosition[2] = -m_cameraDistance;
// create a Bullet Vector3 to represent the camera
// position and scale it up if its value is too small.
btVector3 forward(cameraPosition[0], cameraPosition[1], cameraPosition[2]);
if (forward.length2() < SIMD_EPSILON) {
forward.setValue(1.f, 0.f, 0.f);
}
// figure out the 'right' vector by using the cross
// product on the 'forward' and 'up' vectors
btVector3 right = m_upVector.cross(forward);
// create a quaternion that represents the camera's roll
btQuaternion roll(right, -pitch);
// turn the rotation (around the Y-axis) and roll (around
// the forward axis) into transformation matrices and
// apply them to the camera position. This gives us the
// final position
cameraPosition = btMatrix3x3(rotation) * btMatrix3x3(roll) * cameraPosition;
// save our new position in the member variable, and
// shift it relative to the target position (so that we
// orbit it)
m_cameraPosition[0] = cameraPosition.getX();
m_cameraPosition[1] = cameraPosition.getY();
m_cameraPosition[2] = cameraPosition.getZ();
m_cameraPosition += m_cameraTarget;
// create a view matrix based on the camera's position and where it's
// looking
//printf("Camera Position = %f, %f, %f\n", cameraPosition[0], cameraPosition[1], cameraPosition[2]);
// the view matrix is now set
gluLookAt(m_cameraPosition[0], m_cameraPosition[1], m_cameraPosition[2], m_cameraTarget[0], m_cameraTarget[1], m_cameraTarget[2], m_upVector.getX(), m_upVector.getY(), m_upVector.getZ());
}
Я не уверен, что мне не хватает.
Помните, что объект, скорее всего, имеет совсем другой размер в перспективе и орфографической визуализации, если вы не выбрали границы очень осторожно. Просто может быть, что объект находится вне экрана (потому что все действительно большое) или так мало, что вы не можете его увидеть (потому что все действительно мало). Я заметил, что ваша камера ***, а не ***, указывающая прямо на объект, потому что центр экрана (в рендеринге перспективы) синий, а не зеленый. – immibis