[OpenGL] 3D Picking
By Lusain's Blog ─ Programing & Novel Review + | 2017년 12월 31일 |
3D 그래픽 프로그램에서 마우스를 클릭하여 보이는 위치를 클릭하는 것, 다시 말해 피킹(Picking)은 꽤 중요한 일이며 가볍게 발을 담그는 사람들에게는 꽤 구현하기 난해한 기능이기도 하다. 단순히 프로그래밍 뿐만 아니라 수학도 필요하니까. 이 글은 구체적인 수학적인 개념은 설명하지는 않고 코드적으로 어떻게 구현할지 간단히 설명하고자 한다. 우선 피킹은 2가지 방법으로 구현할 수 있다. 클릭한 객체를 알 필요가 없고 단순히 피킹 위치만 알고 싶을 경우 클릭한 객체를 알아야 하고, 특정 객체만 피킹 해야만 할 경우 1은 매우 단순하다. 3D 렌더링 과정에서 깊이 버퍼(Depth Buffer)에 깊이 값이 쓰여질 것이다. 피킹 위치의 UV값을 사용해 해당 위치의 깊이 값을 얻어내고, 그것을 View
[C++] Data Save
By Lusain's Blog ─ Programing & Novel Review + | 2018년 4월 29일 |
C/C++을 배우면 후반부에 파일 입출력에 대해 배우게 된다. 간단한 입출력 실습도 하는데 그런다고 문자열 데이터 말고는 데이터를 넣어본 적이 거의 없을 것이다. 구분자는 거의 다 줄바꿈이고. 이번 글에서 다룰 파일 입출력 방식은 C++11의 std::fstream을 사용하지만 개념 자체는 어떤 방식이든 무관하게 사용이 가능하다. 우선 예전 기억을 돌이켜보자. 우리는 어떻게 파일 입출력을 하였는가? bool Save() { int save_int = 5; float save_float = 3.123f; std::string save_string = "hello, world!"s; std::fstream fs; fs.
ROS(rosbuild, catkin)에서 OpenGL 사용하기
By 찜질방 | 2017년 5월 15일 |
별도의 GUI? Viewer? 가 필요한 경우에는 OpenGL 을 사용해야할 것 같아서 찾아보고 사용하고 정리하는 중. <rosbuild> <CMakeList.txt> include_directories(${OpenGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS}) target_link_libraries(${node_name} ${OpenGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} -lglut -lGL) </CMakeList.txt> <manifest.xml> <export> <cpp lflags="-lGL -lglut"/> </
[OpenGL] gluLookAt
By Lusain's Blog ─ Programing &amp; Novel Review + | 2017년 10월 26일 |
![[OpenGL] gluLookAt](https://img.zoomtrend.com/2017/10/26/f0084961_59f15613e7c94.png)
일단, gluLookAt의 원리에 대해 알아보자. gluLookAt은 eye, center,up 3개의 3차원 좌표 값을 인자로 가진다(총 9개의 인자) 여기서 eye, center는 좌표 값이고 up은 vector값이다. eye는 카메라 위치, center는 바라보는 중심 방향이다.up은 카메라의 up vector(normalize 필요)를 나타낸다. 카메라는 일반적인 게임에서 특정 물체(캐릭터, 사물, 또는 지점 그 자체)를 기준으로 일정 거리만큼 떨어진 채 위치하므로 eye값은 center를 중심으로 한 거리 d인 3차원 구 상의 한 점이라고 생각하면 된다. eye 값은 center 값에 따라 지속적으로 바뀌고, 회전할 때마다 좌표 값이 전부 바뀔 수 있다. 따라서 여기서는 eye값은 기록하지