Все в порядке - кажется, мой вопрос был таким же облачным, как и моя голова. Давай попробуем снова.Соотношение сторон - как обойти их? (D3D viewport setup)
У меня есть 3 свойства при настройке видовых экранов для устройства D3D: - Разрешение, в котором работает устройство (полноэкранный). - Физическое соотношение сторон монитора (как фракция и поплавок: 1, так, например, для 4: 3 & 1.33). - Соотношение сторон исходного разрешения (само разрешение источника является довольно спорным и говорит нам немного больше, чем соотношение сторон, которое требуется рендеринга, и тип разрешения, которое было бы идеальным для запуска).
Тогда мы столкнулись с этим:
// -- figure out aspect ratio adjusted VPs --
m_nativeVP.Width = xRes;
m_nativeVP.Height = yRes;
m_nativeVP.X = 0;
m_nativeVP.Y = 0;
m_nativeVP.MaxZ = 1.f;
m_nativeVP.MinZ = 0.f;
FIX_ME // this does not cover all bases -- fix!
uint xResAdj, yResAdj;
if (g_displayAspectRatio.Get() < g_renderAspectRatio.Get())
{
xResAdj = xRes;
yResAdj = (uint) ((float) xRes/g_renderAspectRatio.Get());
}
else if (g_displayAspectRatio.Get() > g_renderAspectRatio.Get())
{
xResAdj = (uint) ((float) yRes * g_renderAspectRatio.Get());
yResAdj = yRes;
}
else // ==
{
xResAdj = xRes;
yResAdj = yRes;
}
m_fullVP.Width = xResAdj;
m_fullVP.Height = yResAdj;
m_fullVP.X = (xRes - xResAdj) >> 1;
m_fullVP.Y = (yRes - yResAdj) >> 1;
m_fullVP.MaxZ = 1.f;
m_fullVP.MinZ = 0.f;
Теперь, пока g_displayAspectRatio равно соотношение XRES/yRes (= адаптированными от разрешения устройства), все хорошо, и этот код будет делать то, что ожидается Это. Но как только эти 2 значения больше не связаны (например, кто-то работает с разрешением 4: 3 на экране 16:10, аппаратно-растянутый), для компенсации требуется еще один шаг, и мне трудно понять, как именно ,
(и p.s я использую C-стиле бросает на атомарных типов, жить с ним :-))
Используйте 'static_cast', кстати. – GManNickG
Я не понимаю, что именно вы пытаетесь сделать. –
Rewrote вопрос. – nielsj