관리 메뉴

Enjoy what you do!

OpenGL glLogicOp란 ? 고무줄 기법, Rubber banding 본문

컴공 여러가지/OpenGL

OpenGL glLogicOp란 ? 고무줄 기법, Rubber banding

쵸코맛 비비빅 2018. 4. 2. 21:23



1. OpenGL glLogicOp란 ?




glLogicOp 함수는 컬러 인덱스 렌더링을 위한 논리적 픽셀 연산을 한다.


glLogicOp는 들어오는 색상 RGBA 색상과 프레임 버퍼의 해당 위치에서 RGBA 색상간에 적용되는 논리적 연산을 한다.


다음은 매개변수 옵션들 몇가지이다.


GL_CLEAR    0

GL_SET      1

GL_COPY     s

GL_NOOP      d

GL_XOR      s ^ d


 
s represents the incoming color and d represents the color in the frame buffer.

여기서 s는 그리는 색이고, d는 프레임 버퍼 그러니까 배경색이다.

그리는 색과 배경색을 논리 연산하는거다.

그리는 색인 흰색 RGB(1,1,1)와 배경이 노란색 RGB(1,1,0) 라면  XOR 는 파란색(0,0,1) 이 나온다.

 -보색 개념-




2. 고무줄 기법, Rubber banding



마우스 드래그를 통해 선분을 그려줄때 드래그 중일때 선분이 동적으로 늘어났다 줄어들었다 그려지도록 하는걸

고무줄 기법 이라함


그렇다면 드래그 중일때 무수한 선분을 그릴텐데 마우스 포인터가 움직일때 마다 이전의 선분은 지워주고 새로운 선 한개만 그려줘야한다.

이걸 어떻게 구현할까?

답은 XOR이다.


XOR연산을 두번하면 결국 첫번째 소스값이 나온다. X^Y 에 또 Y를 XOR하면?   

즉  X^Y^Y = X 이다. XOR 두번하면 원래 값이 되버린다. 이게 선분을 지워주는 원리이다.


선분을 그리고 거기다 똑같이 또 그려주면... 그러니까 배경색의 보색으로 그린거에 또 배경색의 보색으로 그리니

결국에는 배경색이 되어 선분이 없어지는거다.


그래서 고무줄 기법에 glLogicOp을 사용한다.

glLogicOp를 사용함으로써 편리하게 XOR할수 있고 XOR함으로써 편하게 선을 지워줄수가 있다.




요약 : XOR를 통해 선을 다시 그려줌으로써 이전의 선을 지워줄수 있다. 이게 XOR 쓰는 이유다.




참고 서적

http://www.scitech.co.kr/upload/book_image/s_001/Angel%204e-pdf2.PDF

https://www.opengl.org/discussion_boards/showthread.php/152209-Rubberbanding-with-XOR

http://egloos.zum.com/ingraphics/v/2759840

Comments