알아야 할 것들.

Slides:



Advertisements
Similar presentations
5 조 - 음악학과 이수영 5 조 - 음악학과 이수영 사회복지학과 김원미 사회복지학과 김원미 신민지 신민지 이정원
Advertisements

YOUR LOGO SmartBox 진행 상황 Hit & Run 팀 하권용 심유섭 이유진 방대근.
Texture Mapping 년 봄학기 5/23/2014 박경신. OpenGL Texturing  OpenGL 에서 텍스쳐 맵핑 (texture mapping) 을 위한 3 단계 텍스쳐 활성화 glEnable(GL_TEXTURE_2D) 텍스쳐 맵핑방법.
Company 사용자 인터페이스와 멀티미디어 2006 년 1 학기 컴퓨터의 개념 및 실습 Ver. 1.1.
미디어 프로그래밍 II 소개.
한 상 범 LG디스플레이 ㈜ 서울특별시 영등포구 여의대로 128,
IT 패러다임을 바꾼 디지털 리더 한국대학생IT경영학회 교육팀 차헌영 가장 성공한 IT기업은?
사용자 인터페이스와 멀티미디어 2006년 2학기 컴퓨터의 개념 및 실습.
국립생물자원관 교육콘텐츠 02_강낭콩, 싹터요!.
전자영상심판시스템 도입 브리핑 및 시연
TFT-LCD Panel 제조공정 발표자 : 박성현.
OpenGL 실습 1주차.
OpenGL 시작하기.
Chapter 5. 라이팅(Lighting)
7장 디스플레이 리스트.
1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용 4장 – 기하학적 객체와 변환
뇌를 자극하는 Windows Server 2012 R2
COMNSO BACKUOP 1. Comnso backup 이란? P 1 2. Comnso backup.
Woodencoste T - Express 박봉석 이의성.
OpenGL Project (3D 움직이는 자동차)
Program Memorandum - MODEL HOUSE
Sang Il Park Sejong University
SMALL TOWN 조이름 : ~ING < 최종 결과 보고서 >
한 상 범 LG디스플레이 ㈜ 서울특별시 영등포구 여의대로 128,
빛의 합성과 색 인지 곽석우, 황병준.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
Lecture #9 제 6장. 음영법(Shading).
openGL Project 결과보고서 야구 시구 시뮬레이션
14장. Active Directory 사용자 및 그룹 관리
제 6장 카 메 라.
4. OpenGL 상태들과 기본 도형들.
픽셀, 비트맵, 폰트, 이미지 그리기.
Chapter 13. Active Directory
openGL Project 제안서 비 오는 정류장에서
OpenGL Project 조민정 장선례.
1 2 계속 생산해역등급관리 엑셀업로드 가이드 1. 생산해역등급관리 – 위생자료결과관리(해수)
버퍼 (Buffer).
Computer Graphics OpenGL 설치 및 설정
OpenGL 프로젝트 K.S.C팀.
OpenGL 프로젝트 김병욱 김상진 김성환.
핸드폰 시뮬레이션 김 형 도 송 미 경.
Draw the basic Geometry Objects
Microsoft PowerPoint 익히기
OpenGL Project Dong-seo Univ Multimedia Engineering.
Chapter 4 컬러( COLOR ).
뉴로 컴퓨터 개론 제 6 장.
미술로 만드는 가족사랑 1회기 오리엔테이션 및 활동 안 명 현.
스크립트 작성.
프로젝트 명칭 학생 이름 | 담당 교사 이름 | 학교
OpenGL Introduction 컴퓨터 그래픽스 김 창 헌.
박성진 컴퓨터 프로그래밍 기초 [04] 연산자 박성진
openGL Project 제안서 - 해상 전투
OpenGL Project.
2017년 상품전시회 시식코너 협력업체 안내 자료 2017년 3월 ㈜코리아세븐 상품부.
OpenGL project – Easy Flight Simulator
LOGOTYPE 춤추는 풍선 팀장 : 이준호 팀원 : 장원진.
수정사항 → 수정 및 추가 → 삭제.
OPENGL project 구성원 : 김수민,남현우 OPENGL을 이용한 당구(3구) 구현하기.
협력업체 전자입찰 매뉴얼 외주 업체용.
제안 제도 운영방안.
OpenGL Project = Solar System = 김민지 박유나.
Final Team Project 이 종철 김 용환
In to the Night 서정부, 서수민, 안경호
선 택 학 습 사 회 6학년 1학기 3. 대한 민국의 발전 [2] 대한민국의 수립과 발전 13/14
TrustNet 소모품 신청 사용설명서 < 목 차 > 작성,수정,삭제 결재함 처리현황
Excel 2007을 이용한 통계학 제 2 장 자료의 정리.
OpenGL (3D Racing) PROJECT 2011 Dongseo Univ..
OpenGL Project 과 목 명 : 컴퓨터 그래픽스 E14반 담당교수님 : 이병국교수님 팀 원 : 신호환
OpenGL 프로젝트 복학생은 죽지않아!! ( 강유진, 박지혜)
현미경으로 빛의 삼원색과 합성 이해하기 5. 빛과 파동 제1회 명인 과학교사의 명품 과학 수업
Presentation transcript:

알아야 할 것들

알아야 할 것들 “ 에 러 처 리 ” “ OpenGL 버전 확인하기” “ 표준 확장 ” “ 간단한 반투명 ” “ 에 러 처 리 ” “ OpenGL 버전 확인하기” “ 표준 확장 ” “ 간단한 반투명 ” “ 쉬운 페이드 효과 ” “ 백 버퍼를 이용한 물체 선택 ” 2011-2학기 가상현실

“ 스텐실 버퍼를 사용해서 채워진 오목 폴리곤 그리기 “ “ 간섭 영역 찾기 ” “ 그림자 ” “ 경제적인 이미지 변형 ” “ 레이어 표현하기 ” “안티앨리어싱된 문자들” “ 둥근 점 그리기 ” “ 이미지 보간하기 ” “ 전사한 그림 만들기 ” “ 스텐실 버퍼를 사용해서 채워진 오목 폴리곤 그리기 “ “ 간섭 영역 찾기 ” “ 그림자 ” 2011-2학기 가상현실

“ 디리클레 영역 (Dirichlet Domain)“ “ 스텐실 버퍼의 라이프 “ “ 은선 제거하기 ” “ 텍스처 매핑 응용프로그램 ” “ 깊이 버퍼를 사용하는 이미지 그리기 ” “ 디리클레 영역 (Dirichlet Domain)“ “ 스텐실 버퍼의 라이프 “ “ glDrawPixels()와 glCopyPixels()의 선택적 사용 ” 2011-2학기 가상현실

에 러 처 리 OpenGL은 기본 GL이나 GLU에서 에러를 감지할 경우, 현재 에러 코드를 기록해 놓는다. 한번 에러가 기록되면 glGetError()를 호출, 에러 코드를 반환하기 전까지 현재 에러 코드가 안지워짐 그러므로 추가적인 에러들이 기록 안된다. glGetError()는 현재 에러 코드를 알아내고 에러 코드를 지운 이후나, 발생한 에러가 없을 경우에 호출되었을 경우 GL_NO_ERROR를 반환 2011-2학기 가상현실

GLenum glGetError(void); GL이나 GLU에서 에러가 발생했을대 적절한 에러 코드값으로 바뀐 에러 플래그값을 반환 이 함수의 반환값이 GL_NO_ERROR라면 마지막으로 glGetError()가 호출된 이후나 GL이 초기화 된 이후로 감지할 수 있는 에러가 없음을 의미 display() 루틴 동안에 적어도 한번은 glGetError()함수를 호출해 주는 것이 좋다. 2011-2학기 가상현실

OpenGL 에러 코드 에러 코드 설명 GL_INVALID_ENUM GLenum 인자가 범위를 벗어남 GL_INVALID_VALUE 수 인자가 범위를 벗어남 GL_INVALID_OPERATION Operation이 현재 불법적 GL_STACK_OVERFLOW 스택 오버플로우가 발생 GL_STACK_UNDERFLOW 스택 언더플로우가 발생 GL_OUT_OF_MEMORY 커맨드를 실행시키기 위한 메모리 여유가 충분하지 않다 2011-2학기 가상현실

gluErrorString()을 사용해서 GL 에러코드나 GLU 에러코드에 대한 설명을 얻어낼 수 있다. const GLubyte * gluErrorString(GLenum errorCode); 이 함수는 errorCode로 넘어온 OpenGL이나 GLU 에러 번호에 맞는 에러 설명 문자열의 포인터를 반환 2011-2학기 가상현실

내가 사용하는 것은 무슨 버전인가? const GLubyte * glGetString(Glenum name); OpenGL 구현을 설명하는 문자열에 대한 포인터를 반환 name은 GL_VENDOR, GL_RENDERER, GL_VERSION, 또는 GL_EXTENSIONS 이 네 가지 값 중에 하나의 값을 가짐 GL_VENDOR는 OpenGL개발에 대한 책임을 갖는 회사의 이름을 반환 GL_RENDERER는 보통 하드웨어 플랫폼 같은 렌더링 식별자를 반환 2011-2학기 가상현실

gluGetString() 은 유틸리티 라이브러리에서 사용하는 질의 함수로, glGetString()과 유사 유틸리티 라이브러리 버전 gluGetString() 은 유틸리티 라이브러리에서 사용하는 질의 함수로, glGetString()과 유사 const GLubyte * gluGetString(GLenum name); OpenGL 구현을 설명하는 문자열에 대한 포인터를 반환 윈도우 시스템 확장 버전 OpenGL을 위한 윈도우 시스템 확장의 버전 정보를 얻기 위해 사용하는 glXQueryExtensionString()과 같은 루틴들이 있다. 2011-2학기 가상현실

표 준 확 장 OpenGL은 라이브러리와 연산들에 대해 공식적으로 기술하고 있는 명세를 가짐 XYZ 회사가 새로운 함수와 심볼 상수를 추가 glCommandXYZ() 형태가 됨 GLboolean gluCheckExtension(char *extName, const GLubyte * extString); 명시된 확장의 지원 여부를 알아보기 위함 extName이 extString에서 발견될 경우 GL_TRUE를 반환 그렇지 않으면 GL_FALSE 반환 2011-2학기 가상현실

Microsoft Windows에서의 표준 확장(WGL) 마이크로소프트 윈도우 플랫폼에서는 다음과 같은 방법으로 확장 함수를 사용 확장을 확인할 수 있는 심볼 상수를 이용해서 조건 확인 코드를 만들어 냄 런타임 때 확장 문자열을 질의 wglGetProcAddress() 함수를 이용해서 포인터와 확장 함수를 연결 2011-2학기 가상현실

간단한 반투명 불투명한 물체를 표현하기 위해 폴리곤 스티플을 사용할 수 있다. 이 방법은 특히 하드웨어가 블렌딩을 지원하지 않는 시스템에서 유용하게 사용할 수 있는 방법이다. 만약 빛을 29퍼센트 투과시키는 표면을 만들고 싶다면 간단하게 마스크의 29퍼센트는 0이고 나머지는 1인 스티플 패턴을 만든다 만약 임의의 픽셀을 켜서 만드는 효과가 싫다면 규칙적인 패턴을 사용할 수도 있다. 이 패턴들은 투명한 표면이 쌓여 있을 때 좋지 않은 결과를 만들어내기도 한다. 2011-2학기 가상현실

쉬운 페이드 효과 점차적으로 배경색과 같은 색으로 빛깔이 바래지는 이미지를 만들어내기 위해서는 먼저 패턴이 밀집된 곳에서 더 많은 비트들이 켜진 폴리곤 스티플을 정의해야 한다. 16단계의 검은색 페이드를 원하면 16개의 서로 다른 패턴 배열을 정의 GLubyte stips[16][4*32]; 각각의 32 * 32 스티플 패턴에서 픽셀의 1/16을 켜고, 모든 스티플 패턴의 비트 방식 OR를 1로 설정, 읽어옴 2011-2학기 가상현실

스티플 패턴을 디스플레이 목록으로 설정하는 커맨드를 컴파일 하면 OpenGL은 stips[][] 배열에 있는 자료들을 최고 스티플 설정 속도가 필요한 하드웨어 의존적인 형태로 재정렬 가능 이 기술은 또한 움직이는 그림을 그릴 때도 이용 그림 중에서도 매우 빠른 동작을 묘사하기 위해서 그림이 지나간 자리에 흔적을 남기고, 순차적으로 사라지는 기법 2011-2학기 가상현실

glPolygonStipple(&stips[i][0]); GLubyte stips[16][4*32]; draw_the_picture(); glColor3f(0.0, 0.0, 0.0); for (i=0; i<16; i++) { glPolygonStipple(&stips[i][0]); draw_a_polygon_large_enough_to_cover_the_whole_region(); } 2011-2학기 가상현실

백버퍼를 이용한 물체 선택 OpenGL 선택 메커니즘을 사용하지 않고 더블버퍼 모드에서 오브젝트 선택 백버퍼를 이용한 물체 선택 OpenGL 선택 메커니즘을 사용하지 않고 더블버퍼 모드에서 오브젝트 선택 이 방법은 사용자가 오브젝트를 피킹하면 응용프로그램이 백 버퍼에 전체 장면을 다시 그려준다 백 버퍼에 장면을 그릴 때 오브젝트의 일반적인 컬러를 사용하는 대신 오브젝트 컬러에 대한 식별자를 코드화 해서 그려준다. 어플리케이션은 커서 아래에 있는 픽셀을 읽고 피킹된 오브젝트의 값으로 픽셀의 값을 코드화 2011-2학기 가상현실

하나의 픽셀에 복합적인 오브젝트가 놓여 있을 때 이 기법은 가장 앞에 놓인 오브젝트를 선택하기 때문에 일반적인 선택모드 기법 이상의 장점을 가짐 만약 다른 시스템에서 돌아갈 수 있는 이식 가능한 코드를 쓰고자 한다면 물체의 식별자를 사용하고자 하는 시스템들의 가장 작은 크기에 맞추어서 쪼개야 한다 2011-2학기 가상현실

경제적인 이미지 변형 비트맵 이미지를 늘이거나 회전, 수학적 함수를 이용, 수정하는 등 왜곡된 형태의 이미지를 만들기 위한 다양한 방법 사용 가능 이미지를 텍스처 맵의 형태로 사용해서 스케일링이나 로테이션 등의 변화 가능 glPixelzoom()을 사용해서 이미지를 스케일링 시킬 수도 있다. 2011-2학기 가상현실

레이어 표현하기 반도체 레이아웃 프로그램 같은 응용프로그램에서는 서로 다른 물체들 간에 다중 레이어를 그려주고, 오버랩을 표시해야 하는 경우가 있다. 간단한 예제로 계층화할 수 있는 서로 다른 세 개의 물질이 있다고 가정하자 다음 표에서 보는 것과 같이 레이어들의 조합을 8개 만들 수 있다. 2011-2학기 가상현실

레이어들의 8가지 조합 레이어1 레이어2 레이어3 컬러 없음 검정색 1 있음 빨간색 2 초록색 3 파란색 4 분홍색 5 노란색 없음 검정색 1 있음 빨간색 2 초록색 3 파란색 4 분홍색 5 노란색 6 흰색 7 회색 2011-2학기 가상현실

이미지를 그릴 때에는 컬러를 7로 설정하고 n번 레이어에 있는 물체를 그릴 때는 쓰기 마스크를 n번으로 설정한다. 윈도우를 클리어할 때는 세 개 레이어를 모두 포함하기 위해서 쓰기 마스크 (write mask) 를 7로 설정하고, 클리어하는 컬러는 0으로 설정 이미지를 그릴 때에는 컬러를 7로 설정하고 n번 레이어에 있는 물체를 그릴 때는 쓰기 마스크를 n번으로 설정한다. 레이어별로 그림을 지워주려면 원하는 레이어의 번호로 쓰기 마스크를 설정하고, 컬러를 0으로 설정해준다. 2011-2학기 가상현실

안티앨리어싱된 문자들 문자를 그리기 위해 glBitmap()을 이용하는 기본적인 방법을 사용하면 문자는 색이 칠해진 픽셀과 칠해지지 않은 픽셀을 모아 표현 만일 렌더링에 회색과 같은 중간색들을 사용한다면 문자의 이미지를 더욱 부드럽고 고급스럽게 표현 가능 문자와 영역 사이에 걸친 픽셀들은 픽셀이 포함된 양에 따라서 적절한 농도의 회색으로 칠해야 함 2011-2학기 가상현실

RGBA 모드와 컬러 인덱스 모드의 차이에 따라 안티앨리어싱 문자를 구현하는 두 가지 방법이 존재 그림 14-1에서 숫자 0, 1, 2, 3 은 각 픽셀이 덮힌 정도 0은 거의 비어있는 곳, 1은 1/3, 2는 2/3, 3은 완전히 덮혀있는 곳 의미 RGBA : 세 개의 서로 다른 문자 비트맵을 만들어 주고 만들어낸 각각의 비트맵은 글씨의 쓰여진 위치와 일치시켜야 함 컬러를 하얀색으로 설정, 배경색을 클리어 RGB를 (0.666, 0.666, 0.666) 으로 설정해서 1/3 회색 컬러를 만들고, 1인 픽셀에 칠해줌. RGB를 (0.33, 0.33, 0.33) 으로 설정해서 2번째 비트맵에 칠해줌 마지막으로 RGB=(0, 0, 0)으로 해서 3번째 비트맵에 칠해줌 2011-2학기 가상현실

전사한 그림 만들기 깊이버퍼를 사용해서 은면을 제거하고 있는 복잡한 3차원 그림을 그리고 있다고 가정 그리고 이 그림의 일부분이 동일한 평면에 있는 그림 A와 B로 구성되어 있고, 그림 B가 언제나 A 위에 나타나야 하는 일종의 전사한 그림을 그려야 하는 경우 일반적으로 프레그먼트를 교체하는 깊이 버퍼 함수를 이용해 A, B를 그림 점들을 표현하는 부동 소수점의 정확도에 한계가 있기 때문에 그림 B의 비트가 그림 A 앞에 나타나기도 했다가 뒤에 나타나기도 하는 문제 발생 2011-2학기 가상현실

이러한 문제를 해결하기 위해 다음과 같은 방법을 사용 깊이 버퍼를 쓰기 불가 상태로 만들고 A를 렌더링 깊이 버퍼를 쓰기 가능 상태로 만들고 B를 렌더링 컬러 버퍼를 쓰기 불가 상태로 만들고 , A를 다시 렌더링 컬러 버퍼를 쓰기 가능 상태로 만든다. 2011-2학기 가상현실

만일 스텐실 버퍼가 사용 가능하다면 다음과 같이 단순한 방법을 사용해서 똑같은 효과를 만들어 낼 수도 있다. 깊이 테스트를 통과할 경우 1을 갖고, 통과하지 못할 경우 0을 갖도록 스텐실 버퍼를 구성하고 A를 렌더링 스텐실 값은 바꾸지 않은 채로 스텐실 값이 1인 곳만 렌더링하도록 스텐실 버퍼를 구성 깊이 버퍼 테스트와 깊이 버퍼의 갱신을 불가능하게 만든 후 B를 렌더링 2011-2학기 가상현실

간섭 영역 찾기 간섭 영역을 찾아내는 방법은 10장의 스텐실 테스트에서 설명하는 캐핑 알고리즘과 연관되어 있다. 테스트 하고자 하는 오브젝트에 임의의 클리핑 면을 통과시켜서 오브젝트 내부를 한 번 이상 통과한 클리핑 영역을 찾아내는 것이 핵심 기술 간섭 영역을 찾아내기 위해서는 일단 확인하고 싶은 물체를 그린 후 클리핑 면에 대해서 클리핑 해주어야 함 만일 다중 물체에 대해 상호 간섭에 대한 테스트를 해야 한다면 간섭이 일어날 때마다 하나의 비트를 저장, 클리핑 버퍼가 오브젝트 내부 집합에 들어갈 때마다 또 하나의 비트를 저장 2011-2학기 가상현실

앞에서 설명된 연산은 다양한 마스킹 연산들과 스텐실 버퍼에 있는 다른 비트들을 이용해서 처리 가능 스텐실 연산을 이용하면 스텐실 버퍼에서 간섭과 내부 집합을 찾아낼 수 있다. 2011-2학기 가상현실

그림자(Shadows) 모든 3차원 공간에서 3차원 공간으로의 모든 사영은 4* 4의 역행렬이 가능한 행렬과 동차 좌표계를 이용해서 만들 수 있다. 임의의 무한한 광원으로부터 생겨나는 임의의 평면에 있는 임의의 물체에 대한 그림자를 찾으려면 먼저 그 사영을 표현하는 행렬을 찾아야 한다. 그리고 행렬 스택에 찾아낸 행렬을 곱하고 그림자 색으로 물체를 그린 후 “바닥”면에 물체를 사영해 주어야 함 2011-2학기 가상현실

은선 제거하기 숨겨진 선들이 제거된 와이어프레임 물체를 그려야 한다면 선으로 윤곽을 그리고, 표면을 이루는 폴리곤의 내부를 배경색으로 칠하는 방법을 사용할 수 있다. 또한 숨겨진 선을 제거하기 위해 폴리곤 오프셋을 사용하거나, 스텐실 버퍼를 사용하는 방법도 사용할 수 있다. 2011-2학기 가상현실

폴리곤 오프셋을 사용해서 숨겨진 선을 제거하려면 물체를 두 번 그려주어야 한다. 폴리곤 오프셋으로 숨겨진 선 제거하기 폴리곤 오프셋을 사용해서 숨겨진 선을 제거하려면 물체를 두 번 그려주어야 한다. 강조된 모서리를 그리기 위해서 폴리곤을 와이어프레임 형태로 래스터화 해주어야 하기 때문에, GL_LINE으로 폴리곤 모드를 설정해서 전경색으로 채워진 폴리곤을 그린다. 그리고 기본 폴리곤 모드에서 채워진 폴리곤을 그려주는데, 이 폴리곤은 와이어프레임의 내부를 채우기 위해 사용 충분한 폴리곤 오프셋을 사용, 이 폴리곤을 눈으로 부터 조금 멀리 밀어내 준다. 2011-2학기 가상현실

스텐실 버퍼를 사용해서 숨겨진 선을 제거하려면 더 복잡한 과정을 거침 스텐실 버퍼로 숨겨진 선(은선) 제거하기 스텐실 버퍼를 사용해서 숨겨진 선을 제거하려면 더 복잡한 과정을 거침 먼저 각 폴리곤은 스텐실 버퍼를 클리어 프레임버퍼와 스텐실버퍼 두 곳에 모두 외곽선을 그려주어야 함 그 다음 내부를 채우고 스텐실 버퍼 중 여전히 클리어 상태인 곳에서만 그리기를 활성화 폴리곤 마다 전체적인 스텐실 버퍼를 클리어하지 않도록 같은 폴리곤 외곽선을 사용하는 버퍼를 0으로 만들어서 클리어 2011-2학기 가상현실

텍스처 매핑 응용프로그램 텍스처 매핑을 활용한 어플리케이션 안티앨리어싱된 텍스트 비교적 해상도가 놓은 곳에 있는 각 문자들에 대해 텍스처맵을 정의한 다음, 이 텍스처맵을 텍스처가 제공하는 필터링을 사용해서 더 작은 영역에 매핑 이 방법을 사용하면 왜곡된 면에서도 정확하게 표현 안티앨리어싱된 선 텍스처 위에 여러 픽셀의 넓은 선을 그리고, 텍스처 필터링을 사용해 안티앨리어싱 이미지 스케일링과 로테이션 이미지를 텍스처 맵 안에 놓고, 텍스처를 폴리곤 위에 매핑하면 폴리곤을 돌리고 늘어뜨리는 효과가 이미지에 적용 2011-2학기 가상현실

평가자를 이용해서 만들어내는 얇은 판막으로 정의된 표면에 이미지를 매핑해서 텍스처 맵처럼 저장 이미지 구부리기 평가자를 이용해서 만들어내는 얇은 판막으로 정의된 표면에 이미지를 매핑해서 텍스처 맵처럼 저장 이미지 사용하기 이미지 텍스처 맵에 놓고, 슬라이트 프로젝터 효과가 나도록 스포트라이트처럼 사영 2011-2학기 가상현실

깊이 버퍼를 사용하는 이미지 그리기 복잡한 정적 배경의 경우, 배경의 기하학적인 명세를 렌더링하는데 걸리는 시간이 이미지 그리는 시간보다 오래 걸림 고정배경 및 단순하게 변화하는 전경의 경우 기하학적으로 렌더링하기 보다 이미지를 깊이 버퍼버전과 결합하여 그리는 것이 좋을 수도 있다. 깊이 버퍼된 이미지를 장면에 추가하려면, 먼저 glDrawPixels()를 사용해서 이미지의 깊이 버퍼값을 깊이 버퍼에 적어주어야 함 그 다음, 깊이 버퍼링을 활성 상태로 만들고 그리는 것을 막기 위해 쓰기 마스크를 0으로 바꾼다. 2011-2학기 가상현실

그리고 깊이 버퍼에 쓰기 작업이 일어날 때마다 그려진 것을 스텐실 버퍼가 얻어올 수 있도록 스텐실 작업을 활성 상태로 만듬 스텐실 버퍼에 1이 있을 때만 쓰기가 일어나게 하기 위해서 방금 만든 스텐실 버퍼로 마스크된 컬러 버퍼에 이미지를 그린다. 2011-2학기 가상현실

glDrawPixels()와 glCopyPixels()의 선택적 사용 Video : 기계가 특별한 프레임을 그려주고 버퍼를 교환하는 과정을 반복함으로써 짧은 무비 클립을 보여줄 수 있다. 에어브러쉬 : 페인트 프로그램에서 에어브러쉬의 형태는 알파값을 이용해서 만들 수 있다. glDrawPixels()를 이용해서 알파값이 큰 중심부에는 파란색 사각형을 반복적으로 그려주고, 원의 가장자리는 흐리게 그림 2011-2학기 가상현실

이미지 교차하기 : XOR연산을 사용한 glCopyPixels()를 이용하면 같은 크기의 이미지를 제자리에서 스왑할 수 있다. 필터링된 줌(filtered zoom) : 만약 정수가 아닌 값으로 픽셀 이미지를 확대 또는 축소시키려면 조금 간소한 앨리어싱 결과를 만들어내는 박스 필터(box filter)를 사용할 수 있다. 이미지 교차하기 : XOR연산을 사용한 glCopyPixels()를 이용하면 같은 크기의 이미지를 제자리에서 스왑할 수 있다. 만약 A와 B가 두 개의 이미지라면 연산은 다음과 같이 표현 A = A XOR B B = A XOR B A = A XOR B 2011-2학기 가상현실