Du bist nicht angemeldet.

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

  • »LastManStanding« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Neuhofen

Beruf: Schüler

  • Private Nachricht senden

1

24.06.2005, 11:45

Anfänger Problem

Hi!

Ich wollte die Übungsaufgabe aus dem Kapitel "Das erste Dreieck" lösen (die mit dem Viereck). Außerdem wollte ich experimentieren, und kein tbVector3 verwenden. Und jetzt sehe ich von dem Rotierenden Dreieck immer nur einen kleinen Teil.

Hier ist der Quellcode:

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
#include <windows.h>
#include <d3d9.h>
#include <tribase.h>

// Lokale Dateien includen

#include "Direct3DEnum.h"
#include "InitDirect3D.h"
#include "InitWindow.h"
#include "Allgemeines.h"

////////////////////////////// DEFINES ////////////////////////////////////////

#define WIN32_LEAN_AND_MEAN
#define VERTEXCAPS (D3DFVF_XYZ | D3DFVF_DIFFUSE)

////////////////////////////// DATENSTRUKTUREN ////////////////////////////////

struct SVertex
{
    float x,y,z;
    D3DCOLOR color;
};

////////////////////////////// GLOBALE VARIABLEN //////////////////////////////

SVertex ver[4];
float fTime = 0.0f;

////////////////////////////// PROTOTYPEN /////////////////////////////////////

int InitD3D();
int ExitD3D();
int InitScene(SDirect3DParameters *param);
tbResult Render(float fNumSecsPassed);
tbResult Move(float fNumSecsPassed);


////////////////////////////// MAIN FUNKTION //////////////////////////////////

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nShowCmd)
{
    InitD3D();

    tbDoMessageLoop(Render, Move);

    ExitD3D();
    return 0;
}



////////// INITIALISIERUNG DER ENGINE /////////////

int InitD3D()
{
    tbInit();
    
    SDirect3DParameters param;
    GetDirect3DParameters(&param);

    InitWindow(param.VideoMode.Width, param.VideoMode.Height, "Dreieck", LoadIcon(NULL, IDI_APPLICATION));
    InitDirect3D(&param, g_hWindow);
    InitScene(&param);

    return 0;
}


//////////////// BEENDEN DER ENGINE ///////////////

int ExitD3D()
{
    
    ExitDirect3D();
    ExitWindow();
    tbExit();
    return 0;
}


//////////// INITIALISIERUNG DER SCENE ///////////

int InitScene(SDirect3DParameters *param)
{
    // Erzeugen des Vertexdaten

    ver[0].x = -1.0f;
    ver[0].y = -1.0f;
    ver[0].z =  0.0f;
    ver[0].color = D3DCOLOR_XRGB(rand()%255, rand()%255, rand()%255);

    ver[1].x = -1.0f;
    ver[1].y =  1.0f;
    ver[1].z =  0.0f;
    ver[1].color = D3DCOLOR_XRGB(rand()%255, rand()%255, rand()%255);

    ver[2].x =  1.0f;
    ver[2].y = -1.0f;
    ver[2].z =  0.0f;
    ver[2].color = D3DCOLOR_XRGB(rand()%255, rand()%255, rand()%255);

    ver[3].x =  1.0f;
    ver[3].y =  1.0f;
    ver[3].z =  0.0f;
    ver[3].color = D3DCOLOR_XRGB(rand()%255, rand()%255, rand()%255);

    // Setzen des FVF

    g_pD3DDevice->SetFVF(VERTEXCAPS);

    // Setzen der Render States

    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, false);
    g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, true);
    g_pD3DDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
    
    float aspect = (float)param->VideoMode.Width / (float)param->VideoMode.Height;

    tbMatrix mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f),
                                              aspect,
                                              0.1f,
                                              100.0f);
    g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));

    return 0;
}

////////////// DIE LOGIK /////////////////////////

tbResult Render(float fNumSecsPassed)
{
    tbMatrix Rotation(tbMatrixRotationY(TB_DEG_TO_RAD(fTime * 90.0f)));
    tbMatrix Translation(tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f)));

    tbMatrix mWorld(Rotation * Translation);
    g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
    
    // Loeschen des Bildschirms

    g_pD3DDevice->Clear(0, NULL,
                        D3DCLEAR_TARGET,
                        D3DCOLOR_XRGB(0, 0, 0),
                        1.0f, 0);

    g_pD3DDevice->BeginScene();

    g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, ver, sizeof(SVertex));

    g_pD3DDevice->EndScene();
    g_pD3DDevice->Present(NULL, NULL, NULL, NULL);

    return TB_OK;
}


tbResult Move(float fNumSecsPassed)
{
    fTime += fNumSecsPassed;

    return TB_OK;
}


mfg LastManStanding
Ungeduld ist die Mutter der Dummheit - DaVinci

  • »LastManStanding« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Neuhofen

Beruf: Schüler

  • Private Nachricht senden

2

24.06.2005, 11:54

Oh Sorry!

Hab den Fehler gefunden.
Hab vergessen den Z-Buffer zu leeren.

mfg LastManStanding
Ungeduld ist die Mutter der Dummheit - DaVinci