분류 전체보기 57

윈도우 환경에서 VS Code + CMake 환경 구성하기

https://github.com/kahuz/vscode_cmake_windows GitHub - kahuz/vscode_cmake_windows Contribute to kahuz/vscode_cmake_windows development by creating an account on GitHub. github.com 회사 업무를 하다보니 임베디드 환경과 리눅스 환경 그리고 windows 환경 모두 지원하는 프로젝트를 많이 다루게 되었다. 사실 개발이야 늘 하던 것이기에 큰 어려움이 없지만 빌드 환경을 통일하지 않으면 불편한 점이 한 둘이 아니게 된다. 그런 점에서 CMake 는 다른 빌드 환경보다 강력한 크로스 플랫폼 빌드 환경을 제공하고 있기에 주로 사용하게 되었다. 여담은 이쯤하고 윈도우 환경에서..

ETC 2022.02.28

Image Editor

Image Editor 는 현 직장에서 OpenGL 이나 영상처리와 관련된 리소스를 처리하기 위해 만든 프로젝트이다. ( https://github.com/kahuz/image_editor ) OpenGL에서 처리할 png 이미지의 병합이나 yuv format 의 RGB 변환 혹은 반대와 같이 상황에 따라 필요한 리소스를 만들고 편집하기 용이하게 하기 위해 만들었다. 블로그 내에 소개한 ImGui 를 이용하여 UI를 구성하였고 심플한 텍스처는 opengl로 생성하여 ImGui를 통해 렌더링하게 해두었다. 깃헙의 소스코드를 보면 yuv format 변환식 등이 최적화 되어 있지 않은데, 그 이유는 wiki 에 소개된 이미지 변환 수식을 그대로 코드화하는 공부 개념으로 작성했기 때문이다. 아래는 샘플 영상이다.

렌더링 파이프라인의 좌표 공간과 좌표 변환

렌더링 파이프라인의 좌표 공간과 좌표 변환 OpenGL에서 3D Object가 렌더링을 거쳐 화면에 뿌려지는 과정 World transform ( model matrix ) model space : 하나의 객체( model, object )를 모델링하는데 사용되는 좌표 공간 world space : 각각의 model space에 표현된 객체들을 하나의 공간에 표현하기 위해 통합된 좌표 공간 위 내용을 바탕으로 world transform 이란 물체가 화면 상에 어떻게 표현될지 결정하는 과정이라는 것을 알 수 있다. 예를 들어 객체가 보여질 화면에서 어디로 이동하여 위치할지, 축소 시킬지, 변환할지 등. view transform ( view matrix ) view transform은 world spac..

OpenGL 3D Object file

OpenGL 3D Object file .obj 파일은 3D 지오메트리만 나타내는 데이터 파일입니다. 각 정점의 위치와 텍스트 uv 좌표 위치, 정점 법선 및 다각형을 이루는 면의 정점 목록으로 구성되어 있습니다. 데이터 형식 .obj 파일은 해시(#), v, vt, vn, f 등 아래와 같은 키워드가 존재합니다. Vertex Data v : 정점 좌표 데이터. x,y,z,w 로 구성되며, w는 생략 시 1.0이 기본으로 설정된다 [ v 0.10 0.10 0.10 1.0 ] vt : 텍스처 좌표 데이터. u,v w로 구성되며, v와 w는 생략 시 0이 기본으로 설정된다 [ vt 0.1 0.1 0 ] vn : vertex normals data. x,y,z로 구성되며 단위 벡터가 아닐 수 있습니다. [ v..

Projection by W

OpenGL에서는 좌표를 표현하기 위해 ( x, y, z, w ) 를 기준으로 좌표를 표현한다. 여기서 x, y, z 는 3D 공간 상의 좌표를 의미하며 w는 좌표의 변환행렬을 위한 값으로 쓰인다. 이는 ( x, y, z, 1) 로 표현 했을 때, 즉 w가 1일 때 이동 변환, 스케일링 등에 영향을 받게 되어 공간 좌표를 뜻하게 되고 ( x, y, z, 0 ) 즉, w 가 0 일 때는 변환이나 스케일링 등에 영향을 받지 않고 방향 만을 표현하게 된다. 또한 w를 이용한 동차좌표계를 통해 projection divide가 가능하다는 것을 확인할 수 있다. 즉 w는 사물의 원근감을 표현하기 위해 사용될 수 있다는 것이다. ( 직교 투영을 의미 ) 위 그림의 두 점 a(-2,-2) , b(2,-2) 를 보자...

유용한 쉘 스크립트 문법

유용한 쉘 스크립트 문법 리눅스 환경에서 개발을 하다보면 다양한 이유로 쉘 스크립트를 사용하게 됩니다. 가장 흔한 이유는 빌드의 자동화 혹은 특정 어플리케이션 실행의 편의성을 높이기 위함입니다. 예를 들어 my_app 이라는 어플리케이션의 입력 변수로 -debug_level={1~4} 라는 옵션과 -detect_object={ cat, dog, people} 같은 옵션을 준다고 예를 들어보겠습니다. 이 경우 일일이 해당 옵션을 수정하는건 개발자에게 너무 큰 고욕임이 확실합니다. 따라서 아래와 같은 쉘 스크립트를 이용하면 보다 편리하게 앱을 실행시키고 디버깅 혹은 테스트를 할 수 있게 됩니다. #!/bin/bash APP="my_app" OPT1="-debug_level" OPT2="-detect_obje..

ETC 2021.06.05

Dear ImGui :: C++ 그래픽 인터페이스 라이브러리

외부 종속성 없이 사용 가능한 라이브러리 Dear ImGui는 라이브러리를 C++ 소스코드를 포함하여 제공하기에 외부 종속성 없이 사용이 가능한 그래픽 인터페이스 라이브러리 입니다. ( https://github.com/ocornut/imgui ) 게임엔진이나 임베디드 어플리케이션, 콘솔 플랫폼의 어플리케이션 개발에 적합하며 Ubisoft, Blizzard, Nvidia 등 굵직한 기업들이 사용하고 있습니다. ( 이외 https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui 참고 ) Dear Imgui를 프로젝트에 사용하기 위해서는 백엔드 모듈이 필요합니다. 백엔드는 마우스와 키보드, 게임패드와 같은 입력과 DirectX, OpenGL, Vulka..

Hello wayland - 간단 예제

hello wayland 앞선 과정에서 웨이랜드가 무엇인지, 웨이랜드로 윈도우를 관리하기 위해 구성되는 요소들이 무엇인지, 그 구성요소들은 웨이랜드에서 어떻게 표현되는지에 간략히 소개하였습니다. hello wayland 에서는 앞선 내용을 바탕으로 간단한 예제를 소개하도록 합니다. Required library 리눅스에서 웨이랜드로 윈도우를 관리하기 위해서는 wayland library와 화면의 렌더링을 담당할 gles 라이브러리가 필요합니다. wayland library는 디스플레이 장치로부터 윈도우 창을 생성하며, 그 외에 마우스나 키보드와 같은 윈도우에서 사용할 수 있는 입력 장치들과 연결하는 등에 필요한 라이브러리 입니다. gles는 디스플레이 장치에 표현할 출력 화면의 렌더링에 필요한 라이브러리..

Getting started GStreamer : Dynamic pipeline

Getting started GStremaer 는 freedesktop의 gstreamer 예제에 대해 번역 및 참고하여 개발해보았을때 필요하다고 느꼈던 내용 들을 아주 살짝 추가/제거하여 작성했습니다. https://gstreamer.freedesktop.org/documentation/tutorials/basic 3) 동적 파이프라인 목표 이번 예제에서는 프로그램 시작 부분에 모놀리 식 파이프라인을 정의하는 대신 정보를 사용할 수 있게 되면 파이프라인을 즉시 구축할 수 있는 방법에 대해 서술합니다 ( 개념 정의 새로할 것... ) 이 과정을 마치면 playback 튜토리얼을 시작하는데 필요한 지식을 갖게 됩니다. 이번 예제에서 다룰 내용은 아래와 같습니다. 엘레멘트를 연결할 때 더 세밀한 제어를 하는..

Getting started Gstreamer : GStreamer concepts

Getting started GStremaer 는 freedesktop의 gstreamer 예제에 대해 번역 및 참고하여 개발해보았을때 필요하다고 느꼈던 내용 들을 아주 살짝 추가/제거하여 작성했습니다. https://gstreamer.freedesktop.org/documentation/tutorials/basic 2) 사용자 정의 파이프라인 생성 목표 이전 예제는 파이프라인을 자동으로 빌드하는 방법을 보여주었습니다. 이제 각 엘레멘트 (src, sink)를 인스턴스화하고 연결하여 수동으로 파이프라인을 구축할 것입니다. 이 과정에서 다음 내용을 배울 수 있습니다. GStreamer 엘레멘트는 무엇을 어떻게 만드는지. 엘레멘트를 서로 연결하는 방법 엘레멘트의 동작을 사용자 정의하는 방법 Bus에서 오류 ..