전체 글
-
기존 그냥 퐁 쉐이딩에서는 픽셀에서 ray를 쏴서 물체에 맞는 곳을 계산해주면 되었다. 이제 빛의 반사를 계산하기 위해서는 물체에 맞은 위치에서 또 ray를 쏴서 계산해주고, 또 그게 다른곳에 맞으면 거기서도 또 ray를 쏴서 계산해주고... recursive하게 계산을 해야 한다. 처음 ray가 물체에 맞아서 나온 color(그냥 퐁쉐이딩해서 나온color)와 첫번째 반사돼서 맞은 물체의 색, 두번째 반사돼서 맞은 물체의 색, 세번째 반사돼서 맞은 물체의 색... 을 적절히 섞어서 색을 결정하면 된다. 무한히 함수를 재귀호출 할 수 없기때문에 recursive level을 정해 놓고 해야 한다. // 광선이 물체에 닿으면 그 물체의 색 반환 vec3 traceRay(Ray &ray, const int ..
빛의 반사기존 그냥 퐁 쉐이딩에서는 픽셀에서 ray를 쏴서 물체에 맞는 곳을 계산해주면 되었다. 이제 빛의 반사를 계산하기 위해서는 물체에 맞은 위치에서 또 ray를 쏴서 계산해주고, 또 그게 다른곳에 맞으면 거기서도 또 ray를 쏴서 계산해주고... recursive하게 계산을 해야 한다. 처음 ray가 물체에 맞아서 나온 color(그냥 퐁쉐이딩해서 나온color)와 첫번째 반사돼서 맞은 물체의 색, 두번째 반사돼서 맞은 물체의 색, 세번째 반사돼서 맞은 물체의 색... 을 적절히 섞어서 색을 결정하면 된다. 무한히 함수를 재귀호출 할 수 없기때문에 recursive level을 정해 놓고 해야 한다. // 광선이 물체에 닿으면 그 물체의 색 반환 vec3 traceRay(Ray &ray, const int ..
2023.11.02 -
https://en.wikipedia.org/wiki/Supersampling Supersampling - Wikipedia From Wikipedia, the free encyclopedia Spatial anti-aliasing method Calculating the end color value Comparison of a rendered scene without (left side) and with supersampling anti-aliasing applied (right). (Not applying AA is analogous to a nearest-neighbor en.wikipedia.org 곡면의 계단현상을 개선할 수 있다. 수퍼샘플링의 개념 한픽셀에서 하나의 ray를 쏴서 계산하는 것이..
수퍼 샘플링 (Supersampling)https://en.wikipedia.org/wiki/Supersampling Supersampling - Wikipedia From Wikipedia, the free encyclopedia Spatial anti-aliasing method Calculating the end color value Comparison of a rendered scene without (left side) and with supersampling anti-aliasing applied (right). (Not applying AA is analogous to a nearest-neighbor en.wikipedia.org 곡면의 계단현상을 개선할 수 있다. 수퍼샘플링의 개념 한픽셀에서 하나의 ray를 쏴서 계산하는 것이..
2023.11.02 -
텍스처링? 3D 오브젝트에 이미지를 가져와서 덧씌우는 것. 디테일한 비주얼을 보여줄 수 있다. 텍스처링은 어떻게 해야 할까? 이전 포스트에서 무게중심 좌표계 (Barycentric Coordinates)를 사용했을때는 세 점의 중간의 색깔들을 interpolation해서 자동으로 채우도록 했었다. 같은원리로 이번에는 점 4개(사각형)을 채우는데, 이미지로 채울 것이고, 각 점들은 이미지의 어느 부위에서 색을 가져와서 채울것인지만 결정해주면 텍스처링을 할 수 있다. (텍스처 좌표 Texture coordinates) 텍스처는 이미지의 가로 세로 1x1로 가정한다. (텍스처 좌표는 u 축과 v축으로 나눠서 uv 라고도 부른다) 사각형은 삼각형 두개로 나눌 수 있고, 무게중심 좌표계를 이용해 위치를 특정할 수..
텍스처링 (Texturing), 포인트 샘플링, 리니어 샘플링, bilinear interpolation텍스처링? 3D 오브젝트에 이미지를 가져와서 덧씌우는 것. 디테일한 비주얼을 보여줄 수 있다. 텍스처링은 어떻게 해야 할까? 이전 포스트에서 무게중심 좌표계 (Barycentric Coordinates)를 사용했을때는 세 점의 중간의 색깔들을 interpolation해서 자동으로 채우도록 했었다. 같은원리로 이번에는 점 4개(사각형)을 채우는데, 이미지로 채울 것이고, 각 점들은 이미지의 어느 부위에서 색을 가져와서 채울것인지만 결정해주면 텍스처링을 할 수 있다. (텍스처 좌표 Texture coordinates) 텍스처는 이미지의 가로 세로 1x1로 가정한다. (텍스처 좌표는 u 축과 v축으로 나눠서 uv 라고도 부른다) 사각형은 삼각형 두개로 나눌 수 있고, 무게중심 좌표계를 이용해 위치를 특정할 수..
2023.11.02 -
텍스처링(texturing)이란? 사진을 3차원으로 렌더링된 물체에 입혀주는 기술 직접 색깔을 일일히 지정해주는게 아니라 사진, 이미지등을 입혀주면 편하다. 무게 중심 좌표계 (Barycentric coordinates) https://en.wikipedia.org/wiki/Barycentric_coordinate_system Barycentric coordinate system - Wikipedia From Wikipedia, the free encyclopedia Coordinate system that is defined by points instead of vectors A 3-simplex, with barycentric subdivisions of 1-faces (edges) 2-faces (..
텍스처링, 무게 중심 좌표계 (Barycentric coordinates), 선형 보간 (Linear Interpolation)텍스처링(texturing)이란? 사진을 3차원으로 렌더링된 물체에 입혀주는 기술 직접 색깔을 일일히 지정해주는게 아니라 사진, 이미지등을 입혀주면 편하다. 무게 중심 좌표계 (Barycentric coordinates) https://en.wikipedia.org/wiki/Barycentric_coordinate_system Barycentric coordinate system - Wikipedia From Wikipedia, the free encyclopedia Coordinate system that is defined by points instead of vectors A 3-simplex, with barycentric subdivisions of 1-faces (edges) 2-faces (..
2023.11.02 -
// 내용 추가 예정
선형 보간(lerp)과 구면 선형 보간(slerp)// 내용 추가 예정
2023.11.01 -
C++에서는 네 가지 유형의 캐스트 연산자가 있으며, 각각은 서로 다른 목적과 사용 사례에 대해 설계되어 있다. 이들 캐스트 연산자는 타입 변환을 수행하며, 특정 캐스트 연산자는 추가적인 런타임 검사를 제공한다. static_cast: static_cast는 컴파일 타임에 타입 변환을 수행한다. 관련된 타입 간의 변환에 사용된다(예: 기본 타입 간의 변환, 상속된 클래스 간의 포인터 변환). float f = 10.5; int i = static_cast(f); // float에서 int로 변환 reinterpret_cast: reinterpret_cast는 바이트 레벨에서 타입 변환을 수행한다. 서로 관련이 없는 타입 간의 변환에 사용된다. 이것은 위험할 수 있으며, 제대로 사용되지 않으면 정의되지 않..
C++ 의 캐스팅C++에서는 네 가지 유형의 캐스트 연산자가 있으며, 각각은 서로 다른 목적과 사용 사례에 대해 설계되어 있다. 이들 캐스트 연산자는 타입 변환을 수행하며, 특정 캐스트 연산자는 추가적인 런타임 검사를 제공한다. static_cast: static_cast는 컴파일 타임에 타입 변환을 수행한다. 관련된 타입 간의 변환에 사용된다(예: 기본 타입 간의 변환, 상속된 클래스 간의 포인터 변환). float f = 10.5; int i = static_cast(f); // float에서 int로 변환 reinterpret_cast: reinterpret_cast는 바이트 레벨에서 타입 변환을 수행한다. 서로 관련이 없는 타입 간의 변환에 사용된다. 이것은 위험할 수 있으며, 제대로 사용되지 않으면 정의되지 않..
2023.11.01 -
inline 함수와 #define 매크로 함수는 코드에서 유사한 작업을 수행할 수 있지만, 구문, 기능 및 처리 방식에 많은 차이가 있다. 다음은 inline 함수와 #define 매크로의 주요 차이점이다: 정의 방식: inline 함수는 일반 함수와 같이 정의되며, 인자와 반환 타입을 가진다. #define 매크로는 전처리기 지시자를 사용하여 정의되며, 인자와 반환 타입이 명시적으로 정의되지 않는다. // inline 함수 예제 inline int add(int a, int b) { return a + b; } // #define 매크로 예제 #define ADD(a, b) ((a) + (b)) 타입 검사: inline 함수는 컴파일 타임에 정적 타입 검사를 제공한다. #define 매크로는 타입 검사..
inline 함수와 매크로 함수의 차이inline 함수와 #define 매크로 함수는 코드에서 유사한 작업을 수행할 수 있지만, 구문, 기능 및 처리 방식에 많은 차이가 있다. 다음은 inline 함수와 #define 매크로의 주요 차이점이다: 정의 방식: inline 함수는 일반 함수와 같이 정의되며, 인자와 반환 타입을 가진다. #define 매크로는 전처리기 지시자를 사용하여 정의되며, 인자와 반환 타입이 명시적으로 정의되지 않는다. // inline 함수 예제 inline int add(int a, int b) { return a + b; } // #define 매크로 예제 #define ADD(a, b) ((a) + (b)) 타입 검사: inline 함수는 컴파일 타임에 정적 타입 검사를 제공한다. #define 매크로는 타입 검사..
2023.11.01 -
std::string은 일반적으로 동적 할당 배열(dynamic allocation array)를 사용하여 문자열 데이터를 저장한다. std::string의 구현은 C++ 표준 라이브러리에 따라 다를 수 있지만, 대부분의 구현에서 std::string은 내부적으로 동적 할당 메모리를 사용하여 문자열 데이터를 저장하고 관리한다. 이렇게 동적 메모리를 사용하면 문자열의 크기가 런타임에 변경될 수 있게 해준다. std::string의 일반적인 구현은 다음과 같은 멤버 변수를 포함할 수 있다: Data Pointer: 동적 할당된 메모리의 시작 주소를 저장하는 포인터다. 이 포인터는 문자열 데이터를 저장하는 배열을 가리킨다. Size: 현재 문자열의 길이를 저장한다. Capacity: 동적 할당된 메모리의 전체..
std::string 은 동적 할당 배열이다!std::string은 일반적으로 동적 할당 배열(dynamic allocation array)를 사용하여 문자열 데이터를 저장한다. std::string의 구현은 C++ 표준 라이브러리에 따라 다를 수 있지만, 대부분의 구현에서 std::string은 내부적으로 동적 할당 메모리를 사용하여 문자열 데이터를 저장하고 관리한다. 이렇게 동적 메모리를 사용하면 문자열의 크기가 런타임에 변경될 수 있게 해준다. std::string의 일반적인 구현은 다음과 같은 멤버 변수를 포함할 수 있다: Data Pointer: 동적 할당된 메모리의 시작 주소를 저장하는 포인터다. 이 포인터는 문자열 데이터를 저장하는 배열을 가리킨다. Size: 현재 문자열의 길이를 저장한다. Capacity: 동적 할당된 메모리의 전체..
2023.11.01 -
explicit explicit 키워드는 주로 생성자와 변환 연산자에 사용되며, 해당 생성자나 변환 연산자가 암시적 변환(implicit conversion)을 허용하지 않도록 지정한다. 예를 들어, explicit 키워드가 없는 생성자를 가진 클래스가 있을 때: class Test { public: Test(int x) {} }; void func(Test t) {} int main() { func(42); // int에서 Test로 암시적 변환 가능 } 위의 코드는 func(42)에서 int 타입의 42가 Test 타입으로 암시적 변환되어 func 함수에 전달된다. explicit 키워드가 생성자에 지정된 경우: class Test { public: explicit Test(int x) {} }; v..
explicit 키워드explicit explicit 키워드는 주로 생성자와 변환 연산자에 사용되며, 해당 생성자나 변환 연산자가 암시적 변환(implicit conversion)을 허용하지 않도록 지정한다. 예를 들어, explicit 키워드가 없는 생성자를 가진 클래스가 있을 때: class Test { public: Test(int x) {} }; void func(Test t) {} int main() { func(42); // int에서 Test로 암시적 변환 가능 } 위의 코드는 func(42)에서 int 타입의 42가 Test 타입으로 암시적 변환되어 func 함수에 전달된다. explicit 키워드가 생성자에 지정된 경우: class Test { public: explicit Test(int x) {} }; v..
2023.11.01 -
중괄호 초기화 (Brace Initialization): C++11부터 소개된 중괄호 초기화는 객체의 초기화 방법을 통일하고자 도입되었다. 이 방식의 장점: 일관된 문법: 동일한 중괄호 {} 문법을 사용하여 변수, 객체, 배열, STL 컨테이너 등을 초기화할 수 있다. narrowing conversion 방지: {}를 사용하여 초기화할 때 형 변환이 수행되지 않거나 값의 손실이 발생하지 않도록 한다. int i{3.14}; // 컴파일 오류. narrowing conversion 방지 기본 생성자와 동일한 문법: 중괄호를 사용하여 기본 생성자를 호출하는 것도 가능하다. std::vector vec{}; // 비어 있는 벡터 생성 다양한 초기화 방법들 C++에서는 여러 가지 방법으로 변수나 객체를 초기화..
중괄호 초기화와 다양한 초기화 방법중괄호 초기화 (Brace Initialization): C++11부터 소개된 중괄호 초기화는 객체의 초기화 방법을 통일하고자 도입되었다. 이 방식의 장점: 일관된 문법: 동일한 중괄호 {} 문법을 사용하여 변수, 객체, 배열, STL 컨테이너 등을 초기화할 수 있다. narrowing conversion 방지: {}를 사용하여 초기화할 때 형 변환이 수행되지 않거나 값의 손실이 발생하지 않도록 한다. int i{3.14}; // 컴파일 오류. narrowing conversion 방지 기본 생성자와 동일한 문법: 중괄호를 사용하여 기본 생성자를 호출하는 것도 가능하다. std::vector vec{}; // 비어 있는 벡터 생성 다양한 초기화 방법들 C++에서는 여러 가지 방법으로 변수나 객체를 초기화..
2023.11.01