Loading...

c++ 생각하기 2.

1. 컴파일러가 스스로 하는 암시적인 타입변환. 단일인자 생성자를 통한 암시적 타입변환..... 이녀석의 때문에 생기는 버그는 찾기 어렵다. 미리미리 조심해야지. 단일인자 생성자의 경우에는 explicit 키워드를 사용하자. 하지만 이렇게 해도 명시적인 타입변환은 여전히 허용된다. 명시적인 타입변환까지 막을 필요가 있을까... 말그대로 사용자가 필요해서 대놓고 한다는데. 문제는 몰래하는 암시적변환이지만.... 또다른 방법으로는 컴파일러의 암시적 타입변환의 규칙을 교묘히 피해나가는 것이다. 즉, 컴파일러의 암시적 타입변환 규칙에 어긋나게 만드는 것이다. "사용자 정의 타입변환 함수는 두개 이상 쓰이지 않는다." 라는 것이 있다. 그래서 클래스만 잘 만들어 놓으면 객체생성은 허용하지만 암시적 타입변환은 불가..

dllimport, dllexport

exports library file(.exp), object file library(.lib) 참조 : msdn http://msdn.microsoft.com/ko-kr/library/se8y7dcs(VS.80).aspx .exp파일에는 export된 함수와 데이터 항목에 대한 정보가 들어있다. .lib에는 export할 함수를 만들때 .exp파일도 함께 만든다. 다른 프로그램으로 export 하거나 import하기도 하는 프로그램을 직접 또는 간접적으로 링크하고자 할 때 이 .exp 파일을 사용한다. .exp 파일을 사용하여 링크하면 link에서는 import 라이브러리를 이미 만들었다고 가정하기 때문에 다시 만들지 않는다. 이 파일들을 만드는 방법은 간단하다. #ifdef MGSYSTEM_EXPOR..

c++ 생각하기 1.

1. 프로퍼티 시트 활용 블로그에 이미 자료를 올렸으니 생략. 2. 참조자와 포인터 구분 사용 참조의 사용 - 참조하고자 하는 어떤 객체를 미리 알고 있을 때(참조자는 NULL이 될 수 없기 떄문) - 다른 객체를 바꾸어 참조할 일이 없을 때(포인터의 경우 하나의 변수를 가지고 여러개의 객체를 바꾸어 참조 가능) - 연산자 함수 구현시(예로 첨자 연산자[] 구현시 포인터를 사용하면 어색한 모습이 된다.) 포인터의 사용 - 딱히 가르킬 주소가 없을때(NULL을 사용 할 수 있다) - 하나의 변수로 여러객체를 바꾸어 참조하더라도 이전 객체의 값이 변하지 않는다. 여태까진 대부분 포인터를 즐겨 사용했다. 포인터를 사용하면 NULL로 초기화를 할 수 있어 초기화 여부를 체크 할 수 있기 때문이다. 참조자를 사용..

ID3D10InputLayout

정점은 여러가지 정보를 가진다. 기본적으로는 정점의 위치, 색상, 노말, 텍스쳐 좌표등이 그것이다. 이러한 정점 정보는 파이프라인의 첫번째 스테이지인 입력조립기(IA)스테이지로 입력된다. 렌더링 파이프라인의 입력조립기 스테이지는 개발자가 정의한 정점 구조체의 형식을 미리 알고 있어야 앞으로 파이프라인에 입력될 정점 데이터를 올바르게 해석할 수 있다. 장치에 정점의 형식을 알리는 방법은 정점에 대한 입력레이아웃 이라는 객체를 구성하고 이를 입력조립기 스테이지에 제공하는 것이다. 결국 입력레이아웃이란 입력조립기 스테이지가 입력데이터를 접근할 때에 사용하는 인터페이스이다. 정점구조체의 각 속성은 D3D10 _INPUT_ELEMENT_DESC구조체의 배열로 표현된다. ID3D10InputLayout Interf..

Effect Pool

Effect Pool의 사용. pre compile를 위한 fxc의 사용은 환경변수의 path에서 미리 설정. 하나의 프로그램에서 여러개의 이펙트를 사용할 때 이펙트 파일을 셋팅하기 위해 많은 이펙트 변수들이 필요하다. 종종 많은 수의 변수들이 이펙트끼리 겹치게 된다. 여러가지 설정없이 이펙트끼리의 쉐이더나 변수를 공유하기 위해 각각의 이펙트에서 실제로 같은 데이터들을 만들어서 설정하여 호출할 필요가 있다. effect pool은 이러한 문제를 해결해준다. effect pool은 다른 이펙트들 간의 변수와 텍스쳐, 그리고 쉐이더를 공유하게 해준다. 이것은 공통된 변수나 데이터를 매 프레임한 한번씩만 설정해 줄수 있다는 것을 의미한다. effect pool은 실질적으로 두개의 파트로 구성되어져 있다. ef..

중복 없는 난수 만들기, 혹은 카드 섞기 문제

출처 : http://conanoc.egloos.com/1046677 최 모 주임이 점심시간에 제기했던 재미있는 문제를 조금 찾아봤습니다. 문제는 "1에서 100까지의 숫자를 중복 없이 랜덤하게 뽑아내라" 이며, 이 문제는 "1에서 100까지 숫자를 잘 섞어라" 와 동일하기도 합니다. 인터넷에서 찾아보니 대략 밥먹을때 이야기나왔던 것들과 비슷하고, 정리하고 보니 현 선임이 이야기했던 방법이 가장 효율적인것 같네요. 1) 우선, 가장 쉽게 생각할 수 있는 잘못된(?) 방법은 이런 방법일 겁니다. 중복 안된 숫자가 나올때 까지 계속 랜덤을 돌리는 것이지요. 물론 MAX가 20정도면 이 방법도 유효할 수 있겠습니다만, 별을 다섯개 줄만한 답변은 아닌것 같네요. 2) 그 다음 생각할 수 있는 방법은 숫자들을 배..

Physique Vs Skin modifier and Bones Vs Bipeds

bone은 일반적인 뼈를 나타내는데 하나의 마디를 나타낸다. 워낙에 max로 케릭작업을 많이 하니까 max에서 사람모양 작업을 편하게 하도록 만든 것이 biped. 즉, biped는 사람모양에 맞게 미리 준비되어 있는 기능인지라 이 biped로 토끼를 만들거나 호랑이를 만들거나 하는건 어렵다. 사람모양에 특화된 bone이라고 생각하면 될듯하다. skin과 physique는 일반적인 피부라고 생각하면 될듯하다. 즉, max상에서의 일반 메쉬로 보면된다. 바이패드의 셋팅이란 케릭터의 뼈대를 위치시키는 것을 말하는데 이 뼈대와 케릭터를 직접 연결시키는 작업을 리깅이라고 한다. 이후에 할 작업이 피직과 스킨인데 피직은 아주 오래된 기능이다. 그나마 최근 기능이 스킨인데 디자이너 입장에서는 스킨이 훨 편하다니까...

_beginthread와 _beginthreadex의 차이

출처 : http://naiades.tistory.com/6 윈도우즈에서 스레드를 생성하는 API는 CreateThread(), _beginthread(), _beginthreadex() 이렇게 3개의 함수가 존재합니다. CreateThread()와 _beginthread(), _beginthreadex()의 차이점은 다음과 같습니다. CreateThread()는 스레드를 생성하는 기능만 담당한다. _beginthread(), _beginthreadex()는 내부적으로 CreateThread() 를 사용하여 스레드를 생성하고 C Runtime library에서 내부적으로 필요로 하는 메모리 영역을 초기화 해주는 역할을 하게 됩니다. 초기화 되는 메모리 영역은 각 스레드 마다 따로 관리되게 됩니다. 그렇다..