gpt4 book ai didi

android - 在 opengl 中,如何获得像素与 gl.gltranslatef(floatx,y,z) 之间的关系?

转载 作者:行者123 更新时间:2023-11-29 00:49:50 25 4
gpt4 key购买 nike

我正在尝试在 Android 上学习 opengl 的东西。在 gl.gltranslatef(x,y,z) 调用中,我将我的纹理在 +ve x 方向上移动了一些单位。但是我找不到1个单位的x属于多少个像素?

这是我正在做的:我调用 gl.glviewport(0,0,width,height);//这会将我的矩形设置为 0,0 作为左下角,然后扩展它以适应宽度和高度。

然后我调用 gl.glfrustrum(-5,5,-7,7,3,7);//我有点困惑这个调用是如何使用我在 gl.glviewport 中设置的尺寸的。

如何将上述调用中从左到右的 -5 到 5 个单位转换为 android 屏幕上的像素?

我的意思是如果 width = 320 和 height = 533 像素,那么由于 gl.glfrustrum 调用在屏幕上占用的像素数是多少?

我通过将 xshift 指定为 5.0 在 gl.gltranslatef 调用中进行试验,但它不会转换屏幕右角或左角的位图,当我将它增加到 6 时,它的一部分仍然可见屏幕。

谢谢西德赫什

简而言之,我正在搜索代表我的 Android 手机屏幕极端角落的最大单位数(以 X 为单位)。

最佳答案

glViewpoint 告诉它应该在哪个矩形(以像素为单位)中显示 OpenGL 输出。

glFrustum 告诉它应该将“世界”单位中的哪些坐标映射到该视口(viewport)。

重要的一点:您的 glFrustum 调用不仅包括高度和宽度,还包括深度。由于您指定的是视锥体,而不是立方体,这意味着除了视锥体最前面之外的任何具有 Z 坐标的任何东西都将根据其与观察者的距离适当缩小。

因此,当您访问 glTranslatef 时,特定对象移动的距离(以像素为单位)将取决于它与观察者的距离。它离观察者越远,特定的横向或向上/向下将转化为越少的像素。

根据您正在做的其他事情,处理此问题的一种简单方法可能是使用 glOrtho 而不是 glFrustumglOrtho 提供正交模式,这意味着不进行透视缩放,因此给定的 X 或 Y 距离将转换为相同数量的像素,无论与观察者的距离如何。

关于android - 在 opengl 中,如何获得像素与 gl.gltranslatef(floatx,y,z) 之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3794281/

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