簡體   English   中英

OpenGL“自由縱橫比”就像在 Unity 中一樣

[英]OpenGL "Free Aspect Ratio" like in Unity

我使用 OpenGL 和 C++ 在 Visual Studio 中制作了自己的簡單關卡編輯器,為 android 手機創建游戲。 但是我偶然發現了一個問題,即我放入編輯器中的某些對象在 android 上沒有正確顯示,有時甚至沒有出現。 我一直在四處尋找,找不到解決方案。 所以這是我的lLevel Editor的正交相機和屏幕分辨率:

相機對象正交矩陣:

GoldState::aspectRatio = m_AspectRatio = (float)width / (float)height;
    float orthoLeft = 0.0f; //* m_AspectRatio;
    float orthoRight = 100.0f; //* m_AspectRatio;
    float orthoUp = 100.0f;
    float orthoDown = 0.0f;
    m_OrthoMatrix = glm::ortho(orthoLeft, orthoRight, orthoDown, orthoUp);

android 也完全一樣(使用ndk)。

縱橫比被注釋掉了,因為我正在試驗,如果不乘以縱橫比,整個世界都會被拉伸。

現在到統一的自由縱橫比,我有一種感覺,就像我的正射相機一樣,沒有乘以縱橫比。 那到底是什么,當我 select 自由縱橫比保持 1:1 並且沒有拉伸或任何東西時,我放置在統一上的每個 object 是如何做到的? 如果有人可以向我解釋這一點,那真的會對我有很大幫助。

還有一件事。 我使用 opengl 在 android 上制作了幾款游戲,但我特別將背景圖像設置為精確的寬度和高度,因為我一直在乘以我的正交矩陣中的縱橫比。 但是這一次我只想提取背景和對象的位置和大小,並讓它們保持它們的外觀而不拉伸不同的分辨率。

如果有任何其他通用解決方案,如果沒有我想我應該在關卡編輯器上使用一些固定分辨率並為 android 使用相同的分辨率?

它應該可以解決問題:

GoldState::aspectRatio = m_AspectRatio = (float)width / (float)height;
GoldState::orthoSize = m_OrthoSize = ((float)width / (float)height < 16f / 9f ? (float)width / (float)height : 16f / 9f) / (16f / 9f);
float srcAspectRatio = 1f / 1f; //* Original aspect, default: 1.0;
float orthoLeft = 0.0f;
float orthoRight = 100.0f;
float orthoUp = 100.0f;
float orthoDown = 0.0f;
m_OrthoMatrix = glm::ortho(((0.5f*(orthoright - orthoLeft) + ortholeft) * srcAspectRatio) - (0.5f*(orthoright - orthoLeft) * m_AspectRatio * m_OrthoSize), ((0.5f*(orthoright - orthoLeft) + ortholeft) * srcAspectRatio) + (0.5f*(orthoright - orthoLeft) * m_AspectRatio * m_OrthoSize),(0.5f*(orthoDown - orthoUp) + orthoUp) - (0.5f*(orthoDown - orthoUp) * m_OrthoSize),(0.5f*(orthoDown - orthoUp) + orthoUp) + (0.5f*(orthoDown - orthoUp) * m_OrthoSize));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM