0

这可能是一个非常愚蠢的问题,也可能不是一个非常愚蠢的问题,所以我很抱歉,但我还没有在任何书籍或教程中遇到过这个问题。另外我想它可以适用于任何语言......

假设您创建了一个大小为:的窗口,640x480并且在其中创建了一个大小为对象/形状,32x32并且您可以使用键盘输入在窗口周围移动形状。

您使用什么Type(int,float ...)来控制形状的移动是否重要。显然你不能在一个像素中画出一半,但是如果你将形状移动 0.1f(例如使用glTranslation函数)会发生什么应该移动它int of 1......它是否将渲染的形状移动了 1/10像素还是?

我希望我已经解释得很好,不会被嘲笑。

我只问这个是因为它会影响碰撞检测的精度以及程序或潜在游戏的其他功能。

4

3 回答 3

1

使用浮点数或双精度数来表示定位的最重要原因是背景计算。如果你继续用整数计算你的位置,你不仅可能需要使用转换步骤来回到整数。您还将每 x 步丢失数据

于 2013-03-20T15:10:38.213 回答
1

glTranslate 通过 xyz 生成翻译。当前矩阵 (glMatrixMode) 与此平移矩阵相乘,乘积替换当前矩阵,就好像使用以下矩阵作为参数调用 glMultMatrix 一样:

1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 如果矩阵模式是 GL_MODELVIEW 或 GL_PROJECTION,则在调用 glTranslate 后绘制的所有对象都会被转换。

使用 glPushMatrix 和 glPopMatrix 保存和恢复未平移的坐标系。

这意味着 glTranslate 会给你一个翻译,与当前矩阵一起使用,产生非十进制数字。你不能使用半个像素。glTranslate 接收双精度或浮点数,因此如果您应该在 x、y 或 z 中将其移动 1,只需给函数一个浮点 1 或双精度 1 作为参数。

http://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml

于 2013-03-20T15:03:47.700 回答
0

如果你想让你的精灵动画每次更新的移动小于 1 像素,那么是的,你需要使用浮点数,否则你将无法移动。您的绘图函数很可能会四舍五入到最接近的整数,因此它可能与此无关。但是,您当然可以绘制到亚像素精度!

于 2013-09-17T14:17:48.697 回答