2023/10/12 5
-
DirectX의 3D연산에서는 대부분 행렬연산을 사용한다. Local좌표와 World좌표로 객체를 움직이기 위해 행렬연산을 사용하는데, 4X4 행렬을 이용해서 연산하게되면 데이터값의 연산이 빠르게 이루어지고 쉽게 판별할 수 있기 때문이다. 어떠한 Vertex의 위치좌표를 원하는대로 변경하는 함수를 만들어보자. 위와같은 방식의 함수들을 제작하여 입력된 객체를 이동시키거나, 조절하거나, 회전시키는것이 목표이다. #pragma once class Vector3 { public: Vector3(float x = 0.0f, float y = 0.0f, float z = 0.0f) : value(XMVectorSet(x, y, z, 0)) {} Vector3(Float3 value) : value(XMLoadFlo..
-
함수에 전달된 인수는 원본 데이터에 대한 참조(레퍼런스) 로 처리된다. 따라서 함수 내에서 인수를 수정하면 호출자에게도 영향을 미치게 된다. void modifyReference(int &x) { x = x * 2; } int main() { int num = 5; modifyReference(num); // num은 이제 10입니다. return 0; } 매개변수로 받아온 값을 수정하면 결과값 또한 바뀌는걸 볼 수 있다. 장점 메모리 효율 데이터를 복사하지 않고도 데이터 수정이 가능함으로 메모리 사용량을 절약할 수 있다. 성능 향상 데이터를 복사하지 않음으로 복사하는 과정을 생략할 수 있다. 단점 수정가능 함수 내에서 수정을 할때 호출자의 데이터가 수정될 수 있음으로 의도치 않은 데이터변경이 발생할 수..
-
함수에 의해 전달된 인수는 해당 함수에 복사된 값으로 처리된다. 따라서 함수 내에서 인수를 설정하거나 바꾸어도 호출된 매개변수에는 영향을 끼치지 않는다. void modifyValue(int x) { x = x * 2; } int main() { int num = 5; modifyValue(num); // num은 여전히 5입니다. return 0; } 위와같이 처리된다면, x의 값에는 변화가 이루어지지 않는다. 장점 예측가능한 변수 (Predictable Behavior) 함수에서 인수를 수정하더라도 호출자에 영향을 미치지 않기에 예측이 가능. 데이터 보호 호출자의 데이터를 보호하여 실수로 값이 변경되는걸 방지함. 단점 메모리 사용 크기가 큰 데이터 구조를 전달할 경우, 메모리 사용량이 증가할 수 있다..
-
행렬의 기초 이해 행렬 연산 자체는 매우 쉽게 이루어져있다. 말 그대로 1항과 2항의 곱을 행과 열로 수행한다 라고 이해하면 되는데. 가령. XY 행렬이 존재할때. 1번행렬이 파란색 2번행렬이 빨간색 이라고 하자. 그렇다면, 각각의 해당하는 가로줄과 세로줄을 곱해준뒤 더하면 된다. 잘 이해가 안간다면 밑의 이미지로 쉽게 이해하도록 설명해놓았으니 살펴보자. 노란색 이 결과물로 나타나는 결과값이다. 노란색의 위치에 나타나는 행렬은 위치좌표대로 연산하면 될것이다. 행렬연산의 유의점 이런 특성을 가진것이 행렬인데, 행렬곱을 실행할 수 없는 경우도 발생한다. 다음과 같은 예시를 살펴보자. 행렬연산을 진행할 때 1번 행렬의 행과 2번행렬의 열이 같지 않으면 행렬연산을 진행할 수 없다. 반대로 진행할때도 마찬가지로 ..
-