[directx11]선형보간법
카테고리: DirectX
선형보간
Lerp(a, b, t) = a + (b - a) * t
이 수식은 모든 프레임워크에서 자주 사용되는 선형보간 식이다.
스칼라값, 심지어 점에서 점까지의 거리에서도 사용이 가능하다.
t의 0부터 1까지의 0보간 계수 값으로 연속적인 변화를 줄 수 있다.
오버헤드 측면에서도 매우 효율적이고, 구현해내기 어렵지 않다.
이 식은 변화 속도가 일정하다는 단점이 있기 때문에
개발 단계가 되면 static_cast를 통해 값을 잘래낸 계단식 그래프, 삼각함수를
이용한 곡선 그래프, 2차원 함수를 이용한 우상향 곡선 그래프 등 다양한 방법으로 응용해 사용한다.
D3D에서의 선형보간
D3D 에서는 hlsl에서 자체적으로 제공하는 함수로 Vector3에 대한 선형보간도 구현할 수 있다.
#include <d3d11.h>
#include <DirectXMath.h>
using namespace DirectX;
int main()
{
XMVECTOR startVector = XMVectorSet(1.0f, 2.0f, 3.0f, 4.0f);
XMVECTOR endVector = XMVectorSet(4.0f, 3.0f, 2.0f, 1.0f);
float t = 0.5f;
XMVECTOR interpolatedVector = XMVectorLerp(startVector, endVector, t);
XMFLOAT3 interpolatedResult;
XMStoreFloat3(&interpolatedResult, interpolatedVector);
return 0;
}
하지만 앞선 포스트에서 설명했듯이,
이러한 코드로 직접적으로 표현한다기 보다,
쿼터니언을 접목한 자유로운 표현 방법이 3D게임에서는 더 많이 쓰이게 된다.
두가지 기능이 하나의 상위 호완이 아닌, 동시에 쓰일때 더욱 강력하다.
선형 보간은 말그대로 직선을 이어주는 역할을 하게 되고, 쿼터니언은 회전을 담당하게 된다.
따라서 관절 애니메이션에서는 쿼터니언이 주로 사용되고, 물체의 자연스러운 움직임 등을 표현할 경우에는
선형보간이 사용된다고 생각하면 된다.
마치며
게임을 통짜로 d3d 개발하는 경우는 없다고 봐도 무방하다.
d3d엔진을 GUI를 통해 커스텀하여 자체엔진으로 사용하는 개발환경의 경우, d3d에 대한 이해도가
개발자로 하여금 더 높은 경지에 다가갈 수 있게 해주는 면은 당연한 결과로 얻어지기 때문에,
UE개발자도 이러한 요소들을 이해하고 있어야 함수를 이해하고 사용할 수 있다.
알고 쓰는것과 모르고 쓰는것. 둘은 엄연한 차이가 있다.
댓글 남기기