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한다..
Category Archives: OpenGL
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
OpenGL/GLUT text & sierpinski gasket
OPENGL bitmap text (using glutBitmapCharacter) & stroke text (using glutStrokeCharacter)
http://dis.dankook.ac.kr/lectures/cg07/entry/OPENGL-bitmap-stroke-text
Sierpinski gasket
http://dis.dankook.ac.kr/lectures/cg07/entry/시어핀스키-가스켓Sierpinski-gasket
OPENGL geometry primitives & attribute
OPENGL geometry primitives and attribute
http://dis.dankook.ac.kr/lectures/cg08/entry/OPENGL-geometry-primitives-attribute-example
OPENGL geometry primitives (circle, cube, cylinder, sphere, square)
http://dis.dankook.ac.kr/lectures/cg08/entry/OPENGL-geometry-primitives
Introductory OpenGL program
OPENGLGLUT-Getting-Started
http://dis.dankook.ac.kr/lectures/cg10/entry/OPENGLGLUT-Getting-Started
-OPENGL/GLUT 설치 (LINUX OS)
http://dis.dankook.ac.kr/lectures/cg08/entry/OPENGLGLUT-Installation
-OPENGL/GLUT 설치 (MAC OS)
http://nainu.springnote.com/pages/1064372.xhtml
1. GLUT는 아래 파일을 다운 받아 설치해 주어야 합니다.
압축을 풀어보면 include, lib, system32 세 개의 폴더가 있습니다.
2. Visual Studio .NET 2010이 설치된 디렉토리의 Include와 Lib 폴더에 glut.h와 glut32.lib을 넣는다.
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\SysWOW64 폴도에도 glut32.dll를 넣습니다.
4. 세팅이 모두 끝나면, 프로젝트를 Win32 Console로 생성(File->New->Project, 템플렛에서 Win32->Win32 Console Application을 선택하고 <your project name>을 넣는다)하고, 아래의 소스를 넣어 컴파일, 실행해 봅니다.
#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 라이브러리 링크를 걸어줍니다.
6. 컴파일/링크(Build)(F7)후 실행(Debug)(F5)시켜서 파란색화면의 윈도우가 뜨면 완성된 것입니다.