Category Archives: OpenGL

OpenGL Picking

4155373035.zip
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/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

OPENGLGLUT-Getting-Started



1. GLUT는 아래 파일을 다운 받아 설치해 주어야 합니다.
압축을 풀어보면 include, lib, system32 세 개의 폴더가 있습니다.

2. Visual Studio .NET 2010이 설치된 디렉토리의 Include와 Lib 폴더에 glut.h와 glut32.lib을 넣는다.
Visual Studio .NET2010의 경우
C:\Program Files\Microsoft Visual Studio 10.0\VC\include\gl 폴더에 glut.h를 넣습니다.
C:\Program Files\Microsoft Visual Studio 10.0\VC\lib폴더에 glut32.lib를 넣습니다.

3. Windows\system32 폴더에 glut32.gll을 넣는다.
C:\Windows\system32 폴더에 glut32.dll를 넣습니다.

** 64-bit 운영체제 (Window7 기준)
C:\Windows\SysWOW64 폴도에도  glut32.dll를 넣습니다.

4. 세팅이 모두 끝나면, 프로젝트를 Win32 Console로 생성(File->New->Project, 템플렛에서 Win32->Win32 Console Application을 선택하고 <your project name>을 넣는다)하고, 아래의 소스를 넣어 컴파일, 실행해 봅니다.

/* minimal program to open & clear a window */
#if !defined(__APPLE__)
#include <GL/glut.h>
#else
#include <GLUT/GLUT.h>
#include <stdlib.h>
#endif

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
void init()
{
glClearColor(0.0, 0.0, 1.0, 1.0);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 0x1B:
case ‘q’:
case ‘Q’:
exit(0);
break;
}
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(200, 200);
glutInitWindowPosition(0,0);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
init();
glutKeyboardFunc(keyboard);
glutMainLoop();
}

5. 이때, opengl32.lib glu32.lib glut32.lib 라이브러리 링크를 걸어줍니다.
Visual Studio .NET 2010의 경우 Project->Properties(ALT+F7)->Configuration Properties탭->Linker탭->Input탭에 Additional Dependencies에 “opengl32.lib glu32.lib glut32.lib”를 넣는다.

6. 컴파일/링크(Build)(F7)후 실행(Debug)(F5)시켜서 파란색화면의 윈도우가 뜨면 완성된 것입니다.