用于FP相机问题的glutWarpPointer

时间:2017-10-01 05:49:18

标签: c++ opengl graphics

我正在开发一个鼠标控制项目来环顾四周。我已成功使用鼠标旋转相机但是我试图让鼠标在没有鼠标离开屏幕之前完全旋转360转。我四处阅读并遇到了glutWarpPointer(),大多数帖子都说在窗口中心和新鼠标位置之间的差异后使用它。

我的程序导致的问题是,当我移动鼠标时,它将稍微旋转到该帧,将位置重新启动到原始点。基本上我在我面前有一个蓝色的球和绿色的后面当我试图向绿色球旋转时,相机会稍微移动但保持锁定在蓝色的球上。

有办法解决或修复吗?

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);    
    glLoadIdentity();
    //rotate and translating the camera
    glRotatef(-camVert, 1.0, 0.0, 0.0);
    glRotatef(-camHor, 0.0, 1.0, 0.0);
    glTranslatef(-posx,-posy,-posz);

  //blue and green ball
    glPushMatrix();
    glColor3f(0.0, 1.0, 0.0);
    glTranslatef(1, 0, 25);
    glutSolidSphere(5, 20, 20);
    glPopMatrix();

    glPushMatrix();
    glColor3f(0.0,0.0,1.0);
    glTranslatef(0, 0, -25);
    glutSolidSphere(5, 20, 20);
    glPopMatrix();
};

void setAngle(float angy, float angx)
{
    camVert = angy*1.5;

    if (camVert > 90)
        camVert = 90;
    else if (camVert < -90)
        camVert = -90;

    camHor = angx*0.5;


}

void MoveCam(float distance, float direction)
{
    float rads = (camHor+direction)*PI / 180;
    posx -= sin(rads)*distance;
    posz -= cos(rads)*distance;
};

void mouseMove(int x, int y)
{

    float diffx = midx - x;
    float diffy = midy - y;

    setAngle(diffy,diffx);
    //glutWarpPointer(glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT) / 2);


}

0 个答案:

没有答案