언리얼 학습 기록 보관소
로그인
언리얼 학습 기록 보관소
로그인
내적 (Dot Product)
Woogle
·
2023년 2월 14일
팔로우
0
0
C++ 공부
목록 보기
15/28
📄 내적 (Dot Product)
A⋅B = |A||B|cosθ
A⋅B = AxBx + AyBy + AzBz
θ == 0일 때, 내적은 스칼라(절대값)의 곱이다.
A⋅A = |A|²
✏️ 끼인각
게임에서 시야각, 백어택 등 구현에 이용 가능.
단, sin과 cos으로 대표되는 초월함수는 Cost가 비싸기 때문에 스칼라 곱으로 변형해서 사용해야함.
cosθ = A⋅B / |A||B|
✏️ 수직 판별
A벡터와 B벡터가 비슷한 방향이면(θ < 90°), 내적 결과가 양수.
A벡터와 B벡터의 반대 방향이면(θ > 90°), 내적 결과가 음수.
A벡터와 B벡터의 수직이면(θ == 90°), 내적 결과가 0.
if
(
(
Mathf
.
Dot
(
A
,
B
)
)
==
0
)
{
execute
MyFunc
(
)
;
}
✏️ 셰이더
Diffuse Shading
라이트 백터와 노말 백터의 끼인각이 0에 가까울 수록 해당 버텍스는 밝아진다.
✏️ 3D 렌더링 최적화
Occlusion Culling
카메라에 보이지 않는 뒷면은 렌더링하지 않는다.
카메라의 Forward vector
와
평면의 Normal vector
사이의 내적을 계산
내적 결과가 양수인(끼인각이 90° 이하) 평면은 렌더링 한다 : A, B
내적 결과가 음수인(끼인각이 90° 초과) 평면은 렌더링 안한다 : C, D
✏️ 직교 투영 (Vector Projection)
빛이 닿았을 때 바닥에 투영된 그림자 형태
✏️ 반사 벡터 (Reflection Vector)
reflect = p + 2n(-p⋅n)
Vector3 reflect = velocity + 2 normal * Vector3.Dot(-velocity, normal)
p는 쏘는 벡터(velocity), n은 노말 벡터(normal)
자료 출처
https://en.wikipedia.org/wiki/Dot_product
https://lee-seokhyun.gitbook.io/game-programming/client/easy-mathematics/3d/
https://velog.io/@ounols/%EA%B2%8C%EC%9E%84-%EC%88%98%ED%95%99-2.-%EC%98%A4%EC%9D%BC%EB%9F%AC-%EA%B0%81%EA%B3%BC-%EC%99%B8%EC%A0%81
https://m.blog.naver.com/destiny9720/221407625806
Woogle
노력하는 게임 개발자
팔로우
이전 포스트
반복자 (Iterator)
다음 포스트
외적 (Cross Product)
0개의 댓글
댓글 작성