wisdiom 아니고 wisdom

[실습 03] 랜덤으로 여러 모양 나오기 본문

👩‍💻/OpenGL

[실습 03] 랜덤으로 여러 모양 나오기

글로랴 2021. 6. 30. 20:23
#include <gl/glut.h>
#include <time.h>
#include <stdlib.h>
GLvoid drawScene(GLvoid);
GLvoid Reshape(int w, int h);

void main()
{
 srand((unsigned)time(NULL));
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
 glutInitWindowPosition(100, 100);
 glutInitWindowSize(800, 600);
 glutCreateWindow("Example2");
 glutDisplayFunc(drawScene);
 glutReshapeFunc(Reshape);
 glutMainLoop();
}

GLvoid drawScene(GLvoid)
{
 int width, height;
 int count = 0;
 int shape = rand() % 4; //0~3
 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
 glClear(GL_COLOR_BUFFER_BIT);

 width = 800 / 3; // 267 정도
 height = 600 / 3; // 200

 for (int i = 0; i < 3; ++i)
 {
  for (int j = 0; j < 3; ++j)
  {
   if (count % 2)
   {
    glColor4f(0.8f, 0.8f, 0.8f, 1.0f);
    glRectf(width * j, height* i, width * j + width, height * i);
    glColor4f(0.5f, 0.5f, 1.0f, 1.0f);

    if (shape == 0)
    {
     glBegin(GL_LINES); // 선
     glVertex2i(20 + (width * j), 20 + (height * i));
     glVertex2i(200 + (width * j), 100 + (height * i));
     glEnd();
    }
    else if (shape == 1)
    {
     glBegin(GL_TRIANGLES); // 삼각형
     glVertex2i(30 + (width * j), 30 + (height * i));
     glVertex2i(100 + (width * j), 100 + (height * i));
     glVertex2i(180 + (width * j), 25 + (height * i));
     glEnd();
    }
    else if (shape == 2)
    {
     glBegin(GL_POLYGON); // 사각형
     glVertex2i(20 + (width * j), 20 + (height * i));
     glVertex2i(150 + (width * j), 20 + (height * i));
     glVertex2i(150 + (width * j), 100 + (height * i));
     glVertex2i(20 + (width * j), 100 + (height * i));
     glEnd();
    }
    else if (shape == 3)
    {
     glBegin(GL_POLYGON); // 오각형
     glVertex2i(80 + (width * j), 20 + (height * i));
     glVertex2i(150 + (width * j), 20 + (height * i));
     glVertex2i(200 + (width * j), 100 + (height * i));
     glVertex2i(10 + (width * j), 150 + (height * i));
     glVertex2i(20 + (width * j), 100 + (height * i));
     glEnd();
    }
   }
   else
   {
    glColor4f(0.9f, 0.9f, 0.9f, 1.0f);
    glRectf(width * j, height* i, width * j + width, height * i + height);

    glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
    if (shape == 0)
    {
     glBegin(GL_LINES);
     glVertex2i(20 + (width * j), 20 + (height * i));
     glVertex2i(200 + (width * j), 150 + (height * i));
     glEnd();
    }
    else if (shape == 1)
    {
     glBegin(GL_TRIANGLES);
     glVertex2i(20 + (width * j), 20 + (height * i));
     glVertex2i(100 + (width * j), 100 + (height * i));
     glVertex2i(180 + (width * j), 40 + (height * i));
     glEnd();
    }
    else if (shape == 2)
    {
     glBegin(GL_POLYGON);
     glVertex2i(20 + (width * j), 20 + (height * i));
     glVertex2i(200 + (width * j), 20 + (height * i));
     glVertex2i(200 + (width * j), 150 + (height * i));
     glVertex2i(20 + (width * j), 150 + (height * i));
     glEnd();
    }
    else if (shape == 3)
    {
     glBegin(GL_POLYGON);
     glVertex2i(80 + (width * j), 20 + (height * i));
     glVertex2i(180 + (width * j), 20 + (height * i));
     glVertex2i(220 + (width * j), 120 + (height * i));
     glVertex2i(110 + (width * j), 170 + (height * i));
     glVertex2i(20 + (width * j), 120 + (height * i));
     glEnd();
    }
   }
   shape++;
   shape = shape % 4;
   count++;
  }
 }

 glFlush();
}
GLvoid Reshape(int w, int h)
{
 glViewport(0, 0, w, h);
 glOrtho(0.0, 800.0, 0.0, 600.0, -1.0, 1.0);
} 

 
반응형
Comments