게임 개발
-
void Rasterization::Render(vector &pixels) { // 그래픽카드(GPU)의 특징 // 1. GPU가 훨씬 빠릅니다. 가급적 GPU 사용 // 2. CPU->GPU 복사가 느립니다. 한 번 넣어두고 반복 사용 // 3. GPU->CPU 복사는 더 느립니다. // 태양 그리기 this->vertexBuffer.resize(sun.vertexBuffer.size()); for (size_t i = 0; i vertexBuffer[i] = sun.vertexBuffer[i]; } this->indexBuffer = sun.indexBuffer; this->colorBuffer = sun.colorBuffer;..
2차원 애니메이션void Rasterization::Render(vector &pixels) { // 그래픽카드(GPU)의 특징 // 1. GPU가 훨씬 빠릅니다. 가급적 GPU 사용 // 2. CPU->GPU 복사가 느립니다. 한 번 넣어두고 반복 사용 // 3. GPU->CPU 복사는 더 느립니다. // 태양 그리기 this->vertexBuffer.resize(sun.vertexBuffer.size()); for (size_t i = 0; i vertexBuffer[i] = sun.vertexBuffer[i]; } this->indexBuffer = sun.indexBuffer; this->colorBuffer = sun.colorBuffer;..
2023.11.07 -
회전 역 코사인, 사인 함수로 phi(피)의 각도를 구하는 것도 가능하지만, 코사인-사인 법칙을 이용해서 다음과 같이 더 간단히 할 수 있다. (phi피가 사라짐) vec3 RotateAboutZ(const vec3 &v, const float &theta) { vec3 vp{v.x * cos(theta) - v.y * sin(theta), v.x * sin(theta) + v.y * cos(theta), 0.0f}; return vp; } Update() 함수 이동, 회전, 스케일 void Rasterization::Update() { // 애니메이션 구현 // GUI 입력에 대해서 vertexBuffer 업데이트 // 이 예제에서는 this->vertexBuffer만 업데이트하고 // colorBuf..
2차원 변환회전 역 코사인, 사인 함수로 phi(피)의 각도를 구하는 것도 가능하지만, 코사인-사인 법칙을 이용해서 다음과 같이 더 간단히 할 수 있다. (phi피가 사라짐) vec3 RotateAboutZ(const vec3 &v, const float &theta) { vec3 vp{v.x * cos(theta) - v.y * sin(theta), v.x * sin(theta) + v.y * cos(theta), 0.0f}; return vp; } Update() 함수 이동, 회전, 스케일 void Rasterization::Update() { // 애니메이션 구현 // GUI 입력에 대해서 vertexBuffer 업데이트 // 이 예제에서는 this->vertexBuffer만 업데이트하고 // colorBuf..
2023.11.07 -
원의 반지름과 각도 세타를 이용해서 삼각형의 정의 주의: 각 삼각형의 vertex를 이용해 삼각형을 그릴때 시계방향으로 vertex를 입력해야 정상적으로 삼각형이 그려진다. 인덱스 버퍼 삼각형을 여러개 그릴때는 vertex 수를 가급적 줄이고 이웃해 있는 삼각형끼리 같은 vertex를 공유해서 사용하는것이 훨씬 효율적. 어떤 삼각형을 그려라 라는게, 어떤 vertex들을 순서대로 그려라 라는 의미로 vertex 들의 index가 나열된 버퍼 메모리 공간을 사용한다. Rasterization::Rasterization(const int &width, const int &height) : width(width), height(height) { // 원을 그려봅시다. const auto radius = 0.5..
원 그리기원의 반지름과 각도 세타를 이용해서 삼각형의 정의 주의: 각 삼각형의 vertex를 이용해 삼각형을 그릴때 시계방향으로 vertex를 입력해야 정상적으로 삼각형이 그려진다. 인덱스 버퍼 삼각형을 여러개 그릴때는 vertex 수를 가급적 줄이고 이웃해 있는 삼각형끼리 같은 vertex를 공유해서 사용하는것이 훨씬 효율적. 어떤 삼각형을 그려라 라는게, 어떤 vertex들을 순서대로 그려라 라는 의미로 vertex 들의 index가 나열된 버퍼 메모리 공간을 사용한다. Rasterization::Rasterization(const int &width, const int &height) : width(width), height(height) { // 원을 그려봅시다. const auto radius = 0.5..
2023.11.07 -
좌표계 NDC(Normalized Device Coordinates) http://www.directxtutorial.com/Lesson.aspx?lessonid=111-4-1 DirectXTutorial.com First of all, I officially welcome you to Direct3D. I would like to teach you both the basics and the advanced topics of 3D programming. Whether you want to build your own engine, borrow one and modify it, or just buy one and use it, it is important that y www.directxtutorial.co..
삼각형 레스터화좌표계 NDC(Normalized Device Coordinates) http://www.directxtutorial.com/Lesson.aspx?lessonid=111-4-1 DirectXTutorial.com First of all, I officially welcome you to Direct3D. I would like to teach you both the basics and the advanced topics of 3D programming. Whether you want to build your own engine, borrow one and modify it, or just buy one and use it, it is important that y www.directxtutorial.co..
2023.11.05 -
역방향 광추적 여태까지 구현했던 역방향 광추적은 픽셀당 하나씩 ray를 쏴 줘야 하고 안티에일리어싱까지 하려면 더 많이 쏴야 한다. 게다가 물체가 많아지면 각 ray가 각 물체랑 모두 충돌여부를 따져야 한다. 만약 물체가 10개라면? 각 ray 당 물체 10개랑 모두 충돌 확인해야 한다. 그러면 1개일때보다 10배는 느려진다. 만약 물체가 1000개라면? 10000개라면?... 자료구조를 잘 활용하면 좀 빨라지긴 하지만, 아무리 그렇게 해도, 반사와 굴절 등을 모두 구현한 순수 ray tracing을 실시간 그래픽스 렌더링하기는 어렵다. 레스터화(rasterization) 레스터화의 장점은, 여러개의 삼각형을 따로따로 그리기 적합하다는 것. 삼각형은 vertex(정점) 세개로 정의할 수 있다. 레스터화 ..
레스터화(rasterization)가 빠른 이유역방향 광추적 여태까지 구현했던 역방향 광추적은 픽셀당 하나씩 ray를 쏴 줘야 하고 안티에일리어싱까지 하려면 더 많이 쏴야 한다. 게다가 물체가 많아지면 각 ray가 각 물체랑 모두 충돌여부를 따져야 한다. 만약 물체가 10개라면? 각 ray 당 물체 10개랑 모두 충돌 확인해야 한다. 그러면 1개일때보다 10배는 느려진다. 만약 물체가 1000개라면? 10000개라면?... 자료구조를 잘 활용하면 좀 빨라지긴 하지만, 아무리 그렇게 해도, 반사와 굴절 등을 모두 구현한 순수 ray tracing을 실시간 그래픽스 렌더링하기는 어렵다. 레스터화(rasterization) 레스터화의 장점은, 여러개의 삼각형을 따로따로 그리기 적합하다는 것. 삼각형은 vertex(정점) 세개로 정의할 수 있다. 레스터화 ..
2023.11.04 -
벡터 표기법 정리 그래픽스 수학 복습 포인트와 벡터 포인트 위치만 표현 예) 철수의 위치, 영희의 위치 벡터 방향과 크기 표현 예) 속도, 힘 포인트-벡터 연산 [주의] 대부분의 API에서는 포인트와 벡터를 구분해서 구현하지 않음 직선 (Line) 선분 Affine Combination 이런식으로 여러개의 Point 앞에 각각 스칼라(가중치)를 곱한 다음 더해주는것을 Affine Combination, 또는 Affine Sum 이라고 한다. 이때, 각 가중치를 모두 더하면 1이 되어야 한다. 벡터 더하기 행렬 벡터 벡터를 행렬형태로 많이 사용하게 되는데, 이때 세로로 길게 쓰면 보기 불편해서 Transpose해서 표현을 많이 함. 동차좌표 (Homogeneous Coordinates) 그래픽스에서 벡터를..
벡터와 포인트벡터 표기법 정리 그래픽스 수학 복습 포인트와 벡터 포인트 위치만 표현 예) 철수의 위치, 영희의 위치 벡터 방향과 크기 표현 예) 속도, 힘 포인트-벡터 연산 [주의] 대부분의 API에서는 포인트와 벡터를 구분해서 구현하지 않음 직선 (Line) 선분 Affine Combination 이런식으로 여러개의 Point 앞에 각각 스칼라(가중치)를 곱한 다음 더해주는것을 Affine Combination, 또는 Affine Sum 이라고 한다. 이때, 각 가중치를 모두 더하면 1이 되어야 한다. 벡터 더하기 행렬 벡터 벡터를 행렬형태로 많이 사용하게 되는데, 이때 세로로 길게 쓰면 보기 불편해서 Transpose해서 표현을 많이 함. 동차좌표 (Homogeneous Coordinates) 그래픽스에서 벡터를..
2023.11.04