본문 바로가기

GRAPHICS

(10)
[JAVA CV] JavaCV를 활용해 웹캠 제어하기 JavaCV는 java로 OpenCv의 기능을 직접 활용할 수 있는 라이브러리라고 소개되고 있다. 어찌되었건 javaCV로 웹캡을 제어하는 예제들이 상당했기 때문에 써보기로 했다. OpenCV 라이브러리 세팅을 이클립스에 마치고, javaCV의 라이브러리도 build path에 추가해주어야만 해당 코드들이 활용 가능하다. 여러 페이지를 참조해가며 JavaCV를 적용하다보니 한 페이지의 인스트럭션을 온전히 따르지 않은 감도 있는데, 내가 수행한 순서들만 나열하면 (선행조건 : OpenCV 라이브러리 추가를 마친 이클립스에서 아래 과정을 진행한다) 1. VisualC++ redistributable package 설치 For 32 bit: http://www.microsoft.com/download/en/d..
[OPEN CV] 이클립스 OpenCV 환경 구축하기 (Windows) 기존 맥 OS에서 안드로이드 프로젝트 개발을 해오다가, 요구사항들이 많아지면서 pc기반 어플리케이션을 개발하는 것으로 방향이 잡혔다. 자바를 사용해 카메라를 제어하고자 했는데, OpenCV나 javaCV 등의 라이브러리가 필요했고 이것들이 맥에서는 윈도우보다 세팅하기가 좀 더 복잡한 감이 있었다. 그런 조건하에 윈도우에서 프로젝트 개발을 하는게 낫겠다는 판단을 했고, 개인 노트북에서 프로젝트 개발을 시작해보기로 했다. 우선 윈도우에서 OpenCV 라이브러리 셋업을 하기위해 최신 버전의 이클립스 java IDE와 OpenCV 3.42 버전을 다운로드했다. https://docs.opencv.org/3.4/d1/d0a/tutorial_java_eclipse.html 윗부분의 OpenCV 공식사이트에선 공개 ..
[OPENGL ES] OpenGL ES 1.0, Batchinig으로 프레임 속도 압도적으로 개선하기 그동안 안드로이드에서 OpenGL ES 1.0 기반의 그래픽을 최적화하고, 프레임 속도를 개선하기 위해 참 다양한 작업들을 적용해 왔는데, 이번에 가장 월등한 해결책을 찾을 수 있었다. 여기까지 오기 위해 다양한 자료들을 참조하던 중에 통상적으로 쓰이는 그래픽 기술로 크게 Batching과 Culling이 있었다. (참조 : http://egloos.zum.com/littles/v/3440645 ) Batching은 쉽게 말해 픽셀을 모아찍는 것이고 Culling은 필요한 부분만을 드로잉하는 것이다. Culling의 경우에는 개념으로 따졌을때나 실질적으로 활용할때나 사용하던 기술로 어느정도 한계점에 다다른 상황이었고 Batching의 경우에는 아직 사용하지 못한 영역이었다. 주안점은 이것이다. Draw ..
[OPENGL ES] 안드로이드에서 SurfaceView의 배경 투명하게 Draw하기 안드로이드 앱에서 사용하는 OpenGL ES 뷰인 SurfaceView의 배경을 투명하게 하고자 시행착오를 좀 겪었는데 최종적으로 얻은 결과는 결과적으로 뷰의 배경은 투명하게 할 수 있었으나, SurfaceView가 무조건 레이아웃의 최상단을 차지하게 된다는 점이다. 구현방법은 우선 SurfaceView 클래스를 참조하는 부분에서setZOrderOnTop(true); setEGLConfigChooser(8,8,8,8,16,0); getHolder().setFormat(PixelFormat.RGBA_8888); getHolder().setFormat(PixelFormat.TRANSLUCENT);네가지 요소를 추가한다. PixelFormat.TRANSLUCENT의 경우에는 추가해주지 않아도 투명한 배경을 만..
[OPENGL ES] FloatBuffer allocation 관리를 통한 그래픽 최적화 앱 메모리 검사를 하면서 쌓이는 ByteBufferAsFloatBuffer, ByteBufferAsShortBuffer 등 때문에 의아해 했었고, 이것들이 OpenGL draw에 필수적인지, 항상 allocation 해주어야 하는지 서치와 실험을 계속했다. 결과적으로 ByteBuffer를 FloatBuffer에 nativeOrder로 간접적으로 할당해주어야 하는 방법은 일반적인데, 이를 한 픽셀을 draw 할 때마다 해 줄 필요는 없는 것이었고, 최초 draw를 시작하는 onSurfaceCreated 에서 한번 수행해주는 것으로 드로잉에 문제가 없음을 확인할 수 있었다. 다만, memory allocation은 한번으로 족하지만 이를 float 배열로 받아 put(values) 하고 position(0)..
[OPENGL ES] 안드로이드 액티비티 이동간 출력해 준 그래픽 유지하기 뷰에 그래픽을 출력하는 건 문제가 없는데 이를 액티비티 이동간 보전해야 하는 문제가 있었다. 그러니까 한번 다른 액티비티를 다녀오고 나면, 액티비티가 pause 되었다가 resume 되는데, 여기서 view가 보전되지 않고 까맣게 날아가버리는 게 문제였다. 해결법으로 onPause와 onResume을 오버라이드 하여 onPause시 그래픽을 출력하는 뷰에 똑같이 onPause, onResume시에도 마찬가지로 뷰에 onResume을 적용하면 기존 출력해 준 뷰를 유지하는 걸 확인할 수 있었다 :) 참고 : https://stackoverflow.com/questions/9341705/android-how-to-properly-suspend-opengl
[OPENGL] 특정 변수값에 따른 HSV 형식 색 표현을 RGB를 이용해 해보기 우선 웹상에 많은 hsv와 rgb를 바꿔주는 페이지에서 hsv를 조정해줄 때 rgb가 어떻게 변화하는지를 파악했다. 고정값으로 Saturation을 100으로, Brightness를 50으로 조정했고, 여기서 hue값을 0에서 240까지 조정함에 따라 색이 HSV 형식 색 표현에서 파란색에서 빨간색까지 옮겨가게 된다. hue의 범위가 어떻게되느냐에 따라 RGB에서 변화되는 값이 달라지게 되는데, hue가 0에서 60일때는 R : 255 | G : 0 ~ 255 | B : 0 hue가 60에서 120일때는 R : 255 ~ 0 | G : 255 | B : 0 hue가 120에서 180일때는 R : 0 | G : 255 | B : 0 ~ 255 hue가 180에서 240일때는 R : 0 | G : 255 ~..
[OPENGL ES] 모델간 겹치는 상황에서 색이 깨지지 않게 하기 visualization중 모델 여러개를 그려서 색을 겹쳐 Interpolate 효과를 내고 싶었는데 모델들이 겹치니 색이 깨지는 걸 확인했다. 폭풍 서치를 통해 여러 방법들을 적용할 수 있었다. 우선 적용하기 이전에 모델들이 이렇게 깨져보였다면 다음과 같은 glDisable과 Enable을 통해 모델들이 겹치면서도 깨지지 않는 모습을 구현할 수 있다. glBlendFunc같은 경우 모델과 색상들의 blending에서 아주 중요한 역할의 코드인데 파라미터에 어떤 설정을 해주느냐에 따라 섞이는 모습이 천차만별로 변하는 것을 확인할 수 있다. 아래같은 경우에는 위의 코드대로 GL_ONE, GL_ONE으로 설정해 주었을 때에 blending의 결과이다. 다음 아래같은 경우는 GL_SRC_ALPHA, GL_DS..