这里我有两点其中一个是固定的,另一个是通过鼠标点击改变我希望固定点移动到移动的一个并在输出中显示它的运动..直到现在固定点(黄色)确实没有移动到红色
#include <iostream>
#include <stdlib.h> //Needed for "exit" function
//Include OpenGL header files, so that we can use OpenGL
#include <glut.h>
using namespace std;
void init();
void display();
float a = 200.0, b= 200.0;
void setPoint(float x, float y){
glColor3f(1.0, 0.0, 0.0); //drawing object
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
int m=50;
int n=50;
void setPoint2(int m,int n){
glColor3f(1.0, 1.0, 0.0); //drawing object
glBegin(GL_POINTS);
glVertex2f(m,n);
glEnd();
}
void init(){
glClearColor(1.0,1.0,1.0,1.0);
gluOrtho2D(0.0, 400.0, 0.0, 300.0);
}
void display(){
glClear( GL_COLOR_BUFFER_BIT); //defult point
glPointSize(10.0);
setPoint(a,b);
setPoint2(m,n);
glFlush();
}
void update(){
while(a!=m || b!=n){
if(a>m&&b>n)
{
m++;
n++;
setPoint2(m,n);
}
else if(a>m&&b<n)
{
m++;
n--;
setPoint2(m,n);
}
else if(a<m&&b>n)
{
m--;
n++;
setPoint2(m,n);
}
else if(a<m&&b<n)
{
m--;
n--;
setPoint2(m,n);
}
// glTranslatef(m,n,0);
}
}
void mouse(int mouse, int state, int x, int y){
switch(mouse){
case GLUT_LEFT_BUTTON:
if(state == GLUT_DOWN){
cout << x << " -> " << y << endl;
/*a=x;
b=y;*/
a = x/1.0;
b = 300.0 - (y/1.0);
glutPostRedisplay();
}
break;
}
}
int main(int argc, char* argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(400,300);
glutInitWindowPosition(200,100);
glutCreateWindow("OpenGL Program");
init();
glutDisplayFunc(display);
glutMouseFunc(mouse);
//glutTimerFunc(25,update, 0); //Add a timer
glutMainLoop();
return 0;
}
在调试红点(变量1)时出现,鼠标点击固定的问题(黄色),它没有移动到我想要的红色
答案 0 :(得分:0)
这里最明显的两个问题是你似乎没有任何调用更新功能的东西,如果你这样做,你的移动代码专门只做对角线移动,所以如果这些点是水平的或垂直线,它们不会移动。
我使用GLUT已经有一段时间了,但我认为一般要做的就是将update()逻辑放入'idle'回调中,并在其末尾执行glutPostRedisplay()
。
除此之外,使用如此多的全局变量,特别是单字符命名的全局变量,其名称与函数参数的名称相反,是非常令人困惑的。