我正在使用我制作的场景图设置,并注意到有关相机的奇怪问题。当相机在原点上看0,0,-1时没有问题,但是如果我将相机移动到其他任何地方,则结果在呈现项目的位置变得奇怪。
这些项目通常会在某个轴上推开,我尝试了很多不同的组合方式,但是我没有成功地找到解决方案。
这是我的递归更新功能:
void Node::Update(float pT, mat4x4* pIdentity)
{
this->mPosition+=this->mPositionUpdate*pT;
this->mRotation+=this->mRotationUpdate*pT;
static mat4x4 lTrans;
static mat4x4 lRot;
static mat4x4 lScale;
static mat4x4 lIdent;
lTrans=translate(lIdent,this->mPosition);
lRot=rotate(lIdent,this->mRotation.y,vec3(0,1,0))*rotate(lIdent,this->mRotation.x,vec3(1,0,0))*rotate(lIdent,this->mRotation.z,vec3(0,0,1));
//lScale=scale(lIdent,this->mScale);
mForward=_FORWARD*lRot;
mLeft=_LEFT*lRot;
mUp=_UPDir*lRot;
this->mIdentity=lRot*lTrans;
this->mIdentity=*pIdentity*this->mIdentity;
for(int i=0,size=this->mChildren.size();i<size;i++){
this->mChildren[i]->Update(pT,&this->mIdentity);
}
}
这是我的绘图功能:
void Cube::Draw(void)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(value_ptr(this->mIdentity));
gluLookAt(0,10,0,0,10,-1,0,1,0);
DrawCube();
Node::Draw();
}