0

我开发了一个程序和一个模块,其中有很多形状类。考虑一个形状类,例如我在这里拥有的一个矩形,以及一个draw从我的类中不断调用的函数。

virtual void draw()
{
if(State == HOVERING || State == CLOSED){                   
rec.draw(playerContainer);
gluLookAt(lookAtPoint);
}
else if(State == OPENING)
{
glPushMatrix();         
glTranslatef(Tweenable3D::pos.x,Tweenable3D::pos.y,Tweenable3D::pos.z);
glRotatef(Tweenable3D::xRotation,-1,0,0);                        
glTranslatef(-Tweenable3D::pos.y,-Tweenable3D::pos.y,-Tweenable3D::pos.z);
rectShape.draw(Tweenable3D::pos.x, Tweenable3D::pos.y, Tweenable3D::width, Tweenable3D::height);
glTranslatef(ofGetWidth()/2, ofGetHeight()/2,0);
glPopMatrix();
}
else
{
setPosition(vidPlayerFinalPosition);
rectShape.draw(vidPlayerFinalPosition, vidPlayerFinalWidth, vidPlayerFinalHeight);
ofCircle(vidPlayerFinalPosition, 30);
ofVec3f looks(0,0,0);
lookAt(looks);
}
}

第二Tweenable3D个中使用的只是我的动画的插值。我正在以这种方式制作旋转、平移和其他动画。

这里的问题是我的形状一开始就在相机里面。对于第二个 if 条件,我必须执行一些我上面写的动画。但是,当我在程序中包含相机时,它会搞砸并将坐标转换为屏幕中心(我的初始坐标在左上角)

我必须自己做翻译来纠正这个相机翻译或尝试世界到屏幕/屏幕到世界等。
我只是想知道是否有办法将这个对象从相机中取出,做我的动画和其他东西,然后在其他如果条件也需要时将其放回相机中。说物体不在相机中可能是不正确的(可能已经存在的一些数学函数有助于获得这种效果)

4

1 回答 1

0

你说的那个相机是什么?OpenGL没有“相机”。什么是“相机”,什么不是,完全取决于您和您的代码实现的语义。

我认为您的错误是,您将 OpenGL 与场景​​图混淆了,但事实并非如此。在固定功能模式下,它有许多矩阵,它只是根据您输入的一些数字将单个点、线和三角形扔到屏幕上,然后通过这些矩阵进行处理。没有场景,没有对象,没有对象层次结构。


另外,“物体在相机中”是什么意思?

于 2013-01-18T11:11:04.610 回答