【发布时间】:2014-04-20 00:20:15
【问题描述】:
好的,所以我的程序打开一个文件,读取 xyz 点,然后从中画出一条线。我最初用 SharpGL(实现为 WPF 窗口)编写了这个程序,它可以工作,但由于使用立即模式而效果不佳,所以我已经转移到 C++ 中的 OpenGL。我已经(有点)想出了 VBO,现在我正在尝试添加鼠标功能。我的问题是我无法用鼠标移动图片,我希望能够单击并“拖动”图片。我的 mouseClickFunc 和 mouseMotion 工作(我的 cout 语句执行),但是似乎我的翻译调用从未被执行(即图片在场景中开始部分“剪辑”,我希望能够拖动它并将其居中)。我知道这是在黑暗中拍摄,但我真的不知道该怎么做。
运动功能:
void mouseMotion(int x, int y)
{
if (moveable)
{
xMove += xTransform(x) - xTransform(xDown);
yMove += yTransform(y) - yTransform(yDown);
xDown = x;
yDown = y;
cout << yMove << "---" << xMove << endl;
glutSwapBuffers();
glutPostRedisplay();
}
}
显示功能:
void RenderFunction(void)
{
++FrameCount;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glOrtho(xMin - 1, xMax + 1, yMin - 1, yMax + 1, -diameter * zScale, diameter * zScale);
// Reset the modelview matrix.
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(xMove, -yMove, 0);
//glViewport((GLint)xMove*100, (GLint)-yMove*100, CurrentWidth, CurrentHeight);
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_LINE_STRIP, 0, 29000);
glPopMatrix();
glutSwapBuffers();
glutPostRedisplay();
}
我确信我需要展示更多代码,这正是我认为问题所在。任何帮助将不胜感激。
这是我看到的控制台输出和屏幕(OpenGL 上下文)的图片。
更新:更新了我的代码。看起来我的坐标在移动,但如果这有意义的话,图片不是。如果您查看我的输出,如果我继续“拖动”图片,您可以在控制台中看到变量 xMove 和 yMove 可以随心所欲地变大或变小,再次翻译就是永远不会移动它。
【问题讨论】:
标签: c++ opengl freeglut translate-animation