All posts by kpark

OpenGL Picking




pick1.cpp (selection mode)
     -display 함수에서는 정상적으로 객체를 그린다.
     -mouse 함수에서 마우스의 위치값(x,y)를 가지고
          -glSelectBuffer로 네임스택 버퍼를 지정한다.
          -glRenderMode를 GL_SELECT로 지정하여 선택모드로 전환한다.
          -glInitNames으로 네임스택을 초기화한다.
          -gluPickMatrix를 사용하여 뷰볼륨을 지정한 후
          -glPushName/glPopName 또는 glLoadName을 사용하여 네임스택이름을 지정하여
           객체를 그리면, picking 연산이 가능해진다.
          -glRenderMode를 GL_RENDER로 바꾸면, hit record가 네임스택 버퍼에 저장된다.
          -네임스택 버퍼를 처리(processHits) 하여, 해당 객체 ID를 넘겨주어 Pick한다.
          http://www.lighthouse3d.com/opengl/picking/index.php?openglway3

pick2.cpp (bounding box)
     -display 함수에서는 정상적으로 객체를 그린다.
     -mouse 함수에서 마우스의 위치값(x,y)를 가지고
          -각 객체의 bounding box를 안에 들어왔는지 확인하여,
           해당 객체 ID를 넘겨주어 Pick한다.

pick3.cpp (back buffer)
    -display 함수에서는 정상적으로 객체를 그린다.
    -mouse 함수에서 마우스의 위치값(x,y)를 가지고
          -GL_DITHER 를 비활성화한후, 각 객체마다 color code된 그림을 그린다.
          -glReadPixel 로 마우스 위치의 pixel 색을 받아와서 해당 객체의 color와 비교하여,
           해당 객체 ID를 넘겨주어 Pick한다..

OpenGL Display List

눈사람을 36개 그렸을 때, 렌더링 속도에 큰 차이가 없음
Display List 사용한 경우 Frame Rate이 59.94 정도 나옴
Display List를 사용하지 않은 경우 Frame Rate이 59.98 정도 나옴사용자 삽입 이미지
눈사람을 3600개 그렸을 때, 렌더링 속도에 차이가 보임
Display List 사용한 경우 Frame Rate이 13.0 정도 나옴
Display List를 사용하지 않은 경우 Frame Rate이 2.77 정도 나옴사용자 삽입 이미지



GLuint createDL()
{
GLuint snowManDL,loopDL;
snowManDL = glGenLists(1);
loopDL = glGenLists(1);


glNewList(snowManDL,GL_COMPILE);
drawSnowMan();
EndList();


glNewList(loopDL,GL_COMPILE);
for(int i = -30; i < 30; i++) {
    for(int j= -30; j < 30; j++) {
        glPushMatrix();
        glTranslatef(i*10.0,0,j * 10.0);
        glCallList(snowManDL);  
        glPopMatrix();
    }
}
glEndList();


return(loopDL);
}

Human-Computer Interaction

Vannevar Bush – MEMEX
제2차세계대전이 끝난 1945년 바네바 부시는 1939년에 써 두었던 As we may think라는 글을 Atlantic Monthly에 발표. 이 글에서 그는 메멕스(Memex, Memory Extender)라는 가상의 기계를 소개. 이 선구적인 글은 많은 이론가, 과학자들의 주목을 끌었으며, 현재 우리에게 익숙해져 있는 개인용으로 사용되는 정보처리 기계 및 인간과 컴퓨터간의 인터페이스에 대한 최초의 묘사로 여겨지고 있음. 그는 Douglas Engelbart , J.C.R. Licklider, Ivan Sutherland 등 한 세대에 걸친 컴퓨터 과학자들에게 영감을 주어 현대 정보사회가 성립하는데 촉매역할을 한 것으로 기억됨. –출처: 위키백과

J.C.R. Licklider – Man-Computer Symbiosis
당시 컴퓨터란 자료를 조작하여 기계적인 계산을 수행하는 장치였음. 1960년 J.C.R. Licklider가 주창한 인간-컴퓨터 공생 (Man-Computer Symbiosis) 관점은 컴퓨터를 인간의 협력자로 제시함으로써 보다 효과적으로 기능할 수 있고 이러한 상호작용을 통해서 인간이 할 수 있는 이상의 좋은 결과를 얻을 수 있을 것이라고 주장. 인간과 컴퓨터 간의 상호작용(Human-Computer Interaction) 을 최초로 묘사했다.

Steve Russell – Spacewar
MIT 학생 Steve Russell이 Spacewar라는 최초의 상호작용적인 컴퓨터 게임을 개발함. Digital PDP-1 (Programmed Data Processor-1) 컴퓨터와 CRT 스크린을 사용함. 프로그램의 크기는 9K. 상업화를 목적으로 하지 않음. Spacewar는 이미 만들어진 컴퓨터에 프로그램을 짜 넣은 최초의 게임이다.

Ivan Sutherland – Sketchpad
MIT 대학의 Ivan Sutherland 박사학위 논문 The Sketchpad: A Man-Machine Graphical Communication System (1963)는 디자인과 공학을 위해 개발한 최초의 상호작용적인 컴퓨터 그래픽스 시스템. 이를 인간과 컴퓨터의 그래픽 대화의 시작으로 본다.

Nolan Bushnell – Computer Space
1962년 Nolan Bushnell이 University of Utah 공대에 입학하여, Spacewar를 경험함. 1965년 Bushnell이 Salt Lake City 카니발에서 아케이드를 담당하는 여름 인턴을 하게되는데 그 당시 Bushnell은 컴퓨터 게임이 곧 아케이드로 들어올 것으로 기대했으나 컴퓨터가 너무 비싸서 불가능하다는 것을 깨닫게 됨. Bushnell은 1970년 아케이드용 Spacewar인 Computer Space를 만들었다. Bushnell은 1972년 유명한 게임회사인 Atari 를 설립했다.

Douglas Engelbart – NLS (oNLine System)
Douglas Engelbart와 SRI (Stanford Research Institute) 연구자들은 하이퍼링크를 기반으로 마우스를 사용하는 oNLine System (NLS)을 개발함. NLS는 최초로 하이퍼링크, 마우스, 레이저스킨 비디오모니터, 스크린 윈도우(GUI)를 사용. 복잡한 정보와 개념의 공간을 NLS같은 상호 소통할 수 있는 도구를 통해 쉽게 탐험하면서 인간의 지적 능력 증대 (Augmenting human intellect)를 추구함. 1968년도 유타대학교에서 NLS 데모 시연했다.

XeroxPARC – GUI (Graphical User Interface)
1973년에 개발된 Xerox PARC Alto 컴퓨터는 그래픽 사용자 인터페이스 (GUI: Graphical User Interface)를 사용한 최초의 퍼스널 컴퓨터이다. 현재 대부분의 GUI는 기본적으로 이 인터페이스로부터 유래되었으며, 혹자는 이를 PUI(PARC User Interface)라 부른다. PUI는 창, 메뉴, 아이콘, 라디오 단추, 체크 상자 등의 그래픽 요소들을 사용하며, 마우스 같은 장치를 키보드와 함께 사용한다 – WIMP (Windows, Icons, Menus, and Pointing device). 그래픽 사용자 인터페이스에서 어떤 요소에 대한 동작은 그 요소에 해당하는 그래픽을 직접 조작하여 이루어진다.

OpenGL/GLUT Interaction

OpenGL keyboard, mouse, menu interaction
http://dis.dankook.ac.kr/lectures/cg08/entry/OPENGL-interaction

OpenGL single/double buffering, reshape, displaylist, picking
http://dis.dankook.ac.kr/lectures/cg08/entry/OPENGL-display-list-picking

OpenGL Picking Tutorial using Name Stack & Color Coding
http://www.lighthouse3d.com/opengl/picking/


OpenGL Picking Tutorial using Name Stack
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=32

Teapot (using Display List)
http://www.songho.ca/opengl/gl_displaylist.html


Snowman (using Display List)
http://www.lighthouse3d.com/opengl/displaylists/

Box (using Display List)
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=12