본문 바로가기

DirectX( 다이렉트 X)

난반사광(Diffuse Reflection)과 정반사광(Specluar Reflection) 빛의 반사는 대표적으로 2가지로 난반사와 정반사를 볼 수 있다. 난반사는 빛이 표면에 닿을떄 여러 방향으로 퍼져나가는 빛을 말한다. 정반사는 입사-반사의 법칙에 의해 반사되는 한방향으로 반사하는 빛이다. 난반사는 물체의 표면에 닿은 빛의해 확산되고 산란된 빛에 의해 가시성이 높아진다. 난반사의 공식은 입사각과 표면의 법선벡터의 의해 결정되며 빛의 입사광 벡터과 법선벡터의 내적하는 cos을 구하면 난반사광의 양을 구할 수 있다. 정반사는 거울반사 경면반사라고도 하며 빛의 물체에 닿았을때 빛이 일정하게 반사되는 형상이다. 정반사의 공식을 알기 위해선 일단 반사벡터(R)를 구해야한다. (N은 법선벡터, *는 내적, L은 입사각벡터) 여기서 반사벡터의 최종공식은 반사벡터(R) = 2(L*N)N - L이다 (자세.. 더보기
C++ 커스텀 행렬 (Custom Vector3 For D3D) 전치행렬 (Transpose Matrix) 행렬의 곱 (Multiply Matrix) /** Custom Matrix 0.1v 2019/05/02 Direct 수업용 Matrix 제작 xtar.tistory.com */ #include using namespace std; // 행렬별 구조체 struct Matrix3X3 { float entry[3][3]; }; struct Matrix4X4 { float entry[4][4]; }; struct Matrix1X4 { float entry[1][4]; }; struct Matrix1X3 { float entry[1][3]; }; //4x4 전치행렬 Matrix4X4 TransposeMatrix4X4(Matrix4X4 _matrix) { Matrix4X4.. 더보기
C++ 커스텀 벡터 클래스 (Custom Vector3 Class For D3D) #include using namespace std; class Vector3 { public: float x; float y; float z; Vector3() { x = 0; y = 0; z = 0; } Vector3(float _x, float _y, float _z) { x = _x; y = _y; z = _z; } #ifndef 연산자 오버로딩 friend Vector3 operator+(const Vector3& a, const Vector3& b) // 벡터 덧셈 { float Vx = a.x + b.x; float Vy = a.y + b.y; float Vz = a.z + b.z; return Vector3(Vx, Vy, Vz); } friend Vector3 operator-(const .. 더보기
3D 프로그래밍을 위한 변환 선형 변환 행렬으로 표현 비례- 비레변환은 물체의 크기를 바꾸는 효과를 나타낸다. 예시- 최솟점 (-4,-4,0) 과 최댓점 (4,4,0) 으로 정의된 사각형을 z축은 그대로 두고 x축으로 0.5단위, y축으로 2단위 비례해 보자. 회전-벡터 v를 축n에 대해 회전하는 변환 회전각은 n의 진행 방향을 기준으로 반시계방향으로 측정된다. 회전행렬 예시- 최솟점(-1,0,-1)과 최댓점 (1,0,1)로 정의한 사각형을 y축에 대해 시계방향으로 –30도(반시계 방향으로 30도) 회전 아핀변환동차변환-선형변환에 이동변환을 결합 한 것. 벡터는 이동에 불변동차좌표- 점과 벡터를 동일한 방식으로 다룰수 있다. 동차좌표는 3차원 벡터에 w성분을 추가한 네값쌍의 형태 1.벡터를 나타내는 동차좌표는 (x,y,z,0)2.점.. 더보기
3D 프로그래밍을 위한 행렬 행렬 곱셈 곱 BA는 정의되지 않음 B의 열 수와 A 행 수가 같지 않기 떄문이다. 즉 AB≠BA 교환법칙이 성립되지 않음 열수 = 행수 행*열 위 식은 선형결합(일차 결합)이라 한다. 즉, 어떤 1 x N 행벡터 u와 어떤 N x M 행렬 A에 대해, 곱 uA는 A의 행 벡터들과 u의 스칼라 계수들의 선형결합이다. A(B+C) = AB +AC (A+B)C = AC + BC / (AB)C = A(BC) 결합 법칙 전치행렬 – 행렬의 행들과 열들을 맞바꾼 것 단위행렬 – 주대각 성분들만 1이고 나머지는 모두 0인 정방행렬*정방행렬: 열 수와 행 수가 같은 정사각형의 행렬*주대각: 정방행렬에서 좌상에서 우하로의 주된 대각선이 있는 성분들 단위행렬은 곱셈의 항등원 역할을 한다. 즉, A가 M x N 행렬이고 .. 더보기
3D 프로그래밍을 위한 벡터 스칼라 곱셈 / 벡터의 덧셈과 스칼라의 곱셈으로 정의된 벡터의 뺄셈 길이가 1인 벡터를 단위벡터(unit vector) 임의의 백터를 단위 벡터로 만드는 것을 정규화(normalization) 내적(inner product)은 스칼라값을 내는 벡터의 곱셈이다.u와 v는 단위벡터이면 두 벡터 사이의 각도의 코사인이다. u와 v의 내각 구하기 벡터v와 단위 벡터n이 주어졌을 때 p를 내적을 이용해서 v와 n으로 표현 공식 외적 – 스칼라인 내적과는 달리 외적의 결과는 벡터이다. 외적은 오직 3차원 벡터 외적으로 구한 값은 두 벡터 u와 v에게 직교이다. 직교화: 벡터 집합을 정규직교벡터 집합으로 만드는 것을 직교화(orthogonalization)라고 부른다. 벡터 집합 { v0, v1, v2} 을 이용해서.. 더보기