Transforming Normal Vector
페이스(face)를 하나 생성했을 때, 페이스에 대한 법선 벡터(normal vector)는 여러모로 유용하게 쓰인다. 만약, 페이스에 어떤 변환 행렬 A를 적용했을 때, A의 법선 벡터에도 이 변환 행렬을 적용할 수 있을까? 즉, A의 변환 뒤의 법선 벡터와, 변환 전의 페이스에 A를 적용한 결과가 같을까? 이것은 명확하게 정의되지 않는다. 왜냐하면, 컴퓨터에서의 부동 소수점은 그 자체가 정확하지 않기 때문이다. 단순히 같은 변환을 적용하여 원하는 정도의 정밀도의 값을 얻을 수 있는 경우도 있겠지만, 미묘하게 값이 맞지 않는 경우도 있을 수 있다. 그래서, 단순히 같은 변환을 적용하는 것보다, 변환 행렬이 적용된 페이스의 법선 벡터를 다시 계산하는 것이 좋다. 그러나, 법선 벡터를 재계산하는 것은 비교..
더보기
Stanford Bunny / Happy Buddha / Dragon
Stanford Bunny, Only wireframe, 69451 faces Stanford Happy Buddha, Only wireframe, 1087716 faces Standford Dragon, Only wireframe, 1132830 faces 이들 파일들은 스탠포드 CG 연구실에서 배포하는 ply 파일을 읽은 것이며, OpenGL을 사용하여 렌더링 했다. 드래곤과 붓다는 상대적으로 폴리곤이 많은 편이라, 쉐이딩을 적용하지 않으면 제대로 모습을 알아보기 힘들다. 쉐이딩을 적용하지 않은 와이어프레임만으로는 대단히 허전해 보인다. 위의 ply 파일을 구하려면, 아래의 스탠포드 CG 연구실에 대한 링크를 참조하라. 모델링 파일에서 데이터를 읽어들일 때 비디오 메모리에 페이스를 생성하지 않는다면,..
더보기
초기화 리스트를 사용한 생성자 호출
생성자가 참으로 말썽 많은 존재인 것은, 클래스가 명시적인 생성자를 가지고 있지 않을 경우, 컴파일러가 암묵적인 생성자로 클래스를 생성하기 때문이다. 만약 클래스가 반드시 명시적인 초기화가 필요한 데이터 멤버들을 가지고 있을 경우, 이런 방식으로 클래스 생성하는 것은 파국을 초래할 가능성이 높다. 또, 데이터 멤버들이 명시적인 초기화가 필요하지 않더라도, 이것은 역시 좋은 코드는 아니다. 기본 자료형이 아닌 사용자 정의 자료형일 경우 어떤 오버헤드가 있을지 알 수 없고, 템플릿 자료형이라면 그야말로 예측 불가이다. 만약, 이 데이터 멤버들이 예외를 던진다면 이 예외를 받아낼 방법이 전혀 없다. 즉, 여기서 할 이야기는, '디폴트 생성자를 제외한, 반드시 필요한 생성자를 제공해야 하며, 가급적 디폴트 생성..
더보기
Rings and Subrings
링(ring)에 대해 적당히 대응하는 단어를 찾을 수가 없어서, 링은 그대로 외래어 표기를 사용합니다. 날개의 도서관에서 사용하는 수학 용어에 대한 기본 정책은, http://celdee.tistory.com/610에서 찾아볼 수 있습니다. 링은, 명시적으로 연산을 정의하지 않았다면, 거의 언제나 덧셈과 곱셈 두 연산에 대한 집합을 대상으로 한다. 만약 필요하다면, 링이 어떤 두 연산을 정의하고 있는지 명시적으로 밝힐 수도 있다. 일반적으로, 군(group)은 덧셈이라는 하나의 정의만 다루고 있고, 곱셈에 관한 연산을 쓰지 않았다. 즉, 두 개 이상의 어떤 복합적인 연산에 대해서 대수 구조를 확장하지 않은 것인데, 링은 바로 그런 경우까지 다룬다. 따라서, 링은 군보다 조금 더 큰 개념이라 할 수 있는데..
더보기
Subgroup (Semigroup, 부분군, 반군)
예를 들어, 짝수의 집합은 전체 정수의 부분 집합이라고 할 수 있다. 그리고, 홀수, 짝수의 집합은 각각 덧셈에 관해 군(group)을 이룬다. 그러므로, 다음의 정의를 만족한다면, 짝수는 정수군의 부분군(subgroup, semigroup, 반군)을 이룬다. def. H가 집합 G에서 어떤 연산에 대해 군을 이룬다면, 부분 집합 H는 어떤 군 G의 부분군이다. 즉, G가 어떤 연산 *에 대한 군이라면, H는 G의 부분군이고, a, b ∈ G일 때 a, b ∈ H이다. 이것은, H는 연산 *에 대해 닫혀 있어야 한다는 것을 뜻하고, 부분적으로 a ∈ H일 때 a * a ∈ H이다. 더 간단히 말하자면, 부분군은 군의 정의 중, 첫번째 정의인 'G의 모든 원소 a, b에 대해 (a * b) * c = a ..
더보기