获取的对象的值,以rotatef℃的呼叫后++(Getting values of an objec

2019-10-22 07:49发布

我需要访问X,Y值的顶点对象的伊夫旋转时,它(与glRotate3f)之后。 这怎么可能? 我需要它们,其中碰撞将在基于对象的旋转度的角度相关的方向上发送的对象以解决对象碰撞的问题。

编辑::

好吧,我已经接近找出路。 让我们假设X和Y和0度,90,180,270我设置一个点作为对象的中心,让我们假设X = 30,Y = 70和X_SIZE是60和Y_SIZE是140。

如果我做一个new_x = X COS(角度) - Ÿ森(角)和new_Y = X 森(角)+ Y COS(角),如果再添加或减去对象中心的X和Y向的new_x和new_Y我真正得到新点时除外角度是180,我需要去与-new_X + X。

这是解决这个问题的方法是什么?

Answer 1:

你是误会的事情了一下。

你没有通过调用glRotatef旋转什么。 当你调用glRotate,修改转换矩阵,对象数据保持不变。 因为对象没有改变 - 当你渲染对象,顶点数据经过顶点处理管线,得到由变换矩阵和技术,你不能计算结果返回(每次渲染对象的时间)相乘。

好吧,如果你真的想要的话,你可以尝试使用GL反馈缓冲区(见glFeedbackBuffer),但我没有看到一个理由。 我认为“OpenGL的红书”可能有反馈缓冲器的例子,但我不知道这一点。 反馈缓冲器可以提供您所需的功能,但我真的没有使用过了,所以我不知道它的。

此外,移动大量数据的向后和向前的系统内存和视频内存(当你的对象存储在视频内存)之间导致的性能损失,所以你不应该这样做,即使你能。

如果你想获得旋转后对象的状态,你将不得不用手乘以 - 使用对象的矩阵,并在系统内存中存储的副本。 由于OpenGL的结合对象矩阵视图矩阵(当你调用glRotatef),那么你需要单独存放旋转矩阵。

这是解决这个问题的方法是什么?

也许只有当你与2D的工作,并呈现一个三角形或两个。

通常,当你这样做的转换,将构建组合的旋转/转换矩阵,然后乘以你需要使用矩阵数据 - 这将是更有效,因为它允许多个转换合并成一个。 如果你使用非图形3D程序(冲突检测)工作,你做矩阵乘法/矢量变换在你的代码,你自己。

AFAIK的OpenGL不提供矩阵处理例程(类似于D3DXMatrixMultiply在D3DX),但是他们很容易从头开始编写,并且可以从多个地方采取。 您还可以使用D3DX矩阵的功能,如果你绝望(D3D矩阵具有相同的内存布局)。 此外,如果你是认真的与3D的工作,你必须最终学会矩阵。



Answer 2:

不是直接的,则可以使用浮动模型视图[16]检索模型视图矩阵; glGetFloatv(GL_MODELVIEW,模型视图)和人工做你的矢量和模型视图矩阵之间的矩阵乘法。

有没有在GL没有其他的方法来做到这一点。



Answer 3:

听起来像你追求的是gluProject 。 您提供的X,Y,和对象的Z坐标,当前矩阵(模型视图和投影),并视COORDS,和它给你回的x,y坐标到这一点会被那些矩阵进行映射。 链接的文档包括作业的公式,如果你喜欢自己做。



文章来源: Getting values of an object after a call to rotatef c++