Lusain's Blog ─ Programing & Novel Review +

Sources

Posts

42 posts

[C++] group compare을 구현해보자

가끔, 이런 코드를 짤 때가 있다. // 텔레포트 가능 상태 확인if (bDead == false && bMove == false && bJump == false && bAtt == false ) 특정 조건들의 값들이 일괄적으로 true 또는 false 인지 확인할 필요가 있다. 이 때 간단하게는 이렇게 짜기도 한다. // 텔레포트 가능 상태 확인if ( ! bDead && ! bMove && ! bJump && ! bAtt ) 코드가 꽤 간결하게 되었다. 하지만 && 너무 많지 않아? 이게 group compare을 구상하게 된 이유였다. ... ...아뇨, 그냥 심심했어요... 일단 이런

[OpenGL] 3D Picking

3D 그래픽 프로그램에서 마우스를 클릭하여 보이는 위치를 클릭하는 것, 다시 말해 피킹(Picking)은 꽤 중요한 일이며 가볍게 발을 담그는 사람들에게는 꽤 구현하기 난해한 기능이기도 하다. 단순히 프로그래밍 뿐만 아니라 수학도 필요하니까. 이 글은 구체적인 수학적인 개념은 설명하지는 않고 코드적으로 어떻게 구현할지 간단히 설명하고자 한다. 우선 피킹은 2가지 방법으로 구현할 수 있다. 클릭한 객체를 알 필요가 없고 단순히 피킹 위치만 알고 싶을 경우 클릭한 객체를 알아야 하고, 특정 객체만 피킹 해야만 할 경우 1은 매우 단순하다. 3D 렌더링 과정에서 깊이 버퍼(Depth Buffer)에 깊이 값이 쓰여질 것이다. 피킹 위치의 UV값을 사용해 해당 위치의 깊이 값을 얻어내고, 그것을 View

[C++] 생성자가 보호된 객체로 스마트 포인터 만들기

몇몇 드문 경우(싱글톤 등) class의 생성자가 public이 아닐 경우가 있다. 이 객체를 unique_ptr 또는 shared_ptr로 만들 필요가 있을 때도 존재할 것이다. 이 때 몇 가지 방법이 있다. 걍 팩토리 함수를 friend로 걸고 스마트 포인터 팩토리(make_~~) 함수를 쓰지 않고 때려박아 만든다. ex) auto instance = std::unique_ptr { new MyCalss{} }; 이 경우 생각하지 않고 때려박기 때문에 좋다. 사실 스마트 포인터 팩토리 함수를 쓸 필요따윈 없다. 스마트 포인터 팩토리 함수를 friend에 등록한다. ex) class MyClass { //... template

Debugging with Visual Studio

Debugging with Visual Studio from Lusain Kim Visual Studio 2013, C 유저의 기초 디버깅 위한 내용. 의 2017년 버전입니다. 프로파일링과 그래픽 디버깅에 대해 추가로 작성하였고, 도구 외적인 요소는 배제했습니다. Visual Studio 2017을 기준으로 작성하였으며, 문의는 댓글 또는 [email protected] 으로 부탁드립니다.

[OpenGL] gluLookAt

[OpenGL] gluLookAt

일단, 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값은 기록하지