我正在使用Android上的OpenGL ES 2.0而我和我这样初始化我的显示:
float ratio = (float) width / height;
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7); //Using Orthographic as developing 2d
我无法理解的是:
假设我的应用程序是一个“固定屏幕”游戏(就像吃豆人一样,没有滚动,只是整个游戏在屏幕上可见)。
现在,如果我在x和y上绘制-1到+1的四边形,我会得到这样的结果:
显然,这是因为我正在设置-ratio,比率如上所示。所以这是正确的。
但是我应该将它用作我的“整体”屏幕吗?左右相当大的信箱?
我想要一个矩形显示器,它是物理显示器的整个高度(以及尽可能宽的宽度),但是这意味着要小于-1而不是+1,这是一个问题吗? / p>
我意识到如果这是一个滚动游戏,选项可能是使用剪辑,但对于这个特殊情况,我希望屏幕上的整个“游戏板”是静态的(并且使用尽可能多的可用屏幕真实尽可能没有'拉伸',从而导致我的精灵伸长)。
由于我喜欢使用0,0作为屏幕的顶部,基本上我所做的就是通过我的绘制方法:
quad1.drawQuad (10,0);
当drawQuad方法得到这个时,它基本上采用从左到右的范围表示我的openGL并除以屏幕宽度(所以,在我的情况下-1.7到+1.7所以3.4 / 2560 = 0.001328125)。并说我将10指定为我的X(如上所述),它会说:
-1.7 + (10*0.001328125) = -1.68671875
然后将四边形绘制在-1.68671875。
这样做我能够使用普通的合作伙伴(我只是减去而不是为y轴添加所以我可以在顶部加0)。
这是一种做事的好方法吗?
因为使用这种方法,目前,如果我指定100,100平方,它不是正方形,而是矩形。但是,在正面,我可以通过按宽度x高度缩放四边形来填充整个物理屏幕。
答案 0 :(得分:0)
您正在绘制1x1四边形,因此这就是您看到1x1四边形的原因。尝试将四边形0.25向右或向左平移,您将看到您也可以在该空间中绘制。
在图形中,您创建一个对象,如四边形,在您创建1x1的情况下。然后将它放在任何你想要的位置。如果你没有定位它,那么它就会出现在原点,这就是你所看到的。
如果你绘制一个更宽的形状,你也会看到你可以在屏幕上画出这个区域。
顺便说一句,使用正交矩阵函数,您不仅要指定屏幕宽高比,还要指定必须使用的坐标单位大小。这就是1x1填充屏幕高度的原因,因为上边界和下边界设置为1和-1。你的比例多一点,因为你的宽度比你的身高长,所以你的左右边界基本上是-1.5和1.5(无论你的比例是多少)。
但你也可以做这样的事情;
Matrix.orthoM(mProjMatrix, 0, -width/2, width/2, -height/2, height/2, 3, 7);
在这里,您的比例是相同的,但是您将其发送到带有屏幕坐标的正射投影。 (免责声明:我不使用您所使用的相同数学库,但这些数据库似乎是基于您传递给它的参数的传统正交矩阵函数。)
因此,假设您的分辨率为1000x500像素。在OpenGL中,0,0的起源位于中间。所以现在你的左边是(-500,y),右边是(500,y),你的上边是(x,250)。因此,如果您绘制1x1四边形,它将非常小,但如果您绘制一个250x250的正方形,它将看起来像您之前的正投影中的1x1四边形。
因此,您可以指定您想要的坐标,比率,单位大小等。就个人而言,我不喜欢将坐标指定为0到1之间的分数,我喜欢以与屏幕像素相同的意义来考虑它们。
但无论你是否选择这样做,希望你能理解你实际传递给这些矩阵函数的内容。
最好的学习方法之一是在屏幕上绘制一个对象,然后使用您发送到模型视图和投影矩阵的不同数字来玩,这样您就可以看到它们实际上在做什么。