Temel olarak, görünüm / pencere boyutu değiştiğinde oluşturulan görüntünün bozulmasını veya gerilmesini nasıl kaldırabileceğimi bilmek istiyorum.
Aşağıdaki resimlerde bahsettiğim bozulma / esneme örneği var:
Orijinal Görüntü (Kare Pencere)
Bozuk / Gerilmiş Görüntü (Dikdörtgen Pencere)
İdeal olarak, ikinci görüntü küreyi yatay olarak uzanmadan göstermelidir ve daha büyük pencere boyutunu hesaba katmak için daha fazla sahne kullanıcıya gösterecektir.
Bu nasıl yapılabilir?
Görüntüyü oluşturmak için OpenGL ile çalışıyorum ve görüşmeler yoluyla perspektif projeksiyonunu kullanıyorum:
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60, window.width/window.height, 0.01f, 100.0f)
En boy oranı width/height
, karşılaştığım tüm belgelere / eğiticilere uygun, bu yüzden yanlış olmasını beklemiyorum. Ancak, şüphem bunun gerilme problemini etkilemesidir.
Düşünceden sonra
Dürüst olmak gerekirse, konuyu daha fazla düşündüğümde, çözümün fovy (y yönünde görüş alanı) açısı ile en boy oranı arasında doğrudan orantılı bir ilişki içerdiğine inanmaya başlamıştım.
Yukarıdaki görüntüyü referans olarak kullanarak, genişlik büyürse (yatay bir gerilmeye neden olursa), sarmaşık açısının, oluşturulan görüntünün orantılılığını 'sabitleyen' dikey bir gerilmeye neden olması için çok makul olduğu düşünülmektedir.
Benzer şekilde, genişlikteki bir azalma, fovy açısının azalmasını gerektirir.
Güncelleme:
Bu nedenle, bunu daha ayrıntılı bir şekilde araştırdıktan sonra, görüntüleme frustumunu şu şekilde ayarlama yöntemimi değiştirmeye karar verdim:
gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f)
Ve beklentilerim doğruydu, bu orantılılık sorununu çözdü. Ancak, istediğim sonuçları elde edemiyor. Pencere genişliği arttığında, oluşturulan görüntü küçülür (ancak küre gerçekten daireseldir). Bunun yerine, küre hiç boyut değiştirmemelidir; yalnızca görüntülenen sahne miktarı değişmelidir.