香港专业教育学院有一个程序,用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中随机移动的任何东西,大声笑了吗?

最佳答案

我认为您的方法过于复杂。向量中的东西,而不是单个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;
}

关于c++ - 移至Mouse Pos OpenGL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6114105/

10-11 10:32