gpt4 book ai didi

android - OpenGL - 无论屏幕尺寸/比例如何,都呈现相同的尺寸

转载 作者:行者123 更新时间:2023-11-30 03:07:38 25 4
gpt4 key购买 nike

我在 OpenGL (Android) 中渲染一个 2D 平面平铺表面,我正在使用以下设置视口(viewport):

float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 1, MIN_ZOOM + 1.0f);

在横向模式下这看起来不错,但如果我切换到纵向模式,一切都会变得更大。我一直在阅读关于平截头体、变换和缩放的内容,但我不确定究竟哪些适用于此。

据我了解,视锥体是正确的,因为范围应该是 -ratio - ratio 和 1 - 1。

这样对吗?如果是这样,我应该使用缩放或变换来使图 block 和其他元素以相同的物理尺寸呈现,而不管方向如何?

最佳答案

例如,假设您的屏幕是 1200 x 800。在横向模式下,您将拥有:

ratio = 1.5
frustrum (left, right, bottom, top) = -1.5, 1.5, -1, 1

所以你的平截头体是 3 个单位宽,2 个单位高。纵向:

ratio = 0.667
frustrum (left, right, bottom, top) = -0.667, 0.667, -1, 1

...它现在是 1.333 个单位宽和 2 个单位高。因此,尽管平截头体的最短边和最长边之间的比例相同,但它在人像中的比例更小,因此渲染看起来更近、更大。你想要的肖像是:

frustrum = -1, 1, -1.5, 1.5

...因此,对于横向,最短的屏幕尺寸为 2 个单位,最长的为 3 个单位。检查比率是否大于 1(以确定方向)并相应地设置平截头体:

if (ratio >= 1.0f)
gl.glFrustumf(-ratio, ratio, -1, 1, 1, MIN_ZOOM + 1.0f); //Landscape
else
gl.glFrustumf(-1, 1, -1/ratio, 1/ratio, 1, MIN_ZOOM + 1.0f); //Portrait

关于android - OpenGL - 无论屏幕尺寸/比例如何,都呈现相同的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21530034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com