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 |
struct SVertex { tbVector3 vPosition; tbVector3 vNormal; tbVector2 vTexture; static const DWORD dwFVF; }; const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1; |
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 |
// Szene beginnen g_pD3DDevice->BeginScene(); // ------------------------------------------------------------------ mCamera = tbMatrixCamera(g_vCameraPosition, g_vCameraPosition + tbVector3(sinf(g_fCameraAngle), 0.0f, cosf(g_fCameraAngle)), tbVector3(0.0f, 1.0f, 0.0f)); g_pD3DDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)(&mCamera)); // Das Bildseitenverhältnis berechnen fAspect = (float)(g_Direct3DParameters.VideoMode.Width) / (float)(g_Direct3DParameters.VideoMode.Height); // Die Projektionsmatrix erzeugen und einsetzen. // Das geschieht hier einmal pro Bild, weil das Sichtfeld variabel ist. mProjection = tbMatrixProjection(g_fFOV, // Sichtfeld fAspect, // Bildseitenverhältnis 0.1f, // Nahe Clipping-Ebene 250.0f); // Ferne Clipping-Ebene g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection)); PointLight.Position = tbVector3(sinf(g_fTime) * 10.0f, sinf(g_fTime) * 10.0f, cosf(g_fTime) * 10.0f); // Variierende Position // Licht einsetzen und aktivieren g_pD3DDevice->SetLight(0, &PointLight); Material.Emissive = tbColor(0.0f, 0.0f, 0.0f); g_pD3DDevice->SetMaterial(&Material); g_pD3DDevice->LightEnable(0, TRUE); g_pD3DDevice->SetTexture(0, g_pTexture); // ------------------------------------------------------------------ // Zuerst den VertexBuffer als Datenquelle aktivieren. g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(SVertex)); // Zeichnen! hResult = g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 3); if(FAILED(hResult)) { // Fehler beim Zeichnen! TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitive", hResult, TB_STOP); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
// Vertexformat setzen if(FAILED(hResult = g_pD3DDevice->SetFVF(SVertex::dwFVF))) { // Fehler beim Setzen des Vertexformats! TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ZeroMemory(&PointLight, sizeof(D3DLIGHT9)); PointLight.Type = D3DLIGHT_POINT; // Punktlicht PointLight.Diffuse = tbColor(1.0f, 1.0f, 1.0f); // Weiße Streufarbe PointLight.Ambient = tbColor(1.0f, 1.0f, 1.0f); // Weiße Hintergrundfarbe PointLight.Specular = tbColor(1.0f, 1.0f, 1.0f); // Weiße Glanzfarbe PointLight.Range = 1000.0f; // 1000 Einheiten Reichweite PointLight.Attenuation0 = 0.0f; // Lichtabschwächung PointLight.Attenuation1 = 0.025f; // ... PointLight.Attenuation2 = 0.0f; // ... Material.Diffuse = tbColor(0.75f, 0.75f, 0.75f); // Hellgraue Streufarbe Material.Ambient = tbColor(0.25f, 0.25f, 0.25f); // Dunkelgraue Hintergrundfarbe Material.Emissive = tbColor(0.0f, 0.0f, 0.0f); // Keine Eigenfarbe Material.Specular = tbColor(0.25f, 0.25f, 0.25f); // 25% hellere Glanzfarbe als Streufarbe Material.Power = 20.0f; // Glanzfaktor variiert |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(SVertex)); hResult = g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 3); if(FAILED(hResult)) { // Fehler beim Zeichnen! TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitive", hResult, TB_STOP); } g_pSphereModel->DrawSubset(0); |
Werbeanzeige