-
VC++ 2022 solution 파일 soft3d.sln 추가
-
단, 빌드 타겟은 x86만 지원함 (x64는 인라인 어셈블리를 지원하지 않음)
-
빌드된 실행파일 soft3d.exe 은 프로젝트 폴더로 옮겨서 실행해야 함
-
Dev-C++ 5.11 에서 빌드 가능하도록 프로젝트 관련 파일 업데이트
-
단, 빌드 타겟은 win32 만 지원함
g-Matrix3d Neo v0.40 (Software Renderer)
(c)2003 김 성완 (kaswan)
Release date : 2003. 10. 17
이번 0.40 버전은 g-Matrix3d Neo 의 첫 공개 버전인 0.30 버전의 업그레이드 버전으로 이전 버전의 여러 버그를 고쳤고, ASE 파일의 기본적인 재질 정보를 처리하도록 했고, 조명 처리에 specular Light 를 포함 시켰습니다.
특히 이번 버전의 개발 후반에는 GCC를 기반으로 한 공개용 Win32 컴파일러인 Dev-C++ 을 사용했기 때문에 MS VC++ 뿐만 아니라 Dev-C++ 로도 컴파일이 가능합니다. 공부하는 이들에게는 비싸고 덩치 큰 Visual Studio 보다 오히려 덩치도 작고 공짜인 Dev-C++ 이 더 나은 선택일 겁니다. 물론 Dev-C++ 이 사용의 편의성이나 컴파일 속도 면에서 뒤지기는 하지만 속도 최적화 성능은 VC++ 6.0을 조금 앞서는 군요. 좌우지간 GCC의 인라인 어셈블리 문법에 익숙하지 않아서 좀 고생을 했고, GCC의 최적화 옵션 버그를 잡느라고 고생을 했네요.
-추가 기능-
. Specular 조명 처리
. ASE 재질 정보 파싱 (텍스츄어를 제외한 메쉬 단위의 기본 재질 정보만)
-개선 기능-
. 마우스로 모델을 회전하는 기능 개선(마우스 드래깅시 회전 값이 항상 모델의 현재 회전 값에서 시작하도록)
. 본이나 바이패드 모델은 렌더링에서 제외
-버그 수정-
. 부모 노드가 있는 메쉬 정보를 제대로 파싱하지 못하고 빠뜨리는 걸 수정
-기타 추가 사항-
. Dev-C++ 컴파일러 호환
-개발 환경-
OS: Windows 2000
컴파일러 : Visual C++ 6.0
Dev-C++ 4.9.8.3 (GCC 3.2)
-Dev-C++ 관련 참고 사이트-
Dev-C++ : http://www.bloodshed.net
Mingw : http://www.mingw.org
gcc : http://gcc.gnu.org
<저작권 및 배포>
이 프로그램과 소스는 공개된 것이지만 저작권과 제반 권리는 기본적으로 모두 저작권자에게 있고, 사용하거나 배포하는 권리에 대해서는 비상업적인 목적인 경우를 제외하고는 모든 권리가 여전히 저작권자에게 남아있습니다. 혹시 상업적인 용도로 활용하고자 하는 경우에는 반드시 저작권자와 사전 협의를 하셔야 합니다.
배포의 경우 원래 압축된 파일 그대로라면 누구라도 마음대로 인터넷등을 통해서 자유롭게 배포할 수 있습니다. 단, 상업적으로 판매되는 책이나 잡지의 부록에 포함되는 CD-ROM 등에 수록이 되어서 배포하는 경우는 저작권자에게 반드시 미리 통보해서 허락을 받으시기 바랍니다.
개인적인 공부를 위해서 활용하는 경우나 대학등의 공공 교육기관에서 교육의 목적으로만 활용할 경우에는 저작권자를 명시적으로 표기한다는 조건만 지키면 마음대로 사용하실 수 있습니다.
수정 및 재배포의 경우는 오로지 비상업적인 경우에만 허용합니다. 이 경우에도 물론 원저작권자에 대한 명시적인 표기는 물론 원저작권자에게 최소한 통보는 해주셔야 합니다.
여기에 구체적으로 명시되지 않은 나머지 모든 권리는 저작권자에게 있으며, 그런 권리를 얻고자 하는 경우에는 반드시 저작권자와 사전 협의를 하시기 바랍니다.
이 프로그램은 이전의 초간단 3D 엔진 g-Matrix3d v0.1의 후속 버전으로서 g-Matrix3d Neo 라는 이름이 말하듯이 단순한 업그레이드 버전이 아니라 밑바닥부터 완전히 새로 작성된 새로운 3D 엔진입니다. 이번에는 3D API에 대한 지원없이 T&L 파이프라인과 레스터라이저를 순수 소프트웨어로만 새로 작성했습니다. 이전처럼 3DS MAX의 ASE 파일을 보여주는 간단한 뷰어 기능을 구현해 놓았으니 엔진의 기능이나 성능을 확인해 볼 수 있을 것입니다.
아직은 기능적인 면에서는 별로 추가된 것이 없긴 하지만 새로 작성하면서 코드를 거의 C++ 스타일로 바꾸었습니다. 앞으로 틈틈이 지속적인 업그레이드를 하면서 기능을 추가할 계획입니다.
순수 소프트웨어로만 작성되었지만 3D API를 지원하고자 할 경우 Vertex Buffer(D3D), Vertex Array(OGL)등을 손쉽게 사용할 수 있도록 데이터 구조를 가능한 3D API에 적합한 구조로 했습니다.
이번 Neo 엔진을 작성하는 데는 레스터라이저의 경우 안드레 라모쓰의 책 Tricks of 3D Game Programming Gurus 가 원근 보정 텍스츄어매핑을 고정소수점 연산으로 구현하는 데 큰 도움이 되었습니다. 저도 과거에 좀 시도하다가 포기했는데, 안드레 라모쓰는 끝까지 시도해서 구현했더군요^^. 물론 저는 좀 더 전진해서 픽셀당 나눗셈을 두번에서 한번으로 줄이고도 레스터라이저의 Inner Loop를 완전히 고정소수점연산만으로 구현했고, 여타 이전 버전에서 보였던 텍스츄어매핑의 부정확함이나 레스터라이저의 보이지 않은 오류등을 완전히 수정했습니다. 이 덕분에 정확도와 함께 레스터라이저도 이전 보다 빨라졌고, 소프트웨어 엔진의 성능에 치명적인(?) Z-Buffering의 지원에도 불구하고 이전 버전과 크게 다름 없는 성능을 냅니다.
특히 이번 Neo 엔진의 T&L 파이프라인은 획기적으로 개선된 부분으로 풀리곤 갯수가 엄청나게 많은(수만개 수준) 모델의 경우 획기적인 성능의 향상을 보여주고 있습니다. 만개 남짓한 폴리곤을 가진 모델의 경우 저의 펜티움3 1G 머신에서 초당 20프레임의 높은 속도를 보여 주고 있고, 심지어 어눌하게 3D 하드웨어를 사용한 것보다 더 빠른 경우도 있습니다. 이 덕분에 전체 렌더링 속도가 이전 버전에 비해 최대 8배 까지 빨라졌습니다. T&L 파이프라인의 작성에는 http://www.cbloom.com/3d/techdocs/pipeline.txt 문서가 T&L 파이프라인을 다시 생각하는 데 좋은 지침이 되었고, 결국 T&L 파이프라인의 순차 처리라는 고정 관념을 깨고, 가장 최적의 좌표계에서 최선의 순서로 처리하는 방식을 구현했습니다.
모든 개발은 Windows 2000 플랫폼에서 Visual C++ 6.0 으로 이루어졌습니다.
참고문헌:
http://www.cbloom.com/3d/techdocs/pipeline.txt
Tricks of 3D Game Programming Gurus
조작:
Arrow Keys - Move Camera
Mouse - Rotate Model
기능:
Gouraud Shading
Perspective Corrected Texturemapping
Sub-Pixel, Sub-Texel Accuracy
Depth-Buffering
3DS MAX ASE file Parser(only Geometry Data)