1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include "stdafx.h"
#include "CGame.h"
SVertex vertices[3];
int color;
HRESULT CGame::Init(HWND hWnd){
HRESULT hRes;
//Direct3D
hRes = InitDirect3D(hWnd);
CHECK(hRes);
//Die Szene erstellen
hRes = InitScene();
CHECK(hRes);
return true;
}
HRESULT CGame::InitDirect3D(HWND window){
//D3d Object
IDirect3D9 *d3dobj = Direct3DCreate9(D3D9b_SDK_VERSION);
//Parameter
D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp,sizeof(pp));
pp.AutoDepthStencilFormat = D3DFMT_D16;
pp.BackBufferCount = 1;
pp.BackBufferFormat = D3DFMT_R5G6B5;
pp.BackBufferHeight = 0;
pp.BackBufferWidth = 0;
pp.EnableAutoDepthStencil = TRUE;
pp.Flags = D3DPRESENTFLAG_DEVICECLIP;
pp.FullScreen_RefreshRateInHz = 0;
pp.hDeviceWindow = window;
pp.MultiSampleQuality = 0;
pp.MultiSampleType = D3DMULTISAMPLE_NONE;
pp.PresentationInterval = 0;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.Windowed = TRUE;
//Init Device
HRESULT hRes = d3dobj->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &device);
//Aufräumen
d3dobj->Release();
return hRes;
}
HRESULT CGame::InitScene(){
//Matrizen generieren
//View-Matrix
D3DXVECTOR3 eye(0.0f,0.0f,0.0f);
D3DXVECTOR3 at(0.0f,0.0f,0.0f);
D3DXVECTOR3 up(0.0f,1.0f,0.0f);
D3DXMATRIX view;
D3DXMatrixLookAtRH(&view,&eye,&at,&up);
device->SetTransform(D3DTS_VIEW, &(D3DMATRIX)(view));
//Prokection Matrix
D3DXMATRIX projection;
D3DXMatrixPerspectiveFovLH(&projection,0.785f,1600/900,0.01f,100.0f);
device->SetTransform(D3DTS_PROJECTION, &(D3DMATRIX)(projection));
//Render-States
device->SetRenderState(D3DRS_LIGHTING, false);
device->SetFVF(D3DFVF_XYZ|D3DFVF_TEX1);
device->SetRenderState (D3DRS_ZENABLE, D3DZB_TRUE);
device->SetRenderState (D3DRS_CULLMODE, D3DCULL_NONE);
//Models laden
HRESULT hRes;
hRes = D3DXLoadMeshFromX("scene\\models\\house.x",D3DXMESH_MANAGED,device,NULL,NULL,NULL,NULL,&ground);
//CHECK(hRes); <- Auskommtentiert, damit Programm nicht beendet
hRes = D3DXCreateTextureFromFile(device,"scene\\textures\\ground.png",&ground_tex);
CHECK(hRes);
//Ein paar Vertices erstellen
SVertex v;
ZeroMemory(&v,sizeof(v));
v.x = 1.0f; v.y = 0.0f; v.z=1.0f; v.u = 1.0f; v.v = 0.0f; vertices[0] = v;
v.x = -1.0f; v.y = 0.0f; v.z=1.0f; v.u = -1.0f; v.v = 0.0f; vertices[1] = v;
v.x = 0.0f; v.y = 1.0f; v.z=1.0f; v.u = 0.0f; v.v = 1.0f; vertices[2] = v;
return 0;
}
void CGame::Render(){
HRESULT hRes;
device->BeginScene();
//Zeichen
//z-Buffer löschen
device->Clear(NULL,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(52,52,color),1.0f,0);
/*//Objekt bewegen
D3DXMATRIX world;
D3DXMatrixTranslation(&world,0.0f,0.0f,5.0f);
device->SetTransform(D3DTS_WORLD, &(D3DMATRIX)(world));*/
device->SetTexture(0,ground_tex);
// ground->DrawSubset(0);
hRes = device->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,&vertices,sizeof(SVertex)*3);
device->EndScene();
device->Present(NULL,NULL,NULL,NULL);
//Aufräumen
ground_tex->Release();
}
void CGame::Move(float sec){
};
|