移动到鼠标Pos OpenGL

时间:2011-05-24 17:03:31

标签: c++ opengl

我有一个程序正在移动一个对象,我的鼠标点击即时通讯使用gluUnProject有时当我点击某个地方对象不移动我想要的方式我的方程似乎有时很好,但有时它不工作,我认为它以某种方式旋转对象并使x和z错误...所以这就是我这样做的方式

我正在初始化这两个变量

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

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随机lol任何想法?

2 个答案:

答案 0 :(得分:1)

我认为你的方法过于复杂。在向量中思考而不是单独的x,y,z。这是一种方式(伪代码):

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;
}

答案 1 :(得分:0)

我发现今天出了什么问题:似乎我没有使用gluUnproject函数的方式应该使用它并且我没有规范我的位置向量所以我得到了非常大的数字:S sry