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
Anonymous
unregistriert
C-/C++-Quelltext |
|
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 |
#include <TriBase.h> #include "..\\Buch\\3D Spieleprogrammierung\\Allgemeines\\Direct3DEnum.h" #include "..\\Buch\\3D Spieleprogrammierung\\Allgemeines\\InitDirect3D.h" #include "..\\Buch\\3D Spieleprogrammierung\\Allgemeines\\InitWindow.h" //----------------------- SVertex --------------------------------------- struct SVertex { tbVector3 vPosition; // Koordinate D3DCOLOR dwColor; // Farbe static const DWORD dwFVF; // Vertexformat (statisch) }; const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE; //----------------------------------------------------------------------- // GLOBALE VARIABLEN SVertex g_aTriangleVertex[3]; SDirect3DParameters g_Direct3DParameters; float g_fTime = 0.0f; // Zeitzähler tbResult InitScene() { HRESULT hResult; if (FAILED(hResult = g_pD3DDevice->SetFVF(SVertex::dwFVF))) { TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR); } g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE); // Bilderseitenverhätnis berechnen float fAspect = (float)(g_Direct3DParameters.VideoMode.Width) / (float) (g_Direct3DParameters.VideoMode.Height); // Die Projektionsmatrix erzeugen tbMatrix mProjection = tbMatrixProjection(TB_RAD_TO_DEG(90.0f), // Sichtfeld fAspect, // Bildseitenverhätnis 0.1f, // Nahe Cliping Ebene 100.0f); // Ferne Clipping Ebene g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection)); g_aTriangleVertex[0].vPosition = tbVector3( 0.0f, 1.0f, 0.0f); g_aTriangleVertex[1].vPosition = tbVector3( 1.0f, -1.0f, 0.0f); g_aTriangleVertex[2].vPosition = tbVector3(-1.0f, -1.0f, 0.0f); g_aTriangleVertex[0].dwColor = tbColor(0.5f, 0.5f, 0.5f); g_aTriangleVertex[1].dwColor = tbColor(0.5f, 0.5f, 0.5f); g_aTriangleVertex[2].dwColor = tbColor(0.5f, 0.5f, 0.5f); return TB_OK; } tbResult Move(float fNumSecsPassed ) { // Zeitzähler erhöhen g_fTime += fNumSecsPassed; return TB_OK; } tbResult Render(float fNumSecsPassed ) { HRESULT hResult; // Rotations und Translationsmatrix erzeugen tbMatrix mRotation(tbMatrixRotationY(TB_RAD_TO_DEG(g_fTime*35.0f))); tbMatrix mTranslation(tbMatrixTranslation(tbVector3(0.0f,0.0f,2.0f))); // Beide kombinieren und als Weltmatrix einsetzen tbMatrix mWorld(mRotation * mTranslation); g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld)); // Unmittelbar nach Transformationspipelinekonfiguration leeren des Bildpuffer und Z-Buffers... if(FAILED(hResult = g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,63), 1.0f, 0))) { // Fehler beim leeren der Buffer TB_ERROR_DIRECTX("g_pD3DDevice->Clear",hResult, TB_STOP); } // Nachdem Bildpuffer und Z-Buffer leer sind Szene beginnen g_pD3DDevice->BeginScene(); if (FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, g_aTriangleVertex, sizeof(SVertex)))) { // Fehler beim zeichnen der primitive TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP",hResult,TB_STOP); } // Szene beenden g_pD3DDevice->EndScene(); g_pD3DDevice->Present(NULL,NULL,NULL,NULL); return TB_OK; } tbResult ExitApplication() { ExitDirect3D(); ExitWindow(); tbExit(); return TB_OK; } tbResult InitApplication() { if (tbInit()) { MessageBox(NULL,"Fehler beim Initialisieren der Engine!","Fehler!", MB_OK | MB_ICONEXCLAMATION); return TB_ERROR; }; // Direct3D-Optionen abfragen tbResult Result = GetDirect3DParameters(&g_Direct3DParameters); if (Result == TB_ERROR) { MessageBox(NULL,"Fehler beim abzählen!","Fehler!", MB_OK | MB_ICONEXCLAMATION); return TB_ERROR; } else if (Result == TB_CANCELED) { return TB_CANCELED; } if (InitWindow(g_Direct3DParameters.VideoMode.Width, g_Direct3DParameters.VideoMode.Height, "Texturen",NULL)) { // Fehler beim Fenster MessageBox(NULL,"Fehler beim öffnen des Fensters!","Fehler!", MB_OK | MB_ICONEXCLAMATION); return TB_ERROR; } if (InitDirect3D(&g_Direct3DParameters,g_hWindow)) { // Fehler beim initialisieren von Direct3D MessageBox(NULL,"Fehler beim Initialisieren von Direct3D!","Fehler!", MB_OK | MB_ICONEXCLAMATION); ExitApplication(); return TB_ERROR; } return TB_OK; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { tbResult Result = InitApplication(); if (Result == TB_ERROR) { MessageBox(NULL,"Fehler beim Initialisieren der Anwendung!","Fehler!", MB_OK | MB_ICONEXCLAMATION); return 1; } else if (Result == TB_CANCELED) { ExitApplication(); return 0; } tbDoMessageLoop(Move, Render); ExitApplication(); return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
struct SVertex { tbVector3 vPosition; // Koordinate D3DCOLOR dwColor; // Farbe static const DWORD dwFVF; // Vertexformat (statisch) }; |
Werbeanzeige