전체 글

전체 글

    [C++] 2차원 vector 크기 동적으로 재설정

    아래와 같이 이미 초기화가 된 벡터에 resize 함수를 사용하면 열이 제대로 반영이 안되는걸 볼 수가 있는데 2번째 인자인 vector(5)는 임시 객체이기 때문에 본 객체에 변경이 반영되지 않는다.int main(){ vector> a(7, vector(6)); a.resize(5, vector(5)); a[0].resize(5);} 해결 할 수 있는 방법은 새로운 임시 객체를 만들어 재할당 하는것이다vector> a(7, vector(6));a = vector>(7, vector(5)); 코딩테스트 때 유용하게 써먹자

    [C++] vector (벡터) 복사하기

    반복자#include #include using namespace std;void printVector(const vector v) { cout vect1{1, 2, 3, 4}; vector vect2; for (int i = 0; i  출력Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2The first element of new vector is :1할당 연산자 =(Assignment Operator =)#include #include using namespace std;void printVector(const vector v) { ..

    부동 소수점 오차 (개념)

    실수 표현 방식컴퓨터는 모든 수를 0과 1로 이루어진 2진수로 표현한다. 이것은 정수뿐만 아니라 소수점이 존재하는 실수도 마찬가지이다.  정수의 경우 이러한 표현이 간단하지만, 실수를 2진수로 표현하는 것은 복잡하다. 실수를 표현하기 위한 다양한 방법들이 연구되었으며 현재는 크게 2가지 방식이 존재한다.고정 소수점 (fixed point) 방식부동 소수점 (floating point) 방식고정 소수점 (fixed point) 방식실수는 보통 정수부와 소수부로 나눌 수 있다. 따라서 실수를 표현하는 가장 간단한 방법은 소수부의 자릿수를 미리 정하고, 고정된 자릿수의 소수를 표현하는 것이다.32비트 CPU에서 고정 소수점 방식으로 실수를 표현하면 위와 같다.하지만, 이 방식은 정수부와 소수부의 자릿수가 크지..

    NDC (Clip Space)란 무엇인가?

    렌더 파이프 라인에서 Vertex Shader 단계의 마지막에, 지정된 좌표를 받아들이고 이 범위에서 벗어난 모든 좌표는 자르게된다. 이때, Clip 된 좌표들은 모두 폐기되고, 남은 좌표들은 최종적으로 파편화되어 화면에 보이게 되고 눈에 보이는 모든 좌표들이 -1.0과 1.0 범위 안에 지정하는 것은 직관적이지 않기 때문에, 우리가 원하는 화면에 표현하기 위한 공간으로 다시 변환하게 된다. 이때 사용되는 것이 NDC(Noramlize Device Coordinate)이며, 이 공간은 투영(Projection) 행렬에 정의된다. 앞서 유도한 투영 행렬이 정의하는 Viewing Box는 절두체(Frustrum)라고 불린다. 이 절두체 내부에 있는 좌표들은 화면에 나타나게 된다. 지정한 범위 내에서 NDC로..

    [C/C++] 부동소수점의 비교연산 안되는 이유 및 오차범위 해결하기

    int i = 0;double d = 0.f;while (i++  사실 C++에선 다 자르고 출력하기 때문에 파악하기가 쉽지 않다  아래와 같이 작성해주면 쉽게 파악 할 수가 있다 따라서if (d == 1.0) 를 해주면 false가 나오는 이유다int main(){ int i = 0; double d = 0.f; while (i++  이녀석만큼 빼주면 된다int main(){ int i = 0; double d = 0.f; while (i++

    좌표계 (Coordinate system)와 수학적 공간 (Mathematical space)

    일반적인 공간인 '유클리드 공간(Euclidean space)'에서 보통 어떤 수학/물리적 문제를 다룬다. 사실 어떤 물리적 사건을 표현할 때에 '어떤 공간을 사용하는가'는 '어떤 좌표계를 사용하는가'만큼이나 중요하다. 심지어 좌표계와 공간(space)을 헷갈려하는 학생들 또한 매우 많다.우선 공간부터 살펴보자. 아주 옛날인 기원전 300년 쯤 고대 그리스의 유클리드는 기하학을 연구하였고, 그가 정리한 5가지 원칙을 만족하는 아주 기본적인 공간을 유클리드 공간이라 부른다. 아래 그림은 우리에게 매우 익숙한 3차원 유클리드 공간이다.   직선(line)은 1차원 유클리드 공간의 예이다. 이러한 직선은 어떠한 '단위간격(unit interval)'로 측정/표현할 수 있다. 아무렇게나 '단위간격'을 정한 후,..

    동차 좌표계란?

    투영변환이란실세계의 한 점 Q = (x, y, z)는 3차원의 점이다.이 점이 투영 스크린상의 한 점 (x, y)의 2차원으로 변환되는 것이 투영 변환이다.투영 변환을 위해서는 동차 좌표계를 사용하는 것이 편리하다.동차 좌표계란?3D에서는 기본적으로 3차원 좌표계이지만 어떤 목적으로 4차원으로 확장이 가능하다.어떤 목적을 위해 한 차원의 좌표(n) 을 추가한 좌표 (n+1)로 표현을 하는 것을 동차 좌표계라고 한다.ex) 4차원 좌표 =(x,y,z,w) => x/w , y/w , z/w 투영행렬에서 동차좌표를 이용하는 이유시점으로 보이는 점들의 위치가 중요한 것이 아니라 시점으로 부터의 방향이 중요하기 때문에 동차좌표를 사용한다. 투영 행렬을 위 그림으로 나타내면 3차원의 점들이 2차원 평면의 빨간 네모..

    레스터화기 단계 Rasterization

    레스터화 단계 (rasterization stage)라고도 하는 레스터화기 단계 (rasterizer stage)의 주 임무는 투영된 3차원 삼각형으로부터 픽셀 색상들을 계산해내는 것이다.1. 뷰포트 변환절단을 마치고 나면 하드웨어는 원근 나누기를 수행해서 동차 절단 공간 좌표를 정규화된 정규화된 좌표 (NDC)로 변환한다.정점들들이 NDC 공간으로 들어왔다면, 2차원 이미지를 형성하는 2차원 x,y 좌표 성분들을 후면 버퍼의 한 직사각형 영역으로 변환한다. 그 직사각형 영역이 바로 뷰포트 이다. 이 변환을 마치고 나면 x,y 성분은 픽셀 단위의 값이 된다. 일반적으로 이 뷰포트 변환은 z 성분을 변경하지 않는다. (그 성분은 깊이 버퍼링에 사용해야 하므로) 그러나 D3D11_VIEWPORT 구조체의 M..

    투영 행렬 유도와 ndc

    우리가 살고있는 세계에는 원근감이라는게 있다. 가까운 물체는 크고 먼 물체는 작게 보이는 것이다.언리얼로 원근감이 있는 카메라와 없는 카메라를 비교해보자 왼쪽은 원근감이 없는 흔히말하는 오쏘그래픽인 카메라이고오른쪽은 시야각이 90도인 투영행렬이 들어간 카메라다.누가봐도 오른쪽이 원근감도 있고 우리가 사는 세계와 비슷하다. 왼쪽 같은 카메라를 사용하는 게임들도 있지만 원근감이 있는 게임을 만들려면 투영행렬이 필요한것이다. 원근감을 표현하는 카메라는 카메라로부터 시작하는 사각뿔의 앞부분이 잘린 시야영역을 사용한다. 그럼 상하 좌우 전후로 이루어진 절두체(FRUSTUM)이 나오게 된다.그 절두체를 X축 방향에서 보면 이와 같은 그림이 나온다. 그중 근 평면이 우리의 모니터 화면이고 카메라로 부터 근 평면까지의..

    [SQL] 자료형

    컬럼의 자료형1) 숫자형     TINYINT, INT, FLOAT2) 문자형     CHAR, VARCHAR, TEXT, ENUM3) 날짜형     DATE, DATETIME, TIMESTAMP 숫자형 자료형1) TINYINT- 가장 작은 숫자 자료형.- 부호가 있는 경우 -128 ~ 127.             - 부호가 없는 경우 0 ~ 255.             - 1byte 크기를 갖는다. 2) SMALLINT- 부호가 있는 경우 -32768 ~ 32767.- 부호가 없는 경우 0 ~ 65535.- 2bytes 크기를 갖는다.3) MEDIUMINT- 부호가 있는 경우 -8388608 ~ 8388607.- 부호가 없는 경우 0 ~ 16777215.- 3bytes 크기를 갖는다. 4) INT-..