[ C/ C++ 프로그래밍 ] 썸네일형 리스트형 [ 혼연 정리 ] 함수객체- 2 [알고리즘의 변형] for_each 처럼 함수 객체를 명시적으로 요구하는 알고리즘도 있고 필요할 때만 함수 객체를 옵션으로 받는 알고리즘도 있다. find는 순회중의 반복자 값과 세번째 인수로 지정한 값(val)을 == 연산자로 비교하여 정확하게 일치하는 요소를 찾아낸다. 그런대 때로는 ==로 정확한 일치를 검색하는 것이 아니라 사용자가 정의하는 방식으로 검색할 욧소를 골라야 하는 경우도 있다. 이때 함수 객체로 요소를 직접 비교할 수 있는데 이런 함수는 보통 원래 함수의 이름 끝에 _if가 붙는다. find의 함수 객체 버젼은 다음과 같다. InIt find_if(InIt first, InIt last, UniPred F); 세번째 인수는 F는 () 연산자를 오버로딩하는 함수 객채이며 요소값 하나를 인수로 전달받아 이 값.. 더보기 [ 혼연 정리 ] 함수객체- 1 [함수객체] ㅇ 함수 객체 STL의 알고리즘들은 전역 함수가 처리하며 문제를 풀기 위한 반복자 구간, 검색 대상, 채울 값 따위의 정보들이 함수의 인수로 전달된다. 알고리즘 함수들은 입력된 정보를 바탕으로 알아서 동작하지만 어떤 함수들은 내부에서 모든 동작을 다 처리하지 않거나 할수 없는 경우도 있다. 검색하고자 하는 값이 정확하게 어떤 조건인지, 정렬을 위해 요소를 어떤 방식으로 비교할 것인지를 함수가 마음대로 결정 할 수 없다. 이때 함수에게 좀더 구체적인 처리 방식을 지정하기 위해 사용자가 미리 만들어 놓은 함수 객체를 전달한다. 알고리즘 함수는 동작중에 사용자의 개입이 필요한 부분에 대해서 함수 객체를 호출하여 의사를 결정한다. for_each 함수를 사용하면 순회를 대신 시킬 수 있으며 이때 순회 중에 어떤.. 더보기 [HLSL] 블린- 퐁 반영 반사광 ㅇ 블린- 퐁 반영 반사광 퐁의 반영 반사 모델은 반사 벡터를 계산해야만 한다. 그러나 특정 환경에서는 반사 벡터를 계산하는 것이 어려워 대체적인 방법으로 블린-퐁(Bilnn-Phong) 반영 반사 모델 이라는 것을 생각해 냈다. 블린-퐁 반영 반사 모델에서는 하프 벡터(Half Vector)가 사용된다. 하프 벡터는 광원 벡터 L과 벡터E의 중간의 각도에 있는 벡터로 아래와 같이 나타낸다. 블린 - 퐁의 반영 반사광은 하프 벡터와 법선 벡터 내적의 곱으로 계산한다. 이 반영 반사광의 강도가 가장 큰 곳은 법선 벡터와 하프 벡터의 방향이 가까운 경우, 즉 법선 벡터와 하프 벡터가 같은 경우이다. 이것은 정확히 시선 벡터와 법선 벡터가 이루는 각도와 광원 벡터와 법선 벡터가 이루는 각도가 동일한 곳으로 시.. 더보기 [HLSL] 퐁 반영 반사광 (반사벡터) 잘 딱여진 물체를 보면 표엔 빛이 지쳐 반짝반짝 빛나게 된다. 특히 태양과 같은 강한 빛이 있으면 태양빛이 반사된 부분은 하이라이트라고 부르는 강하고 흰 빛이 눈부시게 그려진다. 이 하이라이트를 표현하기 위한 방법으로 가장 잘 알려진 반영(specularity) 반사 기법이 퐁에 의한 반영 반사 모델이다. 하이라이트와 같은 강한 반사는 입사한 빛이 반사되는 각도에서 보았을 때 제일 강하게 반사된다. 이말은 [ 시선이 물체에서 반사되었을 때, 그 방향이 빛의 입사방향에 가까울수록 밝게 보인다. ]고 바꾸어 말 할 수 있다. 퐁은 시선이 물체에 반사되었을 때의 반사 벡터 R을 구해서 반사벡터가 광원 벡터(물체에서 광원을 향하는) L과 가까우면 강한 빛, R과 L이 멀면 약한 빛이 되도록 수식화 했다. 퐁의 .. 더보기 [HLSL] 램버트 확산 조명 ㅇ 램버트 확산 조명 “물체 표면에서 반사하는 빛의 휘도(Luminance)는 빛의 입사 벡터 L과 표면의 법선 벡터 N이 이루는 각도의 코사인에 비례한다” 확산 반사광 -빛의 강도 i, 입사각을 c, 물체의 반사 계수를(물체의 색) k라고 하면, 물체 표면의 색 I은 I = i * k * cos© = I * k * (N*L) (cos© 0) ( N: 법선 벡터, L: 광원이 있는 방향을 가리키는 광원 벡터 ) ※ cos© 가 음수이면 값은 0이다 ㅇ 환경광 일정한 밝기로 물체를 전부 칠하는 빛으로, 물체 면의 방향이나 빛의 방향이 전혀 영향을 주지 않는다. 간접광은 다양한 물체에서 다양한 반사를 반복해 다른 물체를 비추므로 그 밝기는 장소에 따라 다르므로 정확하게 계산하는 것이 매우 어렵다.. 더보기 [Windows Api 정복 정리 ] DC(Device ConText) ㅇ 윈도우즈 구성 - 윈도우즈는 세가지 동적 연결 라이브러리로 구성되어 있다. - KERNEL : 메모리를 관리하고 프로그램을 실행 - USER : 유저 인터페이스와 윈도우를 관리하는 USER - GDI : 화면처리와 그래픽 담당 ㅇ DC(Device ConText) - 출력에 필요한 모든 정보를 가지는 데이터 구조체 - GDI에 의해 관리 - 어떤 폰트, 색상, 굵기, 출력방법 등이 모두 출력에 필요한 정보 ㅇ 사용예) LineTo - LineTo(hDC,X,Y) : 선의 색상, 굵기, 모양 등의 정보를 모두 모아 DC에 넣고 DC의 핸들을 넘겨 받아 그린다. - LineTo(hDC,100,100) : 화면에 여러개의 창이 있는 경우 내가 지정한 창을 찾아 LinTo 함수를 실행한다. ㅇ 사용예) Te.. 더보기 [Windows Api 정복 정리 ] 메시지 처리 함수 (WinProc) ㅇ 메시지 처리 함수 (WinProc) LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); - 메시지가 발생할 때 프로그램의 반응을 처리하는 일을 한다. - WndProc 는 윈도우 프로시저(WIndow Procedure)라는 뜻 - WinMain내의 메시지 루프는 메시지를 메시지 처리함수로 보내주기만 할뿐 , WinMain에 의해 호출되는 것이 아니라 윈도우즈에 의해 호출됨 - 운영체제에 의해 호출되는 응용 프로그램 내의 함수를 콜백(CallBack) 함수라고 함 - 인수 4개는 MSG 구조체의 멤버 4개와 동일 - HWND: 메시지를 받는 핸들 - UINT : 메시지의 종류 - WPARAM,LPARAM : 메시지에 따라 부가적인 정보 - WndProc의 구조 s.. 더보기 [Windows Api 정복 정리 ] 메시지 루프 ㅇ 윈도우즈 시스템 - 윈도우즈를 메시지 구동 시스템(Message Driven System)이라고 함 , 도스와 윈도우의 차이점 - 윈도우즈는 메시지(상황)에 따라 실행 순서가 달라짐 , 도스는 미리 입력된 순차적 실행 ㅇ 메시지 - 사용자나 시스템 내부적인 동작에 의해 발생된 일체의 변화에 대한 정보 ex) 마우스 버튼클릭 - 메시지가 발생하면 프로그램에서는 메시지가 어떤 정보를 담고 있는가를 분석하여 어떤 루틴을 호출 할것인가를 결정 ㅇ 메시지 루프 - 윈도우 프로그램에서 메시지를 처리하는 부분을 메시지 루프라고 함 - 보통 WinMain 함수의 끝에 다음과 같은 형식으로 존재 while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); Disp.. 더보기 [Windows Api 정복 정리 ] WinMain & 윈도우 클래스 ㅇ WinMain int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow - hInstance : 프로그램의 인스턴스 핸들 - hPrevInstance : 바로 앞에 실행된 현재 프로그램의 인스턴 핸들, WIN32에서는 항상 NULL, 호환성을 위해 존재 - lpCmdLine : 명령행, 도스의 argv인수에 해당 - nCmdShow : 프로그램이 실행될 형태, 최소화, 보통모양이 전달 ※ 인스턴스(Instance) : 클래스가 메모리에 실제로 구현된 실체를 의미, 실행된 프로그램 ==> 인스턴스 - 각 메모장은 서로 다른 인스턴스 핸들을 가지고 있다. - 인스턴스 핸들값으로 두개의 메.. 더보기 [Windows Api 정복 정리 ] 기초 ㅇ API - 특정 시스템(운영체제든 하드웨어든)을 위한 함수 집합 ㅇ 표준 데이터형 - windows.h 라는 헤더 파일에 typedef로 선언되어 있음 ㅇ 핸들(handle) - 구체적인 어떤 대상에 붙여진 번호, 문법적으로 32비트의 정수값 - 도스 경우 파일핸들만 사용됨 - 윈도우 경우 윈도우 핸들(hWnd)을 붙여 윈도우를 번호로 관리한다. - 문자열보다 정수를 사용하는 것이 훨씬 더 속도가 빠르기 때문에 핸들을 사용 - 핸들은 오로지 구분하기 위한것 ㅇ 핸들의 특징 - 정수값, 대부분의 32비트값 ==> 구분이 목적이기 때문에 적합 - 운영체제가 핸들을 발급, 사용자는 쓰기만 하면된다. - 같은 핸들끼리 정복된 값을 가지지 않는다. - 실제값이 무엇인지 몰라도 된다 ==> 단순한 표식, 핸들형.. 더보기 이전 1 ··· 5 6 7 8 9 10 다음