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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
g_Triangle[0].pos = tbVector3(0.0f,1.0f,0.0f); g_Triangle[0].col = tbColor(1.0f,1.0f,1.0f); g_Triangle[0].uv = tbVector2 (0.5f,0.0f); g_Triangle[1].pos = tbVector3(1.0f,-1.0f,0.0f); g_Triangle[1].col = tbColor(1.0f,1.0f,1.0f); g_Triangle[1].uv = tbVector2 (1.0f,1.0f); g_Triangle[2].pos = tbVector3(-1.0f,-1.0f,0.0f); g_Triangle[2].col = tbColor(1.0f,1.0f,1.0f); g_Triangle[2].uv = tbVector2 (0.0f,1.0f); |
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 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 |
// InitDevice2.cpp : Definiert den Einstiegspunkt für die Anwendung. // #include "stdafx.h" #include "InitDevice2.h" #include <d3d9.h> #include <d3dx9math.h> #include <TriBase.h> #define MAX_LOADSTRING 100 struct SVertex { D3DVECTOR pos; tbVector2 uv; DWORD col; }; // Globale Variablen: HINSTANCE hInst; // Aktuelle Instanz TCHAR szTitle[MAX_LOADSTRING]; // Titelleistentext TCHAR szWindowClass[MAX_LOADSTRING]; // Klassenname des Hauptfensters HWND g_hwnd; // Handle des Fensters D3DPRESENT_PARAMETERS g_d3dPp; // pp LPDIRECT3D9 g_D3D; // Direct3DObject LPDIRECT3DDEVICE9 g_D3DDevice; // Direct3D Gerät SVertex g_Triangle[3]; // Mein erstes Dreieck <3 //Texturen PDIRECT3DTEXTURE9 g_pTexBricks; // Stein-Texture // Vorwärtsdeklarationen der in diesem Codemodul enthaltenen Funktionen: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int DoMessageLoop(); bool InitDirectX(); bool InitScene(); float g_time = 0; tbResult Render (float secPassed); tbResult Move (float secPassed); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // Globale Zeichenfolgen initialisieren LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_INITDEVICE2, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Anwendungsinitialisierung ausführen: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } if(InitDirectX()) // DirectX Gerät initialisieren return 1; if(InitScene()) // ... return 1; //Texturen laden HRESULT hRes; hRes = D3DXCreateTextureFromFileEx(g_D3DDevice, L"bricks.jpg", D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT, 0, NULL, NULL, &g_pTexBricks); if (FAILED(hRes)) return 1; tbDoMessageLoop (Move,Render); //Texturen freigeben g_D3DDevice->SetTexture (0,NULL); g_pTexBricks->Release(); //DX Schnittstellen wieder freigeben g_D3D->Release(); g_D3DDevice->Release(); return 1; } tbResult Move (float secPassed) { g_time += 0.005; return TB_OK; } tbResult Render(float secPassed) { HRESULT hRes; tbMatrix tbmRot = tbMatrixRotationY (TB_DEG_TO_RAD (45 * g_time))*tbMatrixRotationX(TB_DEG_TO_RAD(10*g_time)); tbMatrix tbmTransl = tbMatrixTranslation (tbVector3(0.0f,0.0f,4.0f)); tbMatrix tbmWorld = tbmRot * tbmTransl; g_D3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&tbmWorld)); g_D3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB (0,0,100),1.0f,0); g_D3DDevice->BeginScene(); hRes = g_D3DDevice->SetTexture (0, g_pTexBricks); if (FAILED(hRes)) return tbResult::TB_ERROR; g_D3DDevice->SetSamplerState (0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); g_D3DDevice->SetSamplerState (0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); g_D3DDevice->SetSamplerState (0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); g_D3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, g_Triangle, sizeof(SVertex)); g_D3DDevice->EndScene(); g_D3DDevice->Present(NULL,NULL,NULL,NULL); return TB_OK; } bool InitDirectX() { //D3D objekt erstellen g_D3D = Direct3DCreate9 (D3D_SDK_VERSION); //Present Paramaters D3DPRESENT_PARAMETERS d3dPp; ZeroMemory (&d3dPp, sizeof(d3dPp)); d3dPp.Windowed = true; d3dPp.SwapEffect = D3DSWAPEFFECT_COPY; d3dPp.hDeviceWindow = g_hwnd; //Global verfügbar machen g_d3dPp = d3dPp; if (FAILED (g_D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dPp,&g_D3DDevice))) return 1; return 0; } bool InitScene() { if (FAILED(g_D3DDevice->SetFVF (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1))) return 1; g_D3DDevice->SetRenderState (D3DRS_LIGHTING, false); g_D3DDevice->SetRenderState (D3DRS_CULLMODE, D3DCULL_NONE); g_D3DDevice->SetRenderState (D3DRS_DITHERENABLE, true); float fAspectRatio = 1; tbMatrix tbmProjection = tbMatrixProjection (TB_DEG_TO_RAD (45), fAspectRatio, 0.01, 100.0f); g_D3DDevice->SetTransform (D3DTS_PROJECTION, (D3DMATRIX*)(&tbmProjection)); g_Triangle[0].pos = tbVector3(0.0f,1.0f,0.0f); g_Triangle[0].col = tbColor(1.0f,1.0f,1.0f); g_Triangle[0].uv = tbVector2 (0.5f,0.0f); g_Triangle[1].pos = tbVector3(1.0f,-1.0f,0.0f); g_Triangle[1].col = tbColor(1.0f,1.0f,1.0f); g_Triangle[1].uv = tbVector2 (1.0f,1.0f); g_Triangle[2].pos = tbVector3(-1.0f,-1.0f,0.0f); g_Triangle[2].col = tbColor(1.0f,1.0f,1.0f); g_Triangle[2].uv = tbVector2 (0.0f,1.0f); return 0; } // // FUNKTION: MyRegisterClass() // // ZWECK: Registriert die Fensterklasse. // // KOMMENTARE: // // Sie müssen die Funktion verwenden, wenn Sie möchten, dass der Code // mit Win32-Systemen kompatibel ist, bevor die RegisterClassEx-Funktion // zu Windows 95 hinzugefügt wurde. Der Aufruf der Funktion ist wichtig, // damit die kleinen Symbole, die mit der Anwendung verknüpft sind, // richtig formatiert werden. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_INITDEVICE2)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_INITDEVICE2); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // // FUNKTION: InitInstance(HINSTANCE, int) // // ZWECK: Speichert das Instanzenhandle und erstellt das Hauptfenster. // // KOMMENTARE: // // In dieser Funktion wird das Instanzenhandle in einer globalen Variablen gespeichert, und das // Hauptprogrammfenster wird erstellt und angezeigt. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Instanzenhandle in der globalen Variablen speichern hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,0,1600, 900, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); g_hwnd = hWnd; return TRUE; } // // FUNKTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // ZWECK: Verarbeitet Meldungen vom Hauptfenster. // // WM_COMMAND - Verarbeiten des Anwendungsmenüs // WM_PAINT - Zeichnen des Hauptfensters // WM_DESTROY - Beenden-Meldung anzeigen und zurückgeben // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »denniro« (27.03.2013, 09:27)
Administrator
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Hannes« (27.03.2013, 01:03)
Gefaehrliches Halbwissen ahoi.Erst sowas:
SetFVF (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)
und dann sowas:
struct SVertex
{
D3DVECTOR pos;
tbVector2 uv;
DWORD col;
};
denk mal drüber nach ;)
So kannst du den Fehler nachvollziehen.
Zitat
@denniro:
Der Operator | ist kommutativ, d.h. die Reihenfolge ist egal.
Dass die Reihenfolge der Elemente in der struct nicht der Reihenfolge der Konstanten im FVF entspricht, muss also nicht bedeuten, dass die Reihenfolge falsch ist.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »denniro« (27.03.2013, 09:32)
Werbeanzeige