본문 바로가기

C++ Programming

Animation with DirectX - 1. Skeletal Animation 1. Skeletal Animation DXUT를 이용하여 그래픽스를 공부하다보면 다른 내용은 수월하게 넘어가는 편이지만 의외로 애니메이션만큼은 내용도 난해하고 이해하기가 어렵습니다. 다른 예제는 그저 예제따라 변수 설정 몇 개 해주고 스테이트 설정하거나 함수를 인자에 맞게 돌려주면 구동되는 반면에 애니메이션만큼은 추상 클래스부터 구체화 시킨 뒤에 또 별별 세팅을 다 해줘야하는데 그 참조할만한 문헌은 이해도 잘 안 되고 난해하기까지 합니다. ( 물론 봤더니 이해할만하더라 하시는 분은 가볍게 넘겨주시면 되겠습니다. ) 결국 DirectX Sample에 있는 SkinnedMesh를 이해하는 데 거의 한 달 가까이 걸렸습니다. 그래서 다른 분들은 이 삽질을 피해갈 수 있었으면 하는 바, 간단하게나마 이론적 배.. 더보기
ANSI와 UTF-8과의 상호 변환 ANSI에 대해 http://ko.wikipedia.org/wiki/EUC-KR 위의 링크 내용을 요약하면 CP949 = 현대 한글 + EUC-KR EUC_KR = KS X 1001 + KS X 1003 KS X 1001 = 한글 및 한자 모음 KS X 1003 = ASCII + '\(원 문자)' 정도 되겠음다. 유니코드에 대해http://b.mytears.org/2005/01/101 Unicode는 기본적으로 Byte order mark 후에 해당하는 글자들이 나오게됩니다. 즉 UTF-8의 경우( 아래 표 참조 ) EF BB BF EA B0 80 EA B0 80 이렇게 적혀 있으면 가가 라고 보이게 됩니다. 단, UTF-8에 한해서 Byte order mark가 없어도 상관없습니다. Encoding U.. 더보기
Lippman, Stanley B. - Essential C++ 어떤 책들은 목차만 봐도 큰 도움이 되는 책이 있습니다. Essential C++ 이 책은 목차만으로 제가 원하는 모든 걸 만족시켜 주는군요. 목차 나갑니다. C++ 프로그래밍의 기초 C의 문법 + C++에서 새로이 기초가 되는 것들. 프로그래밍 작성법 데이터 객체의 정의와 초기화 표현식( 연산자 우선순위 ) 조건문, 루프문 배열, 벡터 포인터 파일의 읽기 쓰기( 스트림 ) 절차적 프로그래밍 함수입니다. 함수. 함수의 작성과 호출 기본 매개변수 지역 정적 객체 인라인 함수 오버로딩 함수 템플릿 함수 함수 포인터 헤더 파일 제네릭 프로그래밍 컨테이너와 반복자에 대한 개념입니다. 포인터의 계산 반복자 컨테이너 순차 컨테이너 제네릭 알고리즘( 함수 객체, 함수 객체 어댑터 ) 반복자 삽입자 스트림 반복자 객체.. 더보기
스트림에서 스트림으로 전송하기 이 글을 읽기 전에 다음 글들을 읽기를 권장합니다. 한 스트림을 다른 스트림으로 연결하기 스트림에서 이진 파일 다루기 스트림에서 STL 사용하기 이번 글에서는 이전과는 색다르게 문제풀이 방식으로 진행해 보겠습니다. 한 스트림으로부터 다른 스트림으로 내용을 전달하는 방법을 여러가지 소개하는 데에는 역시 예시문이 좋을 것 같아 이렇게 편집해보았습니다. 그럼 질문 스타트 ! 스트림에서 스트림으로의 복사 한 파일이 존재한다고 합시다. 있는 내용을 그대로 복사해서 다른 파일로 복사한다고 해보죠. 어떻게 짜겠습니까 ? void foo() { FILE *pIn = fopen( "in.txt", "rb" ); FILE *pOut = fopen( "out.txt", "wb" ); char buffer[1024] = { .. 더보기
스트림에서 STL 사용하기 이 글을 읽기 전에 다음 글들을 읽기를 권장합니다. 한 스트림을 다른 스트림으로 연결하기 스트림에서 이진 파일 다루기 이번에는 스트림에서 STL을 이용하는 법에 대해서 논해보겠습니다. 원래는 아래 글에 같이 묶으려했으나 글이 길어져 나누어 작성하게 되었군요. 스트림은 상수가 될 수 없다. 간단한 이야기입니다. 스트림은 그 특성상 읽을 떄나 쓸 때나 자신의 형상이 변합니다. 따라서 상수로 정의하면 스트림으로 할 수 있는게 아무 것도 없습니다. 스트림 반복자는 다른 반복자와 달리 컨테이너( 스트림 )의 내용을 바꿉니다. 이는 컨테이너와 스트림을 구분짓는 중요한 요소입니다. 앞으로의 설명에 이 내용을 잘 숙지하시기 바랍니다. 스트림에서 쓸 수 있는 STL 알고리즘은 한정되어 있다. 이 내용은 좀 중요합니다. .. 더보기
스트림에서 이진 파일 다루기 이 글을 읽기 전에 다음 글들을 읽기를 권장합니다. 한 스트림을 다른 스트림으로 연결하기 스트림의 두 가지 용법 스트림은 C의 파일 디스크립터와는 달리 타입에 따른 다른 입력을 제공합니다. 마치 자바에서 스트림으로 객체를 넘기면 toString()함수를 호출해 주듯이, int 형의 정수를 넣으면 자동으로 문자열로 변환하여 넣어주고 클래스와 스트림의 변환(Shift) 연산을 구현해주면 클래스 자체도 스트림으로 넘기고 받을 수 있게 해주죠. 위와 같은 기능을 서식화 입출력 기능( formatted I/O operation )이라고 합니다. 사용자의 타입을 항상 확인한 뒤에 그 타입을 스트림에 걸맞는 타입으로 변환하는 작업을 항상 진행해줍니다. 하지만 가끔은 문자의 그 자체를 이용하고 싶을 때가 있습니다. 예.. 더보기
한 스트림을 다른 스트림으로 연결하기 한 스트림을 다른 스트림으로 연결하기 배경 C++에서 기본적으로 전역으로 제공하는 스트림은 네 개가 있습니다. 바로 cin, cout, cerr, clog 입니다. ( clog는 C++에서 처음 생긴 것으로 알고 있습니다. 긴 입력을 받아들이는 데 좋다고 합니다. ) 하지만 윈도우 프로그래밍과 같이 콘솔창을 쓰지 않는 프로그램을 짤 떄에는 저 객체들은 쓸모없어집니다. 그럴 떄에 저 스트림을 파일로 돌리면 저 객체를 다시 이용할 수 있게 됩니다. 특히 에러로그 등을 남길 때 쓸만하죠. 또한 스트림 형태와 호환되는 객체를 만들었다면 그곳으로 연결해줄 수도 있습니다. 이 글에서는 스트림을 다른 스트림과 연결하는 방법에 대해서 소개하려고 합니다. 방법 C++ 스트림에서는 다른 스트림과 엮어주는 것을 두 가지를 .. 더보기
[C++] 헤더파일을 나누어 은닉화 구현하기 [C++] 헤더파일을 나누어 은닉화 구현하기 배경 이 내용은 모듈화에 대한 생각으로부터 시작합니다. 저는 개인적으로 어떤 코드 조각이 큼지막한 것을 꽤 싫어합니다. 특히 헤더가 지저분한 것은 딱 질색입니다. 일반적으로 헤더는 사용자가 쓰기에 일목요연하고 정리된 모습을 보여줘야 한다고 생각합니다. 그러기 위해서는 필요에 의한 것(객체 혹은 함수)들과 사용자에게 제공하는 것들을 구분할 필요가 있습니다. 이에 관하여 흥미로운 내용을 [The C++ Programming Language]에서 발견하였고 그 내용을 간단히 정리하고자 합니다. 사용자와 구현자 일반적으로 어떠한 코드 조각(Code segmant)를 구현하였을 때, 그 코드 조각이 필요한 사람들은 대부분 사용자와 구현자 로 구분할 수 있습니다. 구현자.. 더보기