开发者社区> 问答> 正文

我是新手。。关于Opengl编程的问题。。? 400 报错

我是新手。。关于Opengl编程的问题。。? 400 报错

各位大虾好。最近在编一个程序,关于机器人的。因为我之前不太懂编程,所以这次遇到了些问题。下面是我程序的部分代码:

GLfloat x = 0;
GLfloat y = 0;
GLint menu_id = 0;
GLUquadricObj *p;
GLboolean play = GL_FALSE;


void display()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   gluLookAt(0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  
   glTranslatef(x, y, 0.0);
   glColor3f(0.0, 0.0, 0.0);
   object();
  
   glutSwapBuffers();
}
void idle()
{
 if (play) {
  x += 0.1;
  y += 0.1;
  if (x > 8-0.5*torso_length) x = -8+0.5*torso_length;
  if (y > 8-2*torso_radius-neck_height-2*head_bottomRadius) y = -8+2*leg_height+0.02+torso_radius;
 }
    else {
 }
    glutPostRedisplay();
}

void mymenu(int id)
{
   if(id == 1) idle();
   if(id == 2) return;
   if(id == 3) return;
}

int main(int argc, char **argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize(600, 600);
   glutInitWindowPosition(0 ,0);
   glutCreateWindow("Lab4");
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glEnable(GL_DEPTH_TEST);
   init();
   menu_id = glutCreateMenu(mymenu);
   glutAddMenuEntry("Translating", 1);
   glutAddMenuEntry("Bending", 2);
   glutAddMenuEntry("Rotating", 3);
   glutAttachMenu(GLUT_RIGHT_BUTTON);
   glutIdleFunc(idle);
   glutMainLoop();
}

需求是这样的,创建一个menu来控制机器人,其中有一项是对机器人的整体平移,要求第一次点击菜单那项时,机器人移动,第二次点时停止。我先把所有的组件(胳膊什么的)都在object()这个函数里组装好了。现在我图像、菜单都能正常显示,但是点击菜单它却不动。。我也不知道哪里出错了,请大家帮我看看。。

展开
收起
爱吃鱼的程序员 2020-06-02 13:45:16 304 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    不太理解OPENGL和机器人有什么关系。你把问题本身得说清楚。
    ######回复 @炫紫调 : opengl以前我曾摸过一段时间。我个人给你个建议,用C++之类的面向对象先建好模型后,OPENGL只是VIEW部分的工作。别混在一起。######用opengl里的组件画一个立体的机器人,机器人的身体由多个长方体组成。######

    你这个上面的代码只是用OpenGL里面的函数实现了组合图形的显示,并没有具体的操作事件触发代码!实现的方法有许多,这里就不赘述了!

    ######请高手分析下……迷茫ing~######id==1的话程序会调用idle(),在这个函数里有触发的全局变量play啊。。###### void mymenu(int id)
    {
       if(id == 1) idle();
       if(id == 2) return;
       if(id == 3) return;

    }

    id是你的菜单id,这里要添加你的相应函数


    2020-06-02 13:45:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载