디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

아무래도 소스코드 전문도 한번 올려봐야 할것 같아서...

우라늄갤로그로 이동합니다. 2011.05.13 01:34:48
조회 71 추천 0 댓글 0

올려봐요...

/*****************************************************************************
*
* 오늘날짜 2011년 4월 18일
* 동방요요몽 before 빌드 0001
* 먼저 DX의 초기화, 그림을 띄우고 넘기는것부터 하도록 하자.
*
* 11년 5월 10일
* d3d디바이스 생성하고 화면 지운뒤 파란색으로 띄우는 부분까지.
* 완성. 작업표시줄에 표시되는 문자는 LPCTSTR 로 구현한뒤 넘겨줘야 함. 썅....
* 11년 5월 11일
* 이미지를 sprite 함수를 통해 뿌리는 상황을 구현중.
* 맛깔나다 아오 씐나!
* 11년 5월 12일
* 세부부분 손보면서 슬슬 키입력 받는부분, 탄막 구현부분 짜는중. 아오 씐나 씐나 죽겠다!
******************************************************************************/

#include <list>
#include <d3d9.h>
#include <d3d9types.h>
#include <d3dx9core.h>
#include <d3dx9math.h>

using namespace std;

LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;

LPCTSTR lpszClass = TEXT("D3D Tutorial");

LPDIRECT3DTEXTURE9 rectangle = NULL;
LPD3DXSPRITE mainsprite = NULL;

UINT systemstate = 0; //현재 화면이 나타내는 상태값
UINT runtime = 0; //게임이 시작된때부터 흐른 시간
UINT spelltime = 0; //스펠이 시작된 시간
UINT timeforframe = 0; //프레임 측정을 위한 시간
UINT imsi_time = 0; //임시 타임변수 하나

/************************************************************
*클래스 생성부분! 드디어!!!
************************************************************/

class Cobject
{
 private:
  D3DXVECTOR3* objPos;
  LPCTSTR objectFile; //파일의 이름 혹은 위치
  float thisradian;
  D3DRECT *imagexy;//이미지 내부의 좌표
  UINT imagesize;
  UINT imagecolor;
  UINT lifetime;
 public:
  Cobject(float xin, float yin, float turnradian, char* imgname, UINT imgsize);
  Cobject();

  void ImagexySet()
  {
   imagexy->x1 = 0;
   imagexy->x2 = (imagesize*2)-1;
   imagexy->y1 = 0;
   imagexy->y2 = (imagecolor*2)-1;
   //이미지내부에서의 위치 설정
  }
  void RenderObject()
  {
   mainsprite->Draw(rectangle, NULL, NULL, objPos, 0x00FFFFFF);

   //sprite를 통해 draw
  }
};

Cobject::Cobject()
{
 objPos->x = 0.0f;
 objPos->y = 0.0f;
 objPos->z = 0.0f;
 thisradian = 0;
 objectFile = TEXT("");
 imagesize = 4;
 ImagexySet();
 lifetime = 0;
}

Cobject::Cobject(float xin, float yin, float turnradian, char* imgname, UINT imgsize)
{
 objPos->x = xin;
 objPos->y = yin;
 objPos->z = 0.0f;
 thisradian = turnradian;
 objectFile = TEXT(imgname);
 imagesize = imgsize;
 ImagexySet();
 lifetime = 0;
}


/************************************************************
*클래스 리스트 생성 부분
************************************************************/

list <Cobject> objList;
Cobject imsiobject(1.0f, 1.0f, 0.0f, "rectangle", 5);
objList.push_back(imsiobject);

list <Cobject>::iterator objiter = objList.begin();


/************************************************************
*Direct3D 초기화
************************************************************/

HRESULT InitD3D(HWND hwnd)
{
 /// 디바이스를 생성하기 위한 D3D 객체 생성
 if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
  return E_FAIL;

 D3DPRESENT_PARAMETERS d3dpp;    //디바이스생성을 위한 구조체
 ZeroMemory(&d3dpp, sizeof(d3dpp)); //반드시 ZeroMemory() 함수로 미리 구조체를 깨끗이 지워야 함
 d3dpp.Windowed = TRUE;//창모드 생성
 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;  // 가장 효율적인 SWAP효과
 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //현재 바탕화면 모드에 맞춰서 후면버퍼를 생성
 
 if(FAILED(g_pD3D-> CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
 {
  return E_FAIL;
 }
 ///디바이스 상태정보 처리는 이곳에서 한다.
 
 //디바이스에서 기초로 쓰일 스프라이트도 이곳에서 초기화 한다
 
 if(FAILED(D3DXCreateSprite(g_pd3dDevice, &mainsprite)))
  return E_FAIL;

 //디바이스초기화와 함께 텍스쳐의 정보도 초기화 한다
 if(FAILED(D3DXCreateTextureFromFile(g_pd3dDevice, "rectangle.png", &rectangle)))
  return E_FAIL;

 return S_OK;
}

/***********************************************************
*초기화가 끝난 객체는 이곳에서 소거
************************************************************/

VOID Cleanup()
{
 if(g_pd3dDevice != NULL)
  g_pd3dDevice->Release();
 if(g_pD3D != NULL)
  g_pD3D->Release();
 if(mainsprite != NULL)
  mainsprite->Release();
 if(rectangle != NULL)
  rectangle->Release();
}

/***********************************************************
*시스템 실행 함수
***********************************************************/

VOID RunSystem()
{
 //키 입력 확인처리
}

VOID RunCrashCheck()
{
 //충돌 체크
}
/***********************************************************
*화면 그리기
************************************************************/

VOID Render()
{
 if(NULL == g_pd3dDevice)
  return;

 //후면 버퍼를 파란색(0,0,225)으로 지운다
 g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);

 //렌더링 시작
 if(SUCCEEDED(g_pd3dDevice->BeginScene()))
 {
  //실제 렌더링 명령들이 나열될 부분
  mainsprite->Begin(D3DXSPRITE_ALPHABLEND);
  for(objiter = objList.begin(); objiter != objList.end(); objiter++)
  {
   (*objiter).RenderObject();
  }
  mainsprite->End();
  //렌더링 정료
  g_pd3dDevice->EndScene();
 }

 //후면 버퍼를 보이는 화면으로
 g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}

LRESULT WINAPI MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch(msg)
 {
 case WM_DESTROY:
  Cleanup();
  PostQuitMessage(0);
  return 0;

 case WM_PAINT:
  Render();
  ValidateRect(hwnd, NULL);
  return 0;
 }

 return DefWindowProc(hwnd, msg, wParam, lParam);
}


INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
 //윈도우 클래스 등록
 WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, lpszClass, NULL};
 RegisterClassEx(&wc);

 ///윈도우 생성
 HWND hwnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 386, 450, GetDesk!=opWindow(), NULL, wc.hInstance, NULL);

 ///D3D 개체 초기화
 if(SUCCEEDED(InitD3D(hwnd)))
 {
  //윈도우 출력
  ShowWindow(hwnd, SW_SHOWDEFAULT);
  UpdateWindow(hwnd);

  //메시지 루프
  MSG msg;
  ZeroMemory(&msg, sizeof(msg));
  while(msg.message!=WM_QUIT)
  {
   //메시지 큐에 메시지가 있으면 메시지 처리
   if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
   {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
   else
    //처리할 메시지가 없으면 렌더및 시스템 관련함수 호출
    RunSystem();
    RunCrashCheck();
    Render();
  }
  
 }

 ///등록된 클래스 소거
 UnregisterClass(lpszClass, wc.hInstance);
 return 0;
}

그냥 간단한 D3DX 프로그램이에요

하는거래봤자 작은 사각형 창을 파란색 배경으로 칠하고 10x10짜리 png 이미지를 API로 그리는거 밖에 없어요...

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 주위의 유혹에 쉽게 마음이 흔들릴 것 같은 스타는? 운영자 24/10/21 - -
277041 방금 동양생명에서 전화왔는데 [2] 좋은아버지갤로그로 이동합니다. 11.09.30 82 0
277040 3년차의 해탈... 상속보다는 포함이 낫다. [15] 닥치고뉴비갤로그로 이동합니다. 11.09.30 205 0
277039 좋겠다 형들은 주말에 쉬어서. [2] 좋은아버지갤로그로 이동합니다. 11.09.30 48 0
277037 영어좀 하시는분 이거 무슨말인지좀 가르켜 주시면 안되요? [15] 하양(61.73) 11.09.30 140 0
277036 Deanex 형은 봅니다 and WHEN 이직 할 타임 [6] 좋은아버지갤로그로 이동합니다. 11.09.30 58 0
277035 그래도 감옥보단 프로그램 짜는게 낳겠지? [12] blackd갤로그로 이동합니다. 11.09.30 205 0
277034 피자먹고싶다 [1] Kanon갤로그로 이동합니다. 11.09.30 36 0
277028 자기 실력만큼 연봉 받는다고 생각하는 사람? [4] 전간디갤로그로 이동합니다. 11.09.30 146 0
277027 남자친구 군대간여자 [16] 123(218.236) 11.09.30 259 0
277026 프리미어 프로 배울때 꼭 플래시도 배워야 하나요?? [4] ㅇㅇ(180.210) 11.09.30 81 0
277025 날씨 좋구만 [1] 이모군(175.114) 11.09.30 32 0
277023 어휴 초봉 2650 이하는 가지 마라 병진들아!!! [15] 거칠게갤로그로 이동합니다. 11.09.30 419 0
277022 나도 중소기업이고 연봉을 13으로 나누는 회사에 있는데 [7] 수상한김토끼갤로그로 이동합니다. 11.09.30 236 0
277021 나는 한 학기 남은 상태에서 취업을 했는데 연봉이 [10] 좋은아버지갤로그로 이동합니다. 11.09.30 268 0
277020 연봉이야기 [4] monoless갤로그로 이동합니다. 11.09.30 144 0
277019 존나 의미없는 댓글이 왜이리 웃기지???? 노린건가???ㅋㅋㅋㅋㅋㅋㅋㅋㅋ [2] Deanex갤로그로 이동합니다. 11.09.30 81 0
277018 연봉 얘기 심심찮게 나오는거같은데 [15] 지금,여기갤로그로 이동합니다. 11.09.30 343 0
277017 우리나라에 아직 법이 살아있구나 [4] 1324(14.47) 11.09.30 128 0
277014 엑셀을 2010으로 포풍업글했는데 콤보상자를 못찾겠다 흥칠이다(112.216) 11.09.30 306 0
277013 야호~ 신난다. [5] 좋은아버지갤로그로 이동합니다. 11.09.30 60 0
277012 여자가 올렸을 거 같은 글 올라오니까 조회수 쩌네ㅡㅡ 궁금이(121.129) 11.09.30 63 0
277010 C# 에서 골뱅이 붙이는 건 뭐야? [5] Deanex갤로그로 이동합니다. 11.09.30 2175 0
277009 개인용 프로젝트할때 svn어디꺼 씀? [4] Cppp갤로그로 이동합니다. 11.09.30 105 0
277008 이거로 이차방정식 어케만듬? [3] 존나어렵네;;(220.149) 11.09.30 81 0
277007 톰캣이 로그도 못찍고 죽는 현상을 어찌 하면 좋을까요? 수상한김토끼갤로그로 이동합니다. 11.09.30 695 0
277005 주말에 머리식힐겸 같이 여행갈 남자분 있나여? [4] ..,(14.47) 11.09.30 245 0
277004 포트폴리오작성중인데 자세히 쓰는게 좋을까?? [1] 포트폴리오(110.11) 11.09.30 72 0
277003 금요일이다.. 힘내자..(미안 이번엔 은꼬르 없어..) [3] blackd갤로그로 이동합니다. 11.09.30 85 0
277002 형들 상담좀 [15] Orphen갤로그로 이동합니다. 11.09.30 167 0
277001 범블비라고 lex 파일 작성하는게 있다던데 [2] ㅁㄴㅇㄹ(168.115) 11.09.30 57 0
277000 [C++] size_t와 unsigned int의 차이 [2] 궁그미(121.129) 11.09.30 213 0
276999 아 눈앞에서 셔틀 놓침 [1] [성대아싸]갤로그로 이동합니다. 11.09.30 68 0
276998 파워 지각 [2] monoless갤로그로 이동합니다. 11.09.30 50 0
276997 늅늅은 늅늅하긔 [4] McHello갤로그로 이동합니다. 11.09.30 96 0
276995 김치국의 파워 세금낭비 [1] ,.,.(14.47) 11.09.30 69 0
276994 안드로이드 정복 이거뭐야.. [4] ㅂㅈㄷ(210.178) 11.09.30 135 0
276993 회사에서 다른 사람이 내 허락없이 형들의 컴퓨터 배경화면 바꾼다면 [7] 좋은아버지갤로그로 이동합니다. 11.09.30 96 0
276992 프갤 가이들 스타2 함? [3] Kanon갤로그로 이동합니다. 11.09.30 64 0
276991 프갤형들 진지하게답변좀 [9] AnonyMous갤로그로 이동합니다. 11.09.30 115 0
276990 블리자드에 지원할땐 아이디/길드활동 내용까지 씀 전간디갤로그로 이동합니다. 11.09.30 119 0
276988 굿모닝 가이들~ [5] Kanon갤로그로 이동합니다. 11.09.30 78 0
276986 진지하게 묻는데, 매킨토시에서 [2] GlennGould갤로그로 이동합니다. 11.09.30 63 0
276983 난 몇일째 4~5시에 자러간다..ㅡ.,ㅡ [2] 이문동쮸쮸바갤로그로 이동합니다. 11.09.30 91 0
276981 넥슨 자소서 쓰는데 가장 즐겨했던 게임에 다른회사 게임 쓰면 좇망임?? [7] 넥슨(110.11) 11.09.30 369 0
276980 형들 개미친질문같은거해서미안한데 [3] ㄱㅇ갤로그로 이동합니다. 11.09.30 109 0
276979 아 횽들 델리게이트 좀 감이 올려고 하는것 같아 [3] hd2갤로그로 이동합니다. 11.09.30 85 0
276974 아니 이런씨발 [1] 이힝(121.177) 11.09.30 56 0
276973 걍 공부 목적이면 안드로이드 1(175.195) 11.09.30 99 0
276969 횽들 델리게이트 왜쓰는지 질문 하나만 해도되? [3] hd2갤로그로 이동합니다. 11.09.30 94 0
276967 형들 자바스크립트 한개만 물어보자 진짜급해 [2] 4(203.90) 11.09.30 70 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2