所以我的任务是创建一个子窗口系统,当我按下开始按钮时,我创建的 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);
}