Переход к мышке Поз OpenGL - PullRequest
0 голосов
/ 24 мая 2011

У меня есть программа, которая перемещает объект одним щелчком мыши. Я использую gluUnProject, и иногда, когда я щелкаю куда-то, объект движется не так, как мне хочется, мое уравнение иногда работает нормально, но иногда оно не работает, и я думаю,как-то вращая объект и получая x и z неправильно ... так вот как я делаю это

я инициализирую эти 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как это

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 ]

1 голос
/ 24 мая 2011

Я думаю, что ваш подход слишком сложен.Подумайте в векторах intead отдельных 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;
}
0 голосов
/ 26 мая 2011

я обнаружил, что сегодня не так: S похоже, что я не использую функцию gluUnproject так, как ее следует использовать, и не нормализую свои векторы позиций, поэтому я получаю действительно большие числа: S sry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...