분류 전체보기
-
win32 게임 만들기(4)-TIMER (시간 동기화)Windows Programming/win32 게임엔진만들기 2022. 4. 1. 17:40
컴퓨터 성능에 따라서 그려지고 지워지는 즉 처리 속도가 달라지기 때문에 한 프레임 실행되는 양이 고정값이면 안된다. 시간 동기화 만약 우리 컴퓨터가 100fps 라고 가정해보자 1초 뒤에 100만큼 이동하려면 한번 수행 할때마다 1만큼이동 해야한다. 이동량/프레임 이동량을 프레임단위로 분할해서 이동을 시키면 = 프레임당 이동할 양이 나옴 우리는 한프레임당 시간 값 을 구할 필요가 있다. 아주 미세한 단위에 시간 Delta Time TimeMgr 클래스 생성 QueryPerformanceCounter() : 미세한 단위의 카운트를 셀수 있는 함수 QueryPerformanceFreQuency() : 초당 카운터가 얼마나 발생하는지 빈번도 값을얻음 update() : 한프레임에 걸리는 시간을 구함 전 카운트..
-
win32 게임 만들기(3) 움직이는 object 그리기(비동기 키 입출력)Windows Programming/win32 게임엔진만들기 2022. 4. 1. 16:03
1) 그릴 물체의 정보를 갖는 CObject 클래스를 하나 생성한다. 물체의 기본 정보 위치와 스케일을 받을 수 있게 변수를 설정! CCore::init() 함수에서 기본값을 초기에 설정 해준다. 2) CCore::progress() 함수에서는 이제 update() 와 render() 두개의 함수를 반복 실행 하게 되도록 변경 update() : 물체들의 변경점을 체크 render() : 변경된 물체의 좌표 값을 현재 장면을 그리기 우리는 코드가 수행되는 지금 이순간에 어떤 키가 눌렸는지 확인 해야한다. 그때 쓰는게 비동기 키 입출력 함수 GetAsynckeystate() 이다. GetAsynckeystate()는 현재 상태값을 반환 해주는데 0x8000 제일 상위 비트 값을 체크해서 on되있으면 지금 ..
-
OSI 7 계층- 데이터링크계층+이더넷, 물리계층컴퓨터 네트워크/컴퓨터 네트워크 2022. 3. 31. 17:54
데이터 링크 계층 Data Link Layer와 Physical Layer는 packet을 frame으로 만들어 전기적인 신호로 전달하는 역할을 담당 물리 링크를 통한 신뢰성 있는 데이터 전송 기능 제공 물리적 주소 체계 (physical addressing), 네트워크 토폴로지, 네트워크 접속, 오류 통지, 프레임의 순차적 전달, 흐름 제어 등에 관여 LLC 와 MAC 상위 계층에서 보낸 데이터를 나누어서 전송에 필요한 정보를 하위 계층인 물리적 계층으로 전달 네트워크 층에서 확인한 주소의 상대와 물리적 연결을 위한 통로를 열고 유지하며, 에러를 검출하고 수정 LLC : 상위 Layer와 통신하는 Software 기능 MAC : 하위 Layer와 통신하는 Hardware 기능 LAN에서의 통신 실제로 ..
-
win32 게임 만들기(2-2)- CCore::progress() (유휴시간)Windows Programming/win32 게임엔진만들기 2022. 3. 30. 23:00
우리는 이제 else구문() 즉 유휴시간이 발생 할때마다 progress()함수를 호출 할 것이다. (우리의 중심core객체를 통해서 유휴시간동안 작업을 함) 그러기 위해선 메시지 처리를 통하는게 아닌 progress()함수 내에서 그리기 작업이 가능하여야 한다. 우선 메인 윈도우에 그리기 위한 DC를 선언을 하자 윈도우 처리기에서는 WM_PAINT 가 발생하면 화면을 갱신 하였지만 progress()는 계속 해서 지웠다 그리기를 반복 한다. 게임에서 렌더링 이란 매순간 화면이 갱신 되어야 한다. 1) init() 초기화 함수 에서 GetDC로 메인 윈도우에 그릴 DC값을 획득 2) progress() 함수에서 사각형을 그리기 객체가 소멸될때 즉 프로그램이 종료시 ReleaseDC()를 통해 얻어온 DC..
-
win32 게임 만들기(2-1)-Core객체 생성, 싱글톤(Singleton),매크로 함수Windows Programming/win32 게임엔진만들기 2022. 3. 30. 22:25
Core클래스는 말그대로 가장 핵심이 되는 클래스이다. 우리 프로그램은 core클래스가 중추가 되어 돌아가게 된다. 중심이 되는 핵심 클래스가 여러개 생성 되지 않게 하기위해 단 하나의 객체를 생성하도록 싱글톤패턴으로 구현! 싱글톤 패턴의 장점 1. 메모리 낭비를 방지할 수 있다. 2. 싱글톤으로 만들어진 클래스와 다른 클래스의 인스턴스들의 데이터 공유가 쉽다. 3. 인스턴스가 절대적으로 한개만 존재하는 것을 보증하기에 개발 시 실수를 줄일 수 있다. 4. 싱글톤 객체를 사용하지 않는 경우 인스턴스를 생성하지 않는다. 5. 싱글톤을 상속시킬 수 있다. 앞으로 코딩을 해나갈 때 싱글톤 패턴으로 관리 되어져야할 매니저급 클래스들이 많이 생성 될 것이기 때문에 간편하게 사용하도록 매크로 함수로 만들어 둔다. ..
-
win32 게임 만들기(1)- 메인cpp기본 구조 세팅Windows Programming/win32 게임엔진만들기 2022. 3. 30. 21:29
1. 기본 메시지 루프를 PeekMessage()로 수정 게임 프로그래밍에선 유휴시간동안 처리해야하는 작업이 많아지므로 기존GetMessage()는 비효율 적이다. 그러므로 PeekMessage()를 이용하여 유휴 시간동안 수많은 작업들을 수행하여야 하여야 한다. 후에 우리는 Core객체를 만들어 Core객체를 중심으로 프로그램이 돌아가게 될것이다. 따라서 우리의 메인윈도우 핸들을 얻어가기 쉽게 하기 위해 InitInstance()속의 핸들을 전역변수로 받아 둘 것이다.
-
DC와 무효화 영역Windows Programming/Win32API 란? 2022. 3. 28. 20:42
DC Device Context 란? 출력에 필요한 모든 정보를 가지는 구조체 폰트, 색상, 굵기, 그리기 모드 , 무늬 등 모두 출력에 필요한 정보 윈도우를 만들고 그림을 그리려면 반드시 DC의 핸들을 얻어야 한다. DC는 임의의 장치( 윈도우, 프린터)에 출력을 할 때 사용하는 다양한 속성의 지닌 일종의 구조체 이다. 사용자는 DC에 출력을 하면 DC가 지닌 여러 속성을 사용 해서 DC가 연결된 장치에 출력된다. DC는 하나의 메시지를 처리하는 동안 핸들을 얻고 제거해야 한다. 즉, static 형태로 보관 해서 사용할 수 없다. -DC를 얻고 제거하는 방법들 [사용 예] HDC hdc = GetDC(hWnd); //각종 출력문에서 hdc를 사용한다. Rectangle(hdc, 0, 0, 0+100,..
-
PeekMessage()Windows Programming/Win32API 란? 2022. 3. 24. 20:34
메시지 루프에서 제일 중요한 함수는 메시지를 가져 오는 GetMessage함수이다. 이 함수는 메시지 큐에서 메시지를 가져오는데 메시지가 없으면 새로운 메시지가 전달될 때까지 리턴하지 않는다. 즉 메시지가 없을 경우 무한 대기한다. 만약, 메시지 큐에 메시지가 없을 경우 다른 작업을 하고 싶다면(유휴 시간) (게임 프로그래밍을 하기위해선 이 유휴시간을 잘 활용을 해야 하기때문에 PekkMessage()함수는 중요하다) PeekMessage()는 메시지 큐에 메시지가 없더라도 즉각 리턴한다. 리턴값이 TRUE 이면 메시지가 있다는 뜻 FALSE 이면 메시지가 없다는 뜻 우리는 PeekMessage()로 유휴시간(idle time)을 활용 할수 있다. if()구문 들어온 메시지가 WM_QUIT이면 break..