Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
#define WINDOW_CLASS_NAME "Game Shell Window" #include <windows.h> #include <d3dx9.h> void Game_Shutdown(void); void Game_Init(void); void Game_Main(void); D3DCAPS9 caps; LPDIRECT3D9 g_pd3d = NULL; IDirect3DDevice9* g_pd3dDevice = NULL; IDirect3DVertexBuffer9* g_pVB = NULL; LPDIRECT3DVERTEXSHADERR9 g_pVertexShader = NULL; LPDIRECT3DVERTEXDECLARATION9 g_pVertexDeclaration = NULL; D3DXMATRIXA16 matWorld; D3DXMATRIXA16 matProj; D3DXMATRIXA16 matView; HWND main_window_handle = NULL; struct CUSTOMVERTEX { FLOAT x, y, z; }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE) /////////////////////////////////////////////////////////////////////////////// void Game_Init(void) { // *********** IDIRECT3D ************** // DIRECT3D9 SCHNITTSTELLE ERZEUGEN! g_pd3d = Direct3DCreate9(D3D_SDK_VERSION); if(g_pd3d == NULL) MessageBox(NULL, "DX9 konnte nicht initialiesiert werden !!", "Fehler!", MB_OK | MB_ICONEXCLAMATION); // *********** PRESENT PARAMS ************** // MINIMALE D3DPRESENT_PARAMETERS EINTRAGEN D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // *********** D3DDEVICE ************** // D3D9DEVICE SCHNITTSTELLE ERZEUGEN if( FAILED( g_pd3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, main_window_handle, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) MessageBox(NULL, "D3DDEVICE KONNTE NICHT ERSTELLT WERDEN", "FEHLER", MB_OK | MB_ICONEXCLAMATION); // ************* VB ************** // VERTEXBUFFER ERZEUGEN if(FAILED( g_pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), 0, /* Usage */ D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL))) MessageBox(NULL, "VERTEXBUFFER KONNTE NICHT ERSTELLT WERDEN", "FEHLER", MB_OK | MB_ICONEXCLAMATION); // VERTICES EINTRAGEN CUSTOMVERTEX vertices[] = { { -1.0f, 1.0f, 0.0f }, { -1.0f,-1.0f, 0.0f }, { 1.0f, 1.0f, 0.0f }, { 1.0f,-1.0f, 0.0f }, }; // ALLE VERTICES AUF EINEN SCHLAG ÜBERTRAGEN VOID* pVertices; g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ); memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); // *********** MATRIX ************** // KAMERA EINSTELLEN, VIEWMATRIX ERSTELLEN UND EINSETZTEN D3DXVECTOR3 vEyePt ( 0.0f, 0.0f,-5.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec ( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView ); // PROJEKTIONSMATRIX ERSTELLEN UND EINSETZEN D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj ); // WICHTIGSTE RENDER STATES SETZEN g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE); g_pd3dDevice->SetRenderState( D3DRS_SPECULARENABLE, FALSE); g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE ); g_pd3dDevice->GetDeviceCaps(&caps); if( caps.VertexShaderVersion < D3DVS_VERSION(1,1) ) MessageBox(NULL, "´KEINE SHADER!!!", "FEHLER", MB_OK | MB_ICONEXCLAMATION); // Create the shader declaration. D3DVERTEXELEMENT9 decl[] = { { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, D3DDECL_END() }; if( FAILED( g_pd3dDevice->CreateVertexDeclaration( decl, &g_pVertexDeclaration ) ) ) MessageBox(NULL, "FEHLER BEI VERTEX SHADER DECLARATION", "FEHLER", MB_OK | MB_ICONEXCLAMATION); LPD3DXBUFFER pCode; D3DXAssembleShaderFromFile( "VertexShader.vsh", NULL, NULL, 0, &pCode, NULL); g_pd3dDevice->CreateVertexShader((DWORD*)pCode->GetBufferPointer(), &g_pVertexShader); pCode->Release(); } /////////////////////////////////////////////////////////////////////////////// void Game_Main(void) { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 ); g_pd3dDevice->BeginScene(); D3DXMatrixIdentity(&matWorld); g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); D3DXMatrixMultiply( &matWorld, &matView, &matProj ); D3DXMatrixTranspose( &matWorld, &matWorld ); g_pd3dDevice->SetVertexShaderConstantF( 0, (float*)&matWorld, 4 ); float color[4] = {0,1.0,0,0}; g_pd3dDevice->SetVertexShaderConstantF( 4, (float*)&color, 1 ); g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice->SetVertexShader( g_pVertexShader ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); g_pd3dDevice->EndScene(); g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); } /////////////////////////////////////////////////////////////////////////////// void Game_Shutdown(void) { if(g_pVertexShader != NULL) g_pVertexShader->Release(); // D3DDEVICE9 SCHNITTSTELLE LÖSCHEN if(g_pd3dDevice != NULL) g_pd3dDevice->Release(); // IDIRECT3D SCHNITTSTELLE LÖSCHEN if(g_pd3d != NULL) g_pd3d->Release(); } // **************************************************************************** LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { PAINTSTRUCT ps; HDC hdc; // Nachrichtenverarbeitung switch(msg) { case WM_CREATE: { return(0); } break; case WM_PAINT: { hdc = BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); return(0); } break; case WM_DESTROY: { PostQuitMessage(0); return(0); } break; default: break; } return (DefWindowProc(hwnd, msg, wparam, lparam)); } //----------------------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX winclass; HWND hwnd; MSG msg; winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_HREDRAW | CS_VREDRAW ; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinstance; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = WINDOW_CLASS_NAME; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassEx(&winclass)) return(0); if (!(hwnd = CreateWindowEx(NULL, WINDOW_CLASS_NAME, "My Game Shell", WS_OVERLAPPEDWINDOW | WS_VISIBLE , 0,0, 800,600, NULL, NULL, hinstance, NULL))) return(0); main_window_handle = hwnd; //------------------------ Game_Init(); //------------------------ // Nachrichtenweiterleitung while(TRUE) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } //------------------------ Game_Main(); //------------------------ } //------------------------ Game_Shutdown(); //------------------------ return(msg.wParam); } |
Quellcode |
|
1 2 3 4 |
vs_1_1 dcl_position v0 m4x4 oPos, v0, c0 mov oD0, c4 |
Administrator
Quellcode |
|
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 |
// VertexOutput struct SVertexShaderOutput { float4 Position : POSITION; float4 Diffuse : COLOR0; }; // Marizen float4x4 MatTransViewProj : WorldViewProjection; float timeSin; // Der Vertex-Shader SVertexShaderOutput VertexShaderProc(float4 InPosition : POSITION, float4 InNormal : NORMAL) { SVertexShaderOutput Output = (SVertexShaderOutput)(0); // Vertex entlang des NormalenVektors verschieben und projektzieren Output.Position = mul((InPosition + 0.4f * InNormal*timeSin), MatTransViewProj); Output.Diffuse = float4(1.0f, 1.0f, 1.0f, 0.5f); return Output; } TECHNIQUE T1 { PASS P1 { VertexShader = compile vs_1_1 VertexShaderProc(); } } |
C-/C++-Quelltext |
|
1 2 3 |
float timeSin = sinf(fNumSecsPassed*5); if(timeSin < 0.0f) timeSin = -sinf(fNumSecsPassed*5); g_pShaderEffect->GetEffect()->SetFloat("timeSin", timeSin); |
Quellcode |
|
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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 |
// *************************************************************************** // NICHT VERGESSEN ! // D3DX9.lib bzw D3D9.lib müssen zusätzlich verlinked sein !! // *************************************************************************** #define WINDOW_CLASS_NAME "Game Shell Window" #include <windows.h> #include <d3dx9.h> void Game_Shutdown(void); void Game_Init(void); void Game_Main(void); PDIRECT3D9 g_pd3d = NULL; IDirect3DDevice9* g_pd3dDevice = NULL; IDirect3DVertexBuffer9* g_pVB = NULL; LPDIRECT3DVERTEXSHADER9 g_pVertexShader = NULL; LPDIRECT3DVERTEXDECLARATION9 g_pVertexDeclaration = NULL; D3DXMATRIXA16 mat; D3DXMATRIXA16 matProj; D3DXMATRIXA16 matView; HWND main_window_handle = NULL; struct CUSTOMVERTEX { FLOAT x, y, z; }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ) int screenWidth = 800; int screenHeight = 600; /////////////////////////////////////////////////////////////////////////////// void Game_Init(void) { // *********** IDIRECT3D ************** // DIRECT3D9 SCHNITTSTELLE ERZEUGEN! g_pd3d = Direct3DCreate9(D3D_SDK_VERSION); if(g_pd3d == NULL) MessageBox(NULL, "DX9 konnte nicht initialiesiert werden !!", "Fehler!", MB_OK | MB_ICONEXCLAMATION); // MINIMALE D3DPRESENT_PARAMETERS EINTRAGEN D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; // D3D9DEVICE SCHNITTSTELLE ERZEUGEN if( FAILED( g_pd3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, main_window_handle, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) MessageBox(NULL, "D3DDEVICE KONNTE NICHT ERSTELLT WERDEN", "FEHLER", MB_OK | MB_ICONEXCLAMATION); // ************* VB ************** // VERTEXBUFFER ERZEUGEN if(FAILED( g_pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), 0, /* Usage */ D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL))) MessageBox(NULL, "VERTEXBUFFER KONNTE NICHT ERSTELLT WERDEN", "FEHLER", MB_OK | MB_ICONEXCLAMATION); // VERTICES FESTLEGEN. CUSTOMVERTEX vertices[] = { { -1.0f, 1.0f, 0.0f }, { -1.0f,-1.0f, 0.0f }, { 1.0f, 1.0f, 0.0f }, { 1.0f,-1.0f, 0.0f }, }; // ALLE VERTICES AUF EINEN SCHLAG IN DEN VB ÜBERTRAGEN VOID* pVertices; g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ); memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); // *********** MATRIX ************** // Setup the view matrix D3DXVECTOR3 vEye = D3DXVECTOR3( 2.0f, 3.0f, 3.0f ); D3DXVECTOR3 vAt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUp = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtRH( &matView, &vEye, &vAt, &vUp ); // Set up the projection matrix FLOAT fAspectRatio = (FLOAT)screenWidth / (FLOAT)screenHeight; D3DXMatrixPerspectiveFovRH( &matProj, D3DXToRadian(60.0f), fAspectRatio, 0.1f, 100.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj ); // *********** VERTEXSHADER ************** LPD3DXBUFFER pCode; // Setup vertex shader declaration D3DVERTEXELEMENT9 decl[] = { { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, D3DDECL_END() }; // Vertex shader declaration if( FAILED( g_pd3dDevice->CreateVertexDeclaration( decl, &g_pVertexDeclaration ) ) ) MessageBox(NULL, "VERTEXDECLARATION KONNTE NICHT ERSTELLT WERDEN", "FEHLER", MB_OK | MB_ICONEXCLAMATION); DWORD dwFlags = 0; // Assemble the vertex shader from the file if( FAILED( D3DXAssembleShaderFromFile( "Ripple.vsh", NULL, NULL, dwFlags, &pCode, NULL ) ) ) MessageBox(NULL, "VERTEX SHADER ASSEMBLE FEHLER", "FEHLER", MB_OK | MB_ICONEXCLAMATION); // Create the vertex shader if(FAILED( g_pd3dDevice->CreateVertexShader( (DWORD*)pCode->GetBufferPointer(), &g_pVertexShader ))) MessageBox(NULL, "VERTEXSHADER KONNTE NICHT ERSTELLT WERDEN", "FEHLER", MB_OK | MB_ICONEXCLAMATION); if(pCode!=NULL) pCode->Release(); // WICHTIGSTE RENDER STATES SETZEN g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE); g_pd3dDevice->SetRenderState( D3DRS_SPECULARENABLE, FALSE); } /////////////////////////////////////////////////////////////////////////////// void Game_Main(void) { // NEIN! ICH NEHME KEINE RÜCKSICHT AUF DIE ZEIT :) static float test = 0.0f; test+=0.01f; // Setup object matrix D3DXMatrixMultiply( &mat, &matView, &matProj ); D3DXMatrixTranspose( &mat, &mat ); D3DXVECTOR4 vA( sinf(test)*15.0f, 0.0f, 0.5f, 1.0f ); D3DXVECTOR4 vD( D3DX_PI, 1.0f/(2.0f*D3DX_PI), 2.0f*D3DX_PI, 0.05f ); // Taylor series coefficients for sin and cos D3DXVECTOR4 vSin( 1.0f, -1.0f/6.0f, 1.0f/120.0f, -1.0f/5040.0f ); D3DXVECTOR4 vCos( 1.0f, -1.0f/2.0f, 1.0f/ 24.0f, -1.0f/ 720.0f ); // Set up the vertex shader constants g_pd3dDevice->SetVertexShaderConstantF( 0, (float*)&mat, 4 ); g_pd3dDevice->SetVertexShaderConstantF( 4, (float*)&vA, 1 ); g_pd3dDevice->SetVertexShaderConstantF( 7, (float*)&vD, 1 ); g_pd3dDevice->SetVertexShaderConstantF( 10, (float*)&vSin, 1 ); g_pd3dDevice->SetVertexShaderConstantF( 11, (float*)&vCos, 1 ); // RENDERN !!! g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,0,0), 1.0f, 0 ); g_pd3dDevice->BeginScene(); g_pd3dDevice->SetVertexDeclaration( g_pVertexDeclaration ); g_pd3dDevice->SetVertexShader( g_pVertexShader ); g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); g_pd3dDevice->EndScene(); g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); } /////////////////////////////////////////////////////////////////////////////// void Game_Shutdown(void) { // VERTEX SHADER DECLARATION LÖSCHEN if(g_pVertexDeclaration != NULL) g_pVertexDeclaration->Release(); // VERTEXSHADER LÖSCHEN if(g_pVertexShader != NULL) g_pVertexShader->Release(); // D3DDEVICE9 SCHNITTSTELLE LÖSCHEN if(g_pd3dDevice != NULL) g_pd3dDevice->Release(); // IDIRECT3D SCHNITTSTELLE LÖSCHEN if(g_pd3d != NULL) g_pd3d->Release(); } // **************************************************************************** LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { PAINTSTRUCT ps; HDC hdc; // Nachrichtenverarbeitung switch(msg) { case WM_CREATE: { return(0); } break; case WM_PAINT: { hdc = BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); return(0); } break; case WM_DESTROY: { PostQuitMessage(0); return(0); } break; default: break; } return (DefWindowProc(hwnd, msg, wparam, lparam)); } //----------------------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX winclass; HWND hwnd; MSG msg; winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_HREDRAW | CS_VREDRAW ; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinstance; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = WINDOW_CLASS_NAME; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassEx(&winclass)) return(0); if (!(hwnd = CreateWindowEx(NULL, WINDOW_CLASS_NAME, "My Game Shell", WS_OVERLAPPEDWINDOW | WS_VISIBLE , 0,0, screenWidth,screenHeight, NULL, NULL, hinstance, NULL))) return(0); main_window_handle = hwnd; //------------------------ Game_Init(); //------------------------ // Nachrichtenweiterleitung while(TRUE) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } //------------------------ Game_Main(); //------------------------ } //------------------------ Game_Shutdown(); //------------------------ return(msg.wParam); } |
Quellcode |
|
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 |
vs.1.1 ; Constants: ; ; c0-c3 - View+Projection matrix ; ; c4.x - time ; c4.y - 0 ; c4.z - 0.5 ; c4.w - 1.0 ; ; c7.x - pi ; c7.y - 1/2pi ; c7.z - 2pi ; c7.w - 0.05 ; ; c10 - first 4 taylor coefficients for sin(x) ; c11 - first 4 taylor coefficients for cos(x) dcl_position v0 ; Decompress position mov r0.x, v0.x mov r0.y, c4.w ; 1 mov r0.z, v0.y mov r0.w, c4.w ; 1 ; Compute theta from distance and time mov r4.xz, r0 ; xz mov r4.y, c4.y ; y = 0 dp3 r4.x, r4, r4 ; d2 rsq r4.x, r4.x rcp r4.x, r4.x ; d mul r4.xyz, r4, c4.x ; scale by time ; Clamp theta to -pi..pi add r4.x, r4.x, c7.x mul r4.x, r4.x, c7.y frc r4.xy, r4.x mul r4.x, r4.x, c7.z add r4.x, r4.x,-c7.x ; Compute first 4 values in sin and cos series mov r5.x, c4.w ; d^0 mov r4.x, r4.x ; d^1 mul r5.y, r4.x, r4.x ; d^2 mul r4.y, r4.x, r5.y ; d^3 mul r5.z, r5.y, r5.y ; d^4 mul r4.z, r4.x, r5.z ; d^5 mul r5.w, r5.y, r5.z ; d^6 mul r4.w, r4.x, r5.w ; d^7 mul r4, r4, c10 ; sin dp4 r4.x, r4, c4.w mul r5, r5, c11 ; cos dp4 r5.x, r5, c4.w ; Set color add r5.x, -r5.x, c4.w ; + 1.0 mul oD0, r5.x, c4.z ; * 0.5 ; Scale height mul r0.y, r4.x, c7.w ; Transform position dp4 oPos.x, r0, c0 dp4 oPos.y, r0, c1 dp4 oPos.z, r0, c2 dp4 oPos.w, r0, c3 |
Quellcode |
|
1 |
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj ); |
Werbeanzeige