'Programming/openGL'에 해당되는 글 91건

  1. 2011.10.02 GLUT 키보드 콜백 함수 총정....리? 2
  2. 2011.09.30 GLUI
  3. 2011.09.30 glEnable() / glDisable()
  4. 2011.09.30 glGet()
  5. 2011.09.28 glGet() 함수 이용하기
  6. 2011.09.27 GLUT keyboard callback function
  7. 2011.09.25 openGL로 싸인곡선 그리기(sin wave) 5
  8. 2011.09.24 webGL
  9. 2011.09.02 depth buffer
  10. 2011.06.09 glGenLists
Programming/openGL2011. 10. 2. 21:12
void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
void glutSpecialFunc(void (*func)(int key, int x, int y));

int x, int y 에는 윈도우의 마우스 좌표가 출력되며
glutSpecialFunc는 F1~F12 / 화살표 / PgUp / PgDn / Home / End / Insert 에 대한 입력을 받고
glutKeyboardFunc 는 그 외에 모든 키보드 입력을 받는다.

glutSpecialFunc 관련해서는 아래의 파일에 정의가 되어있고, 샘플용 콜백함수도 같이 투척!
$ vi /usr/include/GL/freeglut_std.h
124  * GLUT API macro definitions -- the special key codes:
125  */
126 #define  GLUT_KEY_F1                        0x0001
127 #define  GLUT_KEY_F2                        0x0002
128 #define  GLUT_KEY_F3                        0x0003
129 #define  GLUT_KEY_F4                        0x0004
130 #define  GLUT_KEY_F5                        0x0005
131 #define  GLUT_KEY_F6                        0x0006
132 #define  GLUT_KEY_F7                        0x0007
133 #define  GLUT_KEY_F8                        0x0008
134 #define  GLUT_KEY_F9                        0x0009
135 #define  GLUT_KEY_F10                       0x000A
136 #define  GLUT_KEY_F11                       0x000B
137 #define  GLUT_KEY_F12                       0x000C
138 #define  GLUT_KEY_LEFT                      0x0064
139 #define  GLUT_KEY_UP                        0x0065
140 #define  GLUT_KEY_RIGHT                     0x0066
141 #define  GLUT_KEY_DOWN                      0x0067
142 #define  GLUT_KEY_PAGE_UP                   0x0068
143 #define  GLUT_KEY_PAGE_DOWN                 0x0069
144 #define  GLUT_KEY_HOME                      0x006A
145 #define  GLUT_KEY_END                       0x006B
146 #define  GLUT_KEY_INSERT                    0x006C 

void keyboard_spe(int key, int x, int y)
{
    switch (key)
    {
        case GLUT_KEY_F1:
        case GLUT_KEY_F2:
        case GLUT_KEY_F3:
        case GLUT_KEY_F4:
        case GLUT_KEY_F5:
        case GLUT_KEY_F6:
        case GLUT_KEY_F7:
        case GLUT_KEY_F8:
        case GLUT_KEY_F9:
        case GLUT_KEY_F10:
        case GLUT_KEY_F11:
        case GLUT_KEY_F12:
            break;
        case GLUT_KEY_LEFT:
        case GLUT_KEY_RIGHT:
        case GLUT_KEY_UP:
        case GLUT_KEY_DOWN:
            break;
        case GLUT_KEY_PAGE_UP:
        case GLUT_KEY_PAGE_DOWN:
            break;
        case GLUT_KEY_HOME:
        case GLUT_KEY_END:
        case GLUT_KEY_INSERT:
            break;

        default:
           break;
    }
}

void keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
      default:
          break;
    }
}

void main()
{
  // ...
  glutKeyboardFunc(keyboard);
  glutSpecialFunc(keyboard_spe);
  // ...
}

연유는 모르겠으나,
glutSpecialFunc()와 glutKeyboardFunc() 의 key는 char와 int 형으로 크기가 다르게 정의되어 있으니 주의요망!

2011/09/27 - [Programming/openGL] - GLUT keyboard callback function
2011/03/28 - [Programming/openGL] - openGL callback function - GLUT 키보드 / 마우스 입력

'Programming > openGL' 카테고리의 다른 글

glutTimerFunc()  (0) 2011.10.05
gluLookAt() 의 기본값  (0) 2011.10.02
GLUI  (0) 2011.09.30
glEnable() / glDisable()  (0) 2011.09.30
glGet()  (0) 2011.09.30
Posted by 구차니
Programming/openGL2011. 9. 30. 13:55
GLUI는 C++ 기반의(으악!) GLUT로 만든 User Interface 라이브러이다.
C++이라니 웬지 거부감이.. 들지만 OTL
openGL/GLUT와 마찬가지로 멀티플랫폼을 지원하는 2차원 인터페이스를 작성하는데에는 꽤 괜찮은 선택이라고 보여진다.


[링크 : http://glui.sourceforge.net/]

ubuntu에서는 libglui-dev 로 설치하면 끝!
[링크 : http://packages.debian.org/lenny/libglui-dev]

'Programming > openGL' 카테고리의 다른 글

gluLookAt() 의 기본값  (0) 2011.10.02
GLUT 키보드 콜백 함수 총정....리?  (2) 2011.10.02
glEnable() / glDisable()  (0) 2011.09.30
glGet()  (0) 2011.09.30
glGet() 함수 이용하기  (0) 2011.09.28
Posted by 구차니
Programming/openGL2011. 9. 30. 12:32
void glEnablei(GLenum cap, GLuint index);
void glDisablei(GLenum cap, GLuint index);

glGet()에서 빼올수 있다는건 다른데서 설정을 하기 때문인데
이러한 설정들은 glEnable() / glDisable()을 통해 이루어진다. 


[링크 : http://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml]
2011/09/30 - [Programming/openGL] - glGet() 

'Programming > openGL' 카테고리의 다른 글

GLUT 키보드 콜백 함수 총정....리?  (2) 2011.10.02
GLUI  (0) 2011.09.30
glGet()  (0) 2011.09.30
glGet() 함수 이용하기  (0) 2011.09.28
GLUT keyboard callback function  (0) 2011.09.27
Posted by 구차니
Programming/openGL2011. 9. 30. 12:08
void glGetBooleanv( GLenum   pname, GLboolean *   params);
void glGetDoublev( GLenum   pname, GLdouble *   params);
void glGetFloatv( GLenum   pname, GLfloat *    params);
void glGetIntegerv( GLenum   pname, GLint *   params);

glGet()의 인자들만 추려내보니 엄청 많다는걸 새삼 깨닫는중
아래의 인자들은 /usr/include/GL/gl.h 에 포함되어 있다.

시간되면 형(type)이랑 리턴되는 변수 갯수에 따라서 정리 해야할듯.
 

'Programming > openGL' 카테고리의 다른 글

GLUI  (0) 2011.09.30
glEnable() / glDisable()  (0) 2011.09.30
glGet() 함수 이용하기  (0) 2011.09.28
GLUT keyboard callback function  (0) 2011.09.27
openGL로 싸인곡선 그리기(sin wave)  (5) 2011.09.25
Posted by 구차니
Programming/openGL2011. 9. 28. 22:45
glGet() 함수 사용법을 익힐겸 해보니 흐음..
일단 아무런 설정없이 openGL 에서 생성해서 해보니 다음과 같은 행렬을 뽑아내준다.


GL_MODELVIEW_MATRIX
1.000000 0.000000 0.000000 0.000000 
0.000000 1.000000 0.000000 0.000000 
0.000000 0.000000 1.000000 0.000000 
0.000000 0.000000 0.000000 1.000000 
GL_PROJECTION_MATRIX
1.000000 0.000000 0.000000 0.000000 
0.000000 1.000000 0.000000 0.000000 
0.000000 0.000000 1.000000 0.000000 
0.000000 0.000000 0.000000 1.000000  

주석을 풀고 변경된 크기로 보면은 다음과 같이 나온다.

 
GL_MODELVIEW_MATRIX
1.000000 0.000000 0.000000 0.000000 
0.000000 1.000000 0.000000 0.000000 
0.000000 0.000000 1.000000 0.000000 
0.000000 0.000000 -5.000000 1.000000 
GL_PROJECTION_MATRIX
1.732051 0.000000 0.000000 0.000000 
0.000000 1.732051 0.000000 0.000000 
0.000000 0.000000 -1.105263 -1.000000 
0.000000 0.000000 -2.105263 0.000000 

gluLookat()에 의해서 MODELVIEW_MATRIX에서 -5가 추가된듯 하고
PROJECTION은 이해불가 ㅋㅋㅋ
void reshape(int w, int h)
{
	GLdouble mat[16];
	int i=0;

	glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
/*
	glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);

	glMatrixMode(GL_MODELVIEW); //GL_PROJECTION
		glLoadIdentity();
		gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
*/
	printf("GL_MODELVIEW_MATRIX\n");
	glGetDoublev(GL_MODELVIEW_MATRIX,mat);
	for(i=0; i<16;i++)
	{
		printf("%f ",mat[i]);
		if(i % 4 == 3) printf("\n");
	}

	printf("GL_PROJECTION_MATRIX\n");
	glGetDoublev(GL_PROJECTION_MATRIX,mat);
	for(i=0; i<16;i++)
	{
		printf("%f ",mat[i]);
		if(i % 4 == 3) printf("\n");
	}
}

[링크 : http://www.morrowland.com/apron/tutorials/gl/gl_matrix.php]
[링크 : http://www.opengl.org/sdk/docs/man/xhtml/glGet.xml]

[링크 : http://www.songho.ca/opengl/gl_transform.html
[링크 : http://www.cprogramming.com/tutorial/3d/rotationMatrices.html

'Programming > openGL' 카테고리의 다른 글

glEnable() / glDisable()  (0) 2011.09.30
glGet()  (0) 2011.09.30
GLUT keyboard callback function  (0) 2011.09.27
openGL로 싸인곡선 그리기(sin wave)  (5) 2011.09.25
webGL  (0) 2011.09.24
Posted by 구차니
Programming/openGL2011. 9. 27. 22:58
GLUT의 키보드 관련 콜백함수는 두가지가 존재한다.
glutkeyboardFunc()
glutspecialFunc()

glutkeyboardFunc()는 일반적인 아스키 값들을 받아 들인다면
glutspecialFunc()는 F1~F12 / PgUp / PgDn / Home / End / Insert 를 받아들인다.


[링크 : http://www.opengl.org/resources/libraries/glut/spec3/node49.htmlglutkeyboardFunc() 
[링크 : http://www.opengl.org/resources/libraries/glut/spec3/node54.htmlglutspecialFunc()
[링크 : http://freeglut.sourceforge.net/docs/api.php]

2011/03/28 - [Programming/openGL] - openGL callback function - GLUT 키보드 / 마우스 입력

'Programming > openGL' 카테고리의 다른 글

glGet()  (0) 2011.09.30
glGet() 함수 이용하기  (0) 2011.09.28
openGL로 싸인곡선 그리기(sin wave)  (5) 2011.09.25
webGL  (0) 2011.09.24
depth buffer  (0) 2011.09.02
Posted by 구차니
Programming/openGL2011. 9. 25. 22:02
오랫만에 하려니 sin() 함수가 radian 값을 받는것도 깜박잊고 꽤나 헤매게 만드네..

   
#include "GL/gl.h"
#include "GL/glu.h"
#include "GL/glut.h"
#include "math.h"

static int year = 0, day = 0;

void display(void)
{
        int temp;
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1.0, 1.0, 1.0);

        glPushMatrix();
                glBegin(GL_POINT);
                for(temp = 0; temp < 360; temp++)
                {   
                        glVertex3f(0.01*temp - 2,sin(3.1415927/180*temp),0);
                }   
                glEnd();
        glPopMatrix();

        glutSwapBuffers();
}

void reshape(int w, int h)
{
        glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
        glMatrixMode(GL_PROJECTION);
                glLoadIdentity();
                gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
    
        glMatrixMode(GL_MODELVIEW); //GL_PROJECTION
                glLoadIdentity();
                gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

void keyboard(unsigned char key, int x, int y)
{
        switch (key)
        {   
          default:
                  break;
        }   
}

int main(int argc, char** argv)
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
        glutInitWindowSize(500, 500);
        glutInitWindowPosition(100, 100);
        glutCreateWindow(argv[0]);

        glClearColor(0.0, 0.0, 0.0, 0.0);
        glShadeModel(GL_FLAT); //GL_SMOOTH

        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
        glutKeyboardFunc(keyboard);
        glutMainLoop();
        return 0;
}

'Programming > openGL' 카테고리의 다른 글

glGet() 함수 이용하기  (0) 2011.09.28
GLUT keyboard callback function  (0) 2011.09.27
webGL  (0) 2011.09.24
depth buffer  (0) 2011.09.02
glGenLists  (0) 2011.06.09
Posted by 구차니
Programming/openGL2011. 9. 24. 15:53
openGL ES2.0 기반의 웹용 GL 이다.

[링크 : http://www.khronos.org/webgl/]
[링크 : http://www.khronos.org/webgl/wiki/Main_Page] << 여기에 데모용 있음
[링크 : http://ko.wikipedia.org/wiki/WebGL

---
Intel GMA915를 내장하는 XNOTE LW20 express + 크롬 에서 실행하니 어라 안되네?

지원되는 운영체제

Windows Vista 및 Windows 7(권장)
Mac OS 10.5 및 Mac OS 10.6(권장)
Linux

 
그래픽 카드

다음 그래픽 카드가 있는 경우에는 WebGL이 지원되지 않으며 기본적으로 사용중지됩니다.

모든 운영체제
    NVIDIA GeForce FX Go5200
Windows
    Intel GMA 945
Mac
    ATI Radeon HD2400
    ATI Radeon 2600 시리즈
    ATI Radeon X1900
    GeForce 7300 GT
Linux
    AMD/ATI
    Intel: 7.9 이전의 Mesa 드라이버
 
[링크 :http://www.google.com/support/chrome/bin/answer.py?answer=1220892
 

glxinfo를 쳐보니
OpenGL renderer string: Mesa DRI Intel(R) 915GM GEM 20091221 2009Q4 x86/MMX/SSE2
OpenGL version string: 1.4 Mesa 7.7.1
음.. 메사가 7.7.1 버전이라 그런가..


----
2011.09.26 추가
AMD 4200+x2 / WinXP SP3 / Nvidia Geforce8800GT 512MB / 266.58  / 크롬


아래 샘플을 돌리니 대략 60% CPU 점유율을 차지하고,
다른탭을 누르면 cpu사용률이 0%로 되는것을 봐서는 활성화 되었을때만 렌더링을 하는 것으로 보인다.



[링크 : http://www.khronos.org/webgl/wiki/Demo_Repository]
    [링크 : https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/demos/webkit/Earth.html

'Programming > openGL' 카테고리의 다른 글

GLUT keyboard callback function  (0) 2011.09.27
openGL로 싸인곡선 그리기(sin wave)  (5) 2011.09.25
depth buffer  (0) 2011.09.02
glGenLists  (0) 2011.06.09
glutIdleFunc  (0) 2011.05.13
Posted by 구차니
Programming/openGL2011. 9. 2. 07:53
glVertex() 함수들을 보는데 x,y,z,w 라는 변수들이 있길래
w는 어떤값인지 찾아보니 depth buffer를 위한 값이라고 한다.
일반적으로 깊이값은 Z로 하지 않나? 싶긴한데 흐음..
clipping과 관련된것 같기도 하고.. 모호하네..

[링크 : http://msdn.microsoft.com/en-us/library/dd374160(v=vs.85).aspx]
[링크 : http://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml]
[링크 : http://msdn.microsoft.com/en-us/library/bb976071.aspx]

[링크 : http://en.wikipedia.org/wiki/Z-buffering]
[링크 : http://www.opengl.org/resources/faq/technical/depthbuffer.htm]

'Programming > openGL' 카테고리의 다른 글

openGL로 싸인곡선 그리기(sin wave)  (5) 2011.09.25
webGL  (0) 2011.09.24
glGenLists  (0) 2011.06.09
glutIdleFunc  (0) 2011.05.13
openGL 좌표계  (0) 2011.05.06
Posted by 구차니
Programming/openGL2011. 6. 9. 20:55
openGL에서 List는 일련의 명령어들을 저장해 놓는 기능을 한다(고 한다)

glGenLists() 를 통해 배열을 만들고
glNewList() 와 glEndList() 사이의 gl 명령어들을 저장한다.
그리고 리스트는 glCallList()를 통해 사용한다.
New가 있으면 Delete가 있듯, glDeleteLists()로 생성한 List를 삭제하면 된다.

이러한 list에는 상태관련 명령어는 들어가지 못한다.

Remember that you cannot place any client state commands in the display list, therefore,glEnableClientState()glVertexPointer() and glNormalPointer() should not be included in the display list.

[링크 : http://www.songho.ca/opengl/gl_displaylist.html] 
 

Some OpenGL commands cannot be stored in a display list; for example: 
 
glColorPointer() 
glDeleteLists() 
glDisableClientState() 
glFlush() 
glGenLists() 
glGet*() 
glNormalPointer() 
glPixelStore() 
glReadPixels() 
 
-   Commands that set client state and commands that retrieve state values are executed immediately 
-   Calling glNewList within a glNewList / glEndList pair will generate an error
 
[링크 : http://www.movesinstitute.org/~mcdowell/mv4202/notes/lect9.pdf] 

[링크 : http://ivis.cwnu.ac.kr/wiki/index.php/MultipleViewport]

[링크 : http://www.opengl.org/sdk/docs/man/xhtml/glCallList.xml]
[링크 : http://www.opengl.org/sdk/docs/man/xhtml/glCallLists.xml]
  [링크 : http://www.opengl.org/sdk/docs/man/xhtml/glGenLists.xml] glGenLists
    [링크 : http://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml] glNewList
    [링크 : http://www.opengl.org/sdk/docs/man/xhtml/glEndList.xml] glEndList
[링크 : http://www.opengl.org/sdk/docs/man/xhtml/glDeleteLists.xml]

'Programming > openGL' 카테고리의 다른 글

webGL  (0) 2011.09.24
depth buffer  (0) 2011.09.02
glutIdleFunc  (0) 2011.05.13
openGL 좌표계  (0) 2011.05.06
openGL - DoF  (2) 2011.05.03
Posted by 구차니