为什么不让我在过剩的子窗口中绘制矩形?

问题描述 投票:0回答:0

所以我的任务是创建一个子窗口系统,当我按下开始按钮时,我创建的 glui 系统给出坐标(xmin,ymin,xmax,ymax),在每一侧绘制一个矩形,但它似乎不起作用平局?

这是我的尝试:

#include <stdio.h>
#include <stdlib.h>
#include <GL\glut.h>
#include "glui.h"
#define WINDOW_WIDTH    1000
#define WINDOW_HEIGHT   600
#define RESET           100
#define SET             101
#define SIZE            10.0


int getcode(int x, int y);

void draw_line(int x1, int y1, int x2, int y2);
void draw_rect();
void init_val();
void button_cb( GLUI_Control *control);
void myGlutIdle();
void init_glui();
void disp_main();
void myDisplay_sub_1();
void myDisplay_sub_2(); 

int             main_window,subwindow_1,subwindow_2;
int             xmin_1,ymin_1,xmax_1,ymax_1,numlines_1,xmin,ymin,xmax,ymax,numlines,acc;
GLUI            *glui_h_subwindow, *glui_v_subwindow, *glui_r_subwindow;
GLUI_Panel      *projection_panel;
GLUI_EditText   *xmin_f,*ymin_f,*xmax_f,*ymax_f,*numlines_f;
GLUI_Button     *ok;


int main(int argc, char** argv)
{
    
    glutInit(&argc, argv);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    glutInitDisplayMode( GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA );
    main_window = glutCreateWindow(" C_s_&_L_b_clip ");
    
    
    glutDisplayFunc(disp_main);
    gluOrtho2D(-WINDOW_WIDTH, WINDOW_WIDTH, -WINDOW_HEIGHT, WINDOW_HEIGHT);
    
    init_val();
    init_glui();
 
    // printf("numlines = %d \n",numlines); 
    // printf("xmax=%d , ymax=%d xmin=%d ymin=%d \n",xmax,ymax,xmin,ymin);
 
 
    subwindow_1 = glutCreateSubWindow (main_window, 0,0 , WINDOW_WIDTH/2,WINDOW_HEIGHT);
    glutDisplayFunc(myDisplay_sub_1);
    
    
    subwindow_2 = glutCreateSubWindow (main_window,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
    glutSetWindow(subwindow_2);
    glutDisplayFunc(myDisplay_sub_2);
    
    
    
    glutMainLoop();
    
}

我认为问题出在主系统和窗口大小上,但我认为这是一个猜测!

void disp_main() {
    glutSetWindow(main_window);
    glClear(GL_COLOR_BUFFER_BIT);
}


void myDisplay_sub_1()
{
  glutSetWindow(subwindow_1);   
  glClear(GL_COLOR_BUFFER_BIT);
  glClearColor(0.0,0.1,0.0,0.0);
   
   glColor3f(1.0, 0.0, 0.0);
    draw_rect();
    
  glutSwapBuffers();    
}

void myDisplay_sub_2() 
{   
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 0.0, 0.0);
    draw_rect();
    glutSwapBuffers();
    
}


void draw_line(int x1, int y1, int x2, int y2)
{
  
  glBegin(GL_LINES);
    glVertex2i(x1, y1);
    glVertex2i(x2, y2);
  
  glEnd();
}

void draw_rect()
{
  glBegin(GL_LINES);
  
    glVertex2i(xmin, ymax);
    glVertex2i(xmax, ymax);

    glVertex2i(xmax, ymin);
    glVertex2i(xmin, ymin);

    glVertex2i(xmin, ymax);
    glVertex2i(xmin, ymin);

    glVertex2i(xmax, ymax);
    glVertex2i(xmax, ymin);

   glEnd();
}

void init_val()
{
    xmin = 0;
    xmax = 0;
    ymax = 0;
    ymin = 0;
    numlines = 0;
}


void button_cb( GLUI_Control *control)
{
    if(control->get_id() == SET )
    {
      xmin=xmin_1;
      ymin=ymin_1;
      ymax=ymax_1;
      xmax=xmax_1;
      numlines=numlines_1;
     
    //  printf("numlines = %d \n",numlines); 
    //  printf("xmax=%d , ymax=%d xmin=%d ymin=%d \n",xmax,ymax,xmin,ymin);
    }
}

void myGlutIdle(){
    if ( glutGetWindow() != main_window ) glutSetWindow(main_window);  

    glutPostRedisplay();
}

这里是按钮的 glui 系统:

void init_glui()
{
    
    GLUI_Master.set_glutIdleFunc(myGlutIdle);
        
    //  Create GLUI horizontal subwindow (placed on bottom)
    glui_h_subwindow = GLUI_Master.create_glui_subwindow (main_window, GLUI_SUBWINDOW_BOTTOM);


    projection_panel = glui_h_subwindow->add_panel("Coordinates");
    
    //Textboxes

    xmin_f = glui_h_subwindow->add_edittext_to_panel(projection_panel,"Xmin", GLUI_EDITTEXT_INT, &xmin_1);
   // xmin_f->set_int_val(xmin);

    ymin_f = glui_h_subwindow->add_edittext_to_panel(projection_panel,"Ymin", GLUI_EDITTEXT_INT, &ymin_1);
    //ymin_f->set_int_val(ymin);
    
    xmax_f = glui_h_subwindow->add_edittext_to_panel(projection_panel,"Xmax", GLUI_EDITTEXT_INT, &xmax_1);
    //xmax_f->set_int_val(xmax);

    ymax_f = glui_h_subwindow->add_edittext_to_panel(projection_panel,"Ymax", GLUI_EDITTEXT_INT, &ymax_1);
    //ymax_f->set_int_val(ymax);

    numlines_f = glui_h_subwindow->add_edittext_to_panel(projection_panel,"Numlines", GLUI_EDITTEXT_INT, &numlines_1);
    //numlines_f->set_int_val(numlines);

    //Buttons
    ok = glui_h_subwindow->add_button("START", SET, button_cb);
    

}
c opengl glut freeglut glui
© www.soinside.com 2019 - 2024. All rights reserved.