Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom
Bar]
Miguel Angel Sepulveda


���ڿ��� �����ϱ�

example2.c

Makefile

OpenGL���α׷��� : ���� ���� �ڼ��� �˾ƺ���




�� �׸���

���� �ð��� �츮�� OpenGL���� ��� �ٰ����� �̷�� �⺻ ��ҵ��� ���캸�Ҵ�. ������ OpenGL�� ��,����,�ٰ���, ���׸� �ﰢ�� ���� �簢������ �������� �̷���� ��� �����ϴ� �⺻ ����ü�� ����� �ʴ´�.

�̷� OpenGL�� �ܼ��Կ� ������ �ǹ̴� �ᱹ �̷��� ������ ��ü���� �̿��Ͽ� ������ �������� ���� ����� ���� �����ڿ� �޷��ִٴ� ���̴�. OpenGL���� ��,��,�ٰ������� �ڼ��� �ٷ�� �ִ� ���� ���ɾ���� �����Ѵ�.

���� ���� ũ�⸦ �����ְ� �ʹٸ� glPointSize������ �̿��ϸ� �ȴ�.:


void glPointSize(GLfloat size)

���� ũ��� �⺻������ 1.0���� �־��� ������, �� �Լ����� size�� �ݵ�� 0���� Ŀ�� �Ѵ�. ���� ũ�⸦ �Ǽ������� �����Ѵٴ� ���� �������. ���� ���� ũ�⸦ �м��÷� ��Ÿ���� �� ���� �����ϴ�. OpenGL�� ������ ���ؽ�Ʈ�� ���� �м������� �־��� ���� ũ�⸦ �ؼ��ؼ� �����Ѵ�. ���� ��Ƽ-�ٸ����(Anti-aliasing)��带 �ѵξ��ٸ� OpenGL�� �м��� ���� ��Ÿ�������Ͽ� �ణ�� ������ �ʿ��� ���̶� �ǽɵǴ� �κ��� ã�� �α��� �ȼ��� ���� ������ �Ѵ�.��Ƽ�ٸ������ ���ػ��� ����Ϳ��� ������ �����ٶ� �߻��ϴ� ���� ��ܸ���� ������ �ֱ� ���Ͽ� ���Ǿ����⵵ �ϴ� ����̴�. ���� ��Ƽ�ٸ���̸�尡 �����ִٸ� glPointSize���� �� ��/���� ũ��(size)�� �ݿø��Ǿ� ����� ������ �ٲ��.

���� ���� ũ��� ��ġ�� ���� �ٸ���. ���� ���� �ػ��� ����Ϳ��� ���� ���� �� Ŀ���̰Եȴ�. �׷��� �÷��Ϳ� ���� �ſ� ���� �ػ󵵸� ���� ��ġ���� �⺻�� 1�� ������ ���� �׸��ٸ� ���� �� �� ���������� �β��� ���� ���� �׷�����. ������ �׷����� ���� �α��� �˰��ʹٸ� �������� ���� �����ġ�� ��Ȯ�� ���� �ػ󵵸� �˰� �־�� �Ѵ�.

���� ����� glLineWidth�Լ����� ������ �� �ִµ�, �� �Լ��� ���� �׸��� �κ��� ����ִ� glBegin() - glEnd() ������ ȣ��Ǿ�� ���ο� ���Ⱑ ����Ǿ� �׷�����. ������ �̷���.:


void glLineWidth(GLfloat width)

OpenGL�� ���࿡�� ��Ƽ�ٸ���̵��� �ʴ� ���� �β��� ���� �� �ִ� ������ �ִ� ��Ƽ�ٸ���̼��� �β������� ���ѵǾ� �ֱ⶧���� �ݿø��Ǿ� ����� �������� ���ȴ�. ���� �β��� ������ ������������ ��Ÿ���� ���� �ƴϴ�. ���� ���Ⱑ 1���� �۴ٸ� y������� ũ�Ⱑ �Ǹ� �ݴ�� 1���� ũ�ٸ� x������ ������ ���밪�� ���� ũ�Ⱑ �ȴٴ� ���� ��������.

�̹��޿��� ���������� ������ 2���� �ִϸ��̼����α׷��� �ۼ��غ���. �� ���α׷��� �������� �ۼ��ϴ� OpenGL���α׷����� �پ��� �β��� ���� ���� ��� ����ϴ��� �����ϴµ� ������ �� ���̴�. (example2.c, Makefile). ���� ���� ���ڹ�����å���� ������ ã�Ҵ�. ������å�� ���� "a quantum particle trapped in a double well potential."��� ���� ���´�. �� �׷��� �dzĸ�...�� ���� �ؾ���ȴ�. ��·�� �������� �����ϴ� �л��鿡�� ���ڵ��� �����Ŀ��� �ð��� �����Ҷ���Ÿ ��� ���� ���ϴ°��� �����ִµ� ������ �׸��� �׸� �� �ִ�. �̺о߸� ���������ʴ� ������� �׳� �������ص��� �ʴ� ���ڿ����� �Ӽ��� ���캸�� �ȴ�. ���ڿ��п��� ���ڴ� ��ġ�� �ӵ��� ǥ���Ǵ� ���� �ƴ϶� �����Ķ�� �������� ��Ÿ����.�츮�� �ۼ��� �ִϸ��̼ǿ��� ����� �Ǽ����� ��Ÿ�� �κ��� �����ĸ� ��Ÿ����. �̰��� �־�����ġ(�Ͼ� ����)���� ���ڸ� ������ �� �ִ� Ȯ������ �������� �ǹ��Ѵ�.:

[Click here to see the image]
�׸� 1. ���� �ùķ��̼� ������

��̺й������� Ǯ�� �̷������ ��� �������� �ĵ��������� ���� ǻ������ȯ ���ø������� ����� ����Ͽ� ���еȴ�. �� ����� �ٸ� ���ѹ̺й��� ���� ������ ��Ȯ�� ������ �ִ�. �� ����� ���� �ĵ� Ȯ�꿡�� �̿��� �� �ִ�;�ð������� �ʴ����� �ϵ��� �ϰ�(�Ǵ� �� ���� ������ �� ���� �ִ�) ��ġ�� �����(���ļ�)���� �����ϰ� �Ѵٸ� �ĵ��Լ��� ��ġ�� �����(���ļ�)�������̸� �Դٰ����ϸ鼭 �ٲ�� �� �����ڸ� �����Ͽ� �ð��� �������� ���� �� �� ���� ���̴�.

�ҽ��ڵ��� �ֿ�κ��� �ٸ� ���� �������α׷������� ���� �� �ִ�. �������� ���ڰ� �ۼ��� �ð������Լ��� ���� �̷������ ���ڽùķ��̼��� ���������� �� ���� �ִϸ��̼��� �������� ��ǻ�Ϳ��� �� �� ���� ���̴�. ���� �׷����� �׸��� �Լ��� ������������ �о �׷����� �׷��ִ� ������ OpenGL����� gnuplot�� �ۼ��� �� ���� ���̴�.

�������� ��� GLUT�� OpenGL�� ���� �����縦 �о�Դٸ� �� �ҽ��ڵ�� �ſ� �����ϰ� �����ϱ� ������̴�.(���� ���ڿ��кκ��� �����Ѵ�.) �ҽ��� Ư���� �Լ��� Ư�̻����� ���� ���� �ʴ´�.main()���� �츮�� ���߹��۸��� ���������츦 �� ���� �ĵ��Լ��� �׸��� ������ �ĵ��������� �����ϴ� �۾��� ����ϴ� display()�� idle()�Լ��� �����Ѵ�. �ٽ��ѹ� idel()�Լ��� � ����� ���� �����غ���. �� ���� ������ �����ϱ����� �ٸ� ����(���ڿ����� ���ĵ��)�� �˰��־�� �ϴ� ���� �ƴϴ�. ���� ���ο� OpenGL�� ����� display �ݹ��Լ��̴�:

void
display (void)
{
  static char label[100];
  float xtmp;

  /* �׷��� �κ��� �����. */
  glClear (GL_COLOR_BUFFER_BIT);


  /* ���ָ� �ܴ�.*/
  glColor3f (0.0F, 1.0F, 1.0F);
  sprintf (label, "(c)Miguel Angel Sepulveda 1998");
  glRasterPos2f (-1.1, -1.1);
  drawString (label);


  /* �̼��� ���ڸ� �׸���. */
  glLineWidth (0.5);
  glColor3f (0.5F, 0.5F, 0.5F);
  glBegin (GL_LINES);
  for (xtmp = -1.0F; xtmp < 1.0F; xtmp += 0.05)
    {
      glVertex2f (xtmp, -1.0);
      glVertex2f (xtmp, 1.0);
      glVertex2f (-1.0, xtmp);
      glVertex2f (1.0, xtmp);
    };
  glEnd ();

  /* �ܰ��� �׸�κ��� �׸���.*/
  glColor3f (0.1F, 0.80F, 0.1F);
  glLineWidth (3);
  glBegin (GL_LINE_LOOP);
  glVertex2f (-1.0F, -1.0F);
  glVertex2f (1.0F, -1.0F);
  glVertex2f (1.0F, 1.0F);
  glVertex2f (-1.0F, 1.0F);
  glEnd ();

  /* ����(�׸���)�� �׸���.*/
  glLineWidth (1);
  glColor3f (1.0F, 1.0F, 1.0F);
  glBegin (GL_LINES);
  for (xtmp = -0.5; xtmp < 1.0; xtmp += 0.50)
    {
      glVertex2f (xtmp, -1.0);
      glVertex2f (xtmp, 1.0);
      glVertex2f (-1.0, xtmp);
      glVertex2f (1.0, xtmp);
    };
  glEnd ();

  /* ��ǥ���� �׸���.*/
  glLineWidth (2);
  glBegin (GL_LINES);
  glVertex2f (-1.0, 0.0);
  glVertex2f (1.0, 0.0);
  glVertex2f (0.0, -1.0);
  glVertex2f (0.0, 1.0);
  glEnd ();

  /* �࿡ ���� ���´�.*/
  glColor3f (1.0F, 1.0F, 1.0F);
  sprintf (label, "Position");
  glRasterPos2f (0.80F, 0.025F);
  drawString (label);
  glColor3f (1.0F, 0.0F, 1.0F);
  sprintf (label, " Quantum Probability ");
  glRasterPos2f (0.025F, 0.90F);
  drawString (label);
  glColor3f (1.0F, 1.0F, 1.0F);
  sprintf (label, " Real(Psi) ");
  glRasterPos2f (0.025F, 0.85F);
  drawString (label);

  /* �ĵ��Լ��� �׸���. */
  psiDraw (NR_POINTS, psi, x);

  /* ���ټ��Լ��� �׸���.*/
  potentialDraw (NR_POINTS, potential, x);

  glutSwapBuffers ();
};


��ó�� �� �۾��� �÷����ۺ�Ʈ�� ����� �۾��̴�. �̷��� �ϸ� ������(����) �׸����� �츮�� ��� �ȴ�. �� ���� glRasterPos�� glutBitmapCharacter�Լ��� �̿��Ͽ� ���ָ� �ܴ�. (drawstring�� glut��ƿ��Ƽ�� ���� ������(wrapper)�� �Ұ��ϴ�) ���� ���¿��� �ٽ� �ڼ��� ���캼 glRasterPos�Լ��� �ؽ��� �������� ���� �ΰ��Լ��̴�. OpenGL�̳� GLUT�� �׷��� �����쿡 ���ڸ� �������ϴ� �����ϸ鼭 ������ ����� ������ ���� �ʴ´�. The glutBitmapCharacter�Լ��� �۲� ��Ʈ�ʿ��� �÷� ���۷� �⺻���� �������۾��� �����Ѵ�.

�ּ��� �ް��� ���� �ܰ��簢��, ���ȭ�� ����, ��ǥ��� ���� ���� �׸��� �κ��� �´�. ���� ���� ��� psiDraw �� potentialDraw���� �׷�����. ������ �׸��� ���� �׸����� �ϴ� ���� �β��� �ȼ������� �����ִ� glLineWidth�Լ��� ����Ͽ���. �׸� 1�� ���������ĸӽ��� X������ �ý��ۿ��� ��µ� ȭ���̴�. �� ���α׷��� ������ 95���� �������ؼ� ������׾��µ� ���� �ð��� �ɷȴ�. �� �׷��� ���ڰ� ������ �˾Ƴ��� ������. �Ƹ��� SGI OpenGL����̹����� ��Ƽ�ٸ���̱���� ���������� �ʱ⶧���� �ƴұ�ʹ�. ���������� ���� �ٸ� ������ ���� �����ϴ� ���� �ſ� �����. �׸��� ����� ���ڼ��� ���� �׷����� �Ѵ�. �̷� ���Ե��� ���� �ػ󵵿��� �׸��� ��Ÿ���µ� ���� �ػ󵵸� ������ ����Ͷ����� ������� �ƴϴ�. ��·�� ��95/NT���� ���� �������� X������ý��ۿ��� ������ �� �پ���ٴ� ���� �ٽ� �ѹ� ���صд�.

display() �Լ����� ���� �׸��� �ΰ��� ����� �ִ�. GL_LINES���� ���� �̷�� �� ������ ��� �Է��ϴ� ����̸� GL_LINE_LOOP���� �������� ������� �����Ѵ�.

��Ƽ�ٸ���̱��

reshape() �ݹ��Լ��� ���� �׸��� ��Ƽ�ٸ����嵵 �����ϵ��� �Ͽ���.

void
reshape (int w, int h)
{
  glMatrixMode (GL_MODELVIEW);
  glLoadIdentity ();
  glViewport (0, 0, w, h);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  gluOrtho2D (-1.2, 1.2, -1.2, 1.2);
  glEnable (GL_LINE_SMOOTH);     /* ��Ƽ�ٸ���� �� ������ �׸��� �ְ� �Ѵ�.*/
  glEnable (GL_LINE_STIPPLE);
};

GL_LINE_STIPPLE�� �����ΰ�? OpenGL�� ������ �β��Ӹ� �ƴ϶� �������� ������ �� �ְ� ���ش�. GL_LINE_STIPPLE �� �����ϰ� �Ͽ� �츮�� �����̳� �ٸ� ����� ������ �׸� �� �ִ�. �ִϸ��̼ǿ��� psiDraw()�Լ������� ������ ����Ͽ���.:

  glLineWidth (1);
  glPushAttrib (GL_LINE_BIT);
  glLineStipple (3, 0xAAAA);
  glBegin (GL_LINE_STRIP);
  for (i = 0; i < nx; i++)
    {
      xs = ratio1 * (x[i] - XMIN) - 1.0;
      ys = ratio2 * (psi[2 * i] - YMIN) - 1.0;
      glVertex2d (xs, ys);
    };
  glEnd ();
  glPopAttrib ();

�� ���ٲٱ�

glLineStipple�� ��������� �������ִ� �Լ��ε�, �� �ۿ� ���� ���������� 0xAAAA������ ����Ͽ���. �� ���� �������� ��ȯ�ϸ� 0000100010001000�� �Ǵµ� OpenGL�� �̸� 3��Ʈ�� �����ְ�, �Ѻ�Ʈ ������, 3��Ʈ �����ְ�, 1��Ʈ������, 3��Ʈ ������ 1��Ʈ������, 4��Ʈ���� ���� ������ �׸���. �׷���. �� ������� �ڿ������� �д´�. �ڿ��� ���� �д� ������ �������� ��Ʈ�� ���� ����ϱ⶧���̴�. ���� glLineStipple�� �ΰ��� �Ķ���Ͱ� �����Ǿ���. �ϳ��� ����� �˷��ִ� 16�������̰� �ϳ��� �̷��� ������ �׷��ٶ� ���Ǵ� ������ �˷��ִ� ������ �־�����. �� ���������� 3�̶� �־����Ƿ� ������ �ٽ� ��ȭ�Ǿ� 9ĭ������, 3ĭ ������, 9ĭ ������, 3ĭ ������, 9ĭ ������, 3ĭ ������ �������� 12ĭ ������ �׷� ������ �׸��� �ȴ�. �� ���� �������� ǥ���Ǵ� ������ ������ �������� ��������� ������ �׸� �� ���� ���̴�.

���ݴ� �ڼ��� ���صѰ��� �ִ�.: ���ڴ� ������������ Ǫ��(push)�� ��(pop)�Ӽ�����̿� �ξ���. �������� �� ���� ó�� �����Ҷ� OpenGL�� ���¸ӽ��̶�� ���� �� ����� �ִ°�? �Ƹ� ����ȣ�� �츮�� �� Ǫ�ÿ� �����ۿ� ���Ͽ� �� �ڼ��� ���캼 ���̴�. �׷��� �����ϰ� �����ڸ� ó���� glPushAttrib (GL_LINE_BIT)���� �ϴ� �۾��� GL_LINE_BIT�� ���簪(�� ���� ��������� �����Ѵ�)�� ���ÿ� �״´�. �׸��� ���� glLineStipple �Լ��� �̿��Ͽ� GL_LINE_BIT�� ���� �ٲ۴�. �� ���� �츮�� ���� �ϰ��� �ϴ� �۾��� ������ ���� glPopAttrib �Լ��� �������� ������ GL_LINE_BIT�������� �ٽ� �����´�. �̷��� ����� OpenGL�ӽ��� ���º������� �κ������� �ٲٰ��� �Ҷ� ȿ�����̰� �ȴ�. ���� �̷��� ���� �ʴ´ٸ� ���� �׸��� ���� �ٽ� ������ ��������� �ٲپ��ֱ� ���Ͽ� �Ź� ������ ������ ��������� glLineStipple �Լ��� ȣ�����־�� �Ѵ�. Ǫ�ÿ� �˱���� �̷� ���ŷο� �۾��� �����ش�.

����������....

OpenGL�� ȯ������ 3���� API�������̽��� �˷����ִ�. ���ݱ��� �츮�� OpenGL�� ������ 2���� �������� �⺻���� ����� ���캸�Ҵ�. ���������� 3���� OpenGL���α׷��� ����� ���鼭 �������� ��� �ϰ� �ý����� ��ǥ�� Ŭ���ο����� ��������� �����ϴ��� ���캸��� �ϰڴ�.

����������� OpenGL�� ������ ����ְ� ��� �ٶ���.......


�� �˰��ʹٸ�:

���� : ����ȣ


�� ������Ʈ�� Miguel Angel Sepulveda���� ���� �����˴ϴ�.
© Miguel Angel Sepulveda 1998
LinuxFocus 1998