opengl,更改我的绘图形状

opengl,更改我的绘图形状,opengl,size,glut,Opengl,Size,Glut,我正在制作一个有菜单和子菜单的程序 编辑------------------------------------------------ “形状”子菜单在我调用它时不起作用 当我调用形状菜单时,它必须绘制一个正方形、三角形或圆形 我把我的代码样本放在这里 int WXSIZE=400,WYSIZE=400; float xmin=-5, xmax=5, ymin=-5, ymax=5; int CLEARFLAG=1; float xpos=0,ypos=0; float x=1.0,y

我正在制作一个有菜单和子菜单的程序

编辑------------------------------------------------

“形状”子菜单在我调用它时不起作用

当我调用形状菜单时,它必须绘制一个正方形、三角形或圆形

我把我的代码样本放在这里

    int WXSIZE=400,WYSIZE=400;
float xmin=-5, xmax=5, ymin=-5, ymax=5;
int CLEARFLAG=1;
float xpos=0,ypos=0;
float x=1.0,y=1.0;
float col1=1.0,col2=0,col3=0,col4=0,col5=1.0,col6=0,col7=1.0,col8=1.0,col9=0,col10=0.6,col11=0.4,col12=0.7;
int sub_menu1,sub_menu2,sub_menu3;
int draw=1;
float k=0,l=0.5;

void setupmywindow()
{
    glClearColor(1,1,1,0);
    gluOrtho2D(xmin, xmax, ymin, ymax);
}


void setXYpos(int px, int py)
{
    xpos=xmin+(xmax-xmin)*px/WXSIZE;
    ypos=ymax-(ymax-ymin)*py/WYSIZE;
    printf(">>%d  %d     %f %f\n",px,py,xpos,ypos);
}

....
void triangle(float x,float y){

    draw==3;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(col1,col2,col3);

    glBegin(GL_TRIANGLES);

    glVertex2f(x-l,y+k);
    glVertex2f(x-k,y+l);
    glVertex2f(x+k,y+l);
    glEnd();


}
....
void mydraw(float x,float y)
{
        draw==1;
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
        glShadeModel(GL_FLAT);
        glBegin(GL_QUAD_STRIP);

        glVertex2f(x-l,y+k);
        glVertex2f(x-l,y+l);
        glColor3f(col1,col2,col3);glVertex2f(x+k,y+k);
        glVertex2f(x+k,y+l);
        glVertex2f(x+l,y+k);
        glColor3f(col4,col5,col6);glVertex2f(x+l,y+l);
        glEnd();

        glBegin(GL_QUAD_STRIP);

        glVertex2f(x-l,y-l);
        glVertex2f(x-l,y+k);
        glVertex2f(x+k,y-l);
        glColor3f(col7,col8,col9);glVertex2f(x+k,y+k);
        glVertex2f(x+l,y-l);
        glColor3f(col10,col11,col12);glVertex2f(x+l,y+k);
        glEnd();

}


void mymenu(int n){

switch (n) {

case 1: shape_menu();break;

case 2: size_menu();break;

case 3: color_menu();break;

case 4: clear_menu();break;

case 5: exit_menu();break;

}
glutPostRedisplay();
}

void shape_menu (int n){

switch (n) {

case 2: draw==2;square(xpos,ypos);break;

case 3: draw==3;triangle(xpos,ypos);break;

case 4: draw==4;circle(xpos,ypos);break;


}
glutPostRedisplay();

}
...

void myDisplay()
{
    if(CLEARFLAG) glClear(GL_COLOR_BUFFER_BIT);
    else if (draw==1) {mydraw(xpos,ypos);}
    else if (draw==2) {triangle(xpos,ypos);}
    else if (draw==3) {square(xpos,ypos);}
    else if (draw==4) {circle(xpos,ypos);}
    glutSwapBuffers();
}
问题是,当我选择更改形状时,它没有任何作用。正如您所看到的,我使用“绘制”来调用相关形状。我的显示功能或形状菜单功能中可能有错误。 多谢各位

编辑---------------------------------------------------------------------------

我终于控制住了它,除了一件事。当它画一个圆圈时,我无法移动它。它对窗口中的鼠标点击没有反应。 我的更正如下:

...
void shape_menu (int n){

switch (n) {

case 2: draw=2;break;

case 3: draw=3;break;

case 4: draw=4;break;


}
glutPostRedisplay();

}
...
void myDisplay()
{
    if(CLEARFLAG) glClear(GL_COLOR_BUFFER_BIT);
    else if (draw==1) {mydraw(xpos,ypos);}
    else if (draw==2) {square(xpos,ypos);}
    else if (draw==3) {triangle(xpos,ypos);}
    else if (draw==4) {circle(xpos,ypos);}
    glutSwapBuffers();
}
....
我还从函数中删除了“draw==1”。 给出圆的函数是:

void circle(float x,float y )
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    int numpoints=84;
    glColor3f(col1,col2,col3);
    glBegin( GL_LINE_STRIP );
    int i;
    for(i=0; i<numpoints; i++ )
    {
    float angle = i * (2.0*PI/numpoints);
    x = cos( angle )*l;
    y = sin( angle )*l;

    glVertex2f(x,y);
    }
    glEnd();
}
空心圆(浮动x,浮动y)
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
int numpoints=84;
glColor3f(col1,col2,col3);
glBegin(GL_线_带);
int i;

对于(i=0;iOpenGL不是一个场景图,它是一个绘图API

这意味着,你不需要将对象“添加”到某种层次结构中。你需要做的是存储哪些对象以何种大小绘制,然后在绘制时遍历此列表,并根据其中存储的内容绘制