#include <gl/glut.h>
#include <stdlib.h>
GLsizei wh = 500, ww = 500; /* 초기 윈도우 크기 */
GLfloat size = 3.0; /* 사각형 변 길이의 절반 */
GLint rx, ry;
int t=0;
void myinit(void)
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glViewport(0, 0, ww, wh);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble)ww,0.0,(GLdouble)wh);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void drawSquare(int x, int y)
{
y=wh-y;
if(t==0)
glColor3ub( (char)rand()%256, (char)rand()%256, (char)rand()%256); //stdlib.h
else
glColor3ub(0,0,0);
glBegin(GL_POLYGON);
glVertex2f(x+size, y+size);
glVertex2f(x-size, y+size);
glVertex2f(x-size, y-size);
glVertex2f(x+size, y-size);
glEnd();
glFlush();
}
void myReshape(GLsizei w, GLsizei h)
{
/* 절단 상자 조절 */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/* 시역의 조절 */
glViewport(0,0,w,h);
ww=w;wh=h;
}
void mouse(int btn, int state, int x, int y)
{
//작성하시오
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
drawSquare( x, y);
if(btn==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN)
{
rx = x;
ry = wh - y;
}
}
void Motion( int x, int y)
{
drawSquare(x, y);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();//clear 명령을 즉각 실행
}
void MyMainMenu(int id)
{
if(id == 1) exit(0);
else if (id == 2) t=0;
}
void MySubMenu1(int id)
{
if (id == 1) t=1;
else if(id == 2) glutPostRedisplay();
}
void MySubMenu2(int id)
{
if (id == 1) size=size*2;
else if(size>1) size=size/2;
}
void key(unsigned char k, int xx, int yy){
glColor3f(1.0,1.0,1.0);
glRasterPos2i(rx,ry);
glutBitmapCharacter(GLUT_BITMAP_9_BY_15,k);
rx +=glutBitmapWidth(GLUT_BITMAP_9_BY_15,k);
//바로 출력
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutCreateWindow("square");
myinit ();
// 작성하시오
GLint MySubMenuID1 = glutCreateMenu(MySubMenu1);
glutAddMenuEntry("Pixel", 1);
glutAddMenuEntry("All", 2);
GLint MySubMenuID2 = glutCreateMenu(MySubMenu2);
glutAddMenuEntry("Increase Square Size", 1);
glutAddMenuEntry("Decrease Square Size", 2);
GLint MyMainMenuID = glutCreateMenu(MyMainMenu);
glutAddMenuEntry("Quit", 1);
glutAddMenuEntry("Draw", 2);
glutAddSubMenu("Erase", MySubMenuID1);
glutAddSubMenu("Resize", MySubMenuID2);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutKeyboardFunc(key);
glutMouseFunc(mouse);
glutMotionFunc(Motion);
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
코드는 이거이고요
질문 : 마우스 오른쪽 버튼 누르면 메뉴 나오는데요
픽셀 단위로 지우려고 하는데 전체가 지워질때가 있습니다..
같은 코드인데 될때도 있고요... 어떻게 해야할까요??
댓글 0