2011-05-24 102 views
0

我得到了一个程序,正在移动一个对象,用我的鼠标点击即时通讯使用gluUnProject,有时当我点击某处的对象没有移动我想要的方式我的方程似乎有时做得很好,但有时其没有工作,我认为它在某种程度上旋转对象和获取x和z错...所以这是怎么了IM做这个移动到鼠标Pos OpenGL

IM初始化这些2个变量这样

PosP = CVector(20.0,20.0,-30);//PosP is the Starting Position for the char 
oldPos = PosP;//PosP is the Position I am modifying when mouse is clicked 

所以当我点击即时得到PosP like this

gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ); 

std::cout<< posX<<" "<<posY<<" "<<posZ<<std::endl;//printing the results to check everything's fine 

PosP.x = posX; 
PosP.z = posZ; 

所有这一切都是在渲染功能,使每一帧做1个周期

Char(oldPos); 
if((int)oldPos.x != (int)PosP.x) 
    { 
     if((int)PosP.x <= 0) 
     { 
       oldPos.x--;//Checking if posP.x < 0 then its a negative value and decrement 
     } 
     else 
     { 
       oldPos.x++;//Checking if posP.x < 0 then its a positive value and increment 
     } 
    } 
    if((int)oldPos.z != (int)PosP.z) 
    { 
     if((int)PosP.z <= 0) 
     { 
       oldPos.z--; 
     } 
     else 
     { 
       oldPos.z++; 
     } 
    } 

好吧,我知道什么是现在的错误,但我不知道如何解决它的东西是物体移动不惜一切已经离开x或z随机大声笑任何想法?

+0

你认为哪种行为不正确? – Robb 2011-05-24 17:42:16

+0

好吧,当盒子移动时,它刚刚离开平面,而不是我点击的位置,它总是发生在x = 80或更多的点上,x = -80或更少,这也发生在z – Makenshi 2011-05-24 17:46:46

+0

它总是在z大于x时发生例如:x = 20 z = 60或x = -120 z = -80 – Makenshi 2011-05-24 17:53:00

回答

0

我今天发现什么是错的:S好像没有使用gluUnproject IM功能,应该使用等即时通讯变得非常大的数字,我不是归我的位置向量的方式:S sry

1

我认为你的方法过于复杂。想象个别x,y,z的向量intead。这里有一种方法(伪):

if (click) { 
    posP = clickPos 
    d = length(posP - oldPos) 
    numSteps = roundUp(d/speed) // speed in world units per frame. Make sure numSteps > 0! 
    delta = (posP - oldPos)/numSteps 
} 

//each frame: 
if (numSteps > 0) { 
    oldPos += delta; 
    --numSteps; 
}