私はプログラムを開発し、このモジュールには多くの形状クラスがあります。ここにある四角形などの形状クラスと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);
}
}
2Tweenable3D
番目に使用される は、アニメーション用に補間された値に他なりません。そんな感じで回転や平行移動などのアニメーションをやっています。
ここでの問題は、最初は私の形がカメラの中にあるということです。2 番目の if 条件では、上で書いたようにいくつかのアニメーションを実行する必要があります。ただし、プログラムにカメラを含めると、めちゃくちゃになり、座標が画面の中央に変換されます (最初の座標は左上にあります)。
このカメラの変換を修正するために独自の変換を行うか、ワールドからスクリーン/スクリーンからワールドなどを試す必要があります。
このオブジェクトをカメラから取り出し、アニメーションなどを実行し、後で行う方法があるかどうか疑問に思っていましたその他の場合は、必要に応じてカメラに戻すこともできます。オブジェクトがカメラの外にあると言うのは正しくないかもしれません (おそらく、既にそこにある数学関数がその効果を得るのに役立つでしょう)