Miguel Angel Sepulveda ���ڿ��� �����ϱ� example2.cMakefile |
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ĸ�...�� ���� �ؾ���ȴ�. ��·�� �������� �����ϴ� �л��鿡�� ���ڵ��� �����Ŀ��� �� �����Ҷ���Ÿ ��� ���� ���ϴ°��� �����ִµ� ������ �׸��� �׸� �� �ִ�. �̺о߸� ���������ʴ� ������� �׳� �������ص��� �ʴ� ���ڿ����� �Ӽ��� ���캸�� �ȴ�. ���ڿ��п��� ���ڴ� ��ġ�� �ӵ��� ǥ���Ǵ� ���� �ƴ϶� �����Ķ�� �������� ��Ÿ����.�츮�� �ۼ��� �ִϸ��̼ǿ��� ����� �Ǽ����� ��Ÿ�� ��� �����ĸ� ��Ÿ����. �̰��� �־�����ġ(�Ͼ� ����)���� ���ڸ� ������ �� �ִ� Ȯ������ �������� �ǹ��Ѵ�.: �׸� 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 |