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

Anonymous

unregistriert

1

23.12.2003, 12:27

Mein erstes Dreieck :-((

Hi,
Ich habe mir das Buch von David Scherfgen gekauft. Dann auch das erste und den Anfang von zweiten Kapitel mit Interesse gelesen. Ich habe das erste und zweite Beispielprogramm mit Erfolg erstellt (einfaches Fenster, Fenster mit Direct3D Optionswahl). Nun wollte ich mein erstes Dreieck erstellen und der Compiler gibt mir immer folgende Fehlermeldungen:

Zitat

--------------------Configuration: Erstes Dreieck - Win32 Debug--------------------
Compiling...
dreieck.cpp
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\initdirect3d.h(20) : error C2065: 'SDirect3DParameters' : undeclared identifier
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\initdirect3d.h(20) : error C2065: 'pParameters' : undeclared identifier
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\initdirect3d.h(20) : error C2275: 'HWND' : illegal use of this type as an expression
c:\programme\microsoft visual studio\vc98\include\windef.h(195) : see declaration of 'HWND'
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\initdirect3d.h(20) : error C2146: syntax error : missing ')' before identifier 'hWindow'
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\initdirect3d.h(20) : error C2078: too many initializers
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\initdirect3d.h(20) : error C2275: 'HWND' : illegal use of this type as an expression
c:\programme\microsoft visual studio\vc98\include\windef.h(195) : see declaration of 'HWND'
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\initdirect3d.h(20) : error C2059: syntax error : ')'
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\direct3denum.h(33) : error C2065: 'pOut' : undeclared identifier
d:\eigene dateien\marius\c++\erstes dreieck\\allgemeines\\direct3denum.h(33) : error C2440: 'initializing' : cannot convert from 'int' to 'enum tbResult'
Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
d:\eigene dateien\marius\c++\erstes dreieck\dreieck.cpp(17) : error C2146: syntax error : missing ';' before identifier 'g_Direct3DParameters'
d:\eigene dateien\marius\c++\erstes dreieck\dreieck.cpp(17) : error C2501: 'SDirect3DParameters' : missing storage-class or type specifiers
d:\eigene dateien\marius\c++\erstes dreieck\dreieck.cpp(17) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

Erstes Dreieck.exe - 12 error(s), 0 warning(s)


Ich habe im - wie auch bei den vorherigen "Programmen" - die DirectX9-SDK und die TriBase-Engine eingebunden (auch über "Projekt-Optionen").
Mein Quelltext sieht folgendermaßen aus:

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
#include <Windows.h>
#include <TriBase.h>
#include "..\\..\\Erstes Dreieck\\Allgemeines\\InitWindow.h"
#include "..\\..\\Erstes Dreieck\\Allgemeines\\InitDirect3D.h"
#include "..\\..\\Erstes Dreieck\\Allgemeines\\Direct3DEnum.h"
#include "resource.h"

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Vertexstruktur
struct SVertex
{
    tbVector3 vPosition; //Position des Vektors
    DWORD     dwColor;
};

//************************************************************************************************
//Globale Variablen
SDirect3DParameters g_Direct3DParameters;
float               g_fTime = 0.0f;
sVertex             g_aTriangleVertex[3];

//************************************************************************************************
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Render-Funktion
tbResult Render(float fNumSecsPassed)
{
    HRESULT  hResult;
    tbMatrix mRotation;
    tbMatrix mTranslation;
    tbMatrix mWorld;

    //Rotations- und Translationsmatrix des Dreieckes erzeugen
    tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime * 90.0f), &mRotation);
    tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f), &mTranlation);

    //beide matrixen kombinieren und als Weltmatrix einsetzen
    mworld = mRotation * mTranslation;
    g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
    
    //--------------------------------------------------------------------------------------------
    //Bild- und Z-Buffer leeren
    if(FAILED(hResult = g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 63), 1.0f, 0)))
    {
        //Fehler
        MessageBox(g_hWindow, "Fehler beim Leeren der Puffer!","Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
    }

    //Szene beginnen
    g_pD3DDevice->BeginScene();

    //Dreieck zeichnen
    if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, g_aTriangleVertex, sizeof(SVertex)))
    {
        //Fehler
        MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!","Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
    }

    //Szene beenden
    g_pD3DDevice->EndScene();

    //Den Bildbuffer leeren
    g_pD3DDevice->Present(NULL, NULL, NULL, NULL);

    return TB_OK;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Move-Funktion
tbResult Move(float fNumSecsPassed)
{
    // Zeitzähler erhöhen
    g_fTime += fNumSecsPassed;

    return TB_OK;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Herunterfahren der Szene
tbResult ExitScene()
{
    return TB_OK;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Herunterfahren der Anwendung
tbResult ExitApplication()
{
    // Szene herunterfahren
    ExitScene();

    // Direct3D und Fenster herunterfahren
    ExitDirect3D();
    ExitWindow();

    // Engine herunterfahren
    tbExit();

    return TB_OK;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Init. der Szene
tbResult InitScene()
{
    HRESULT hResult;

    //Vertexformat setzen
    if(FAILED(hResult = g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE))) {
        //Fehler
        TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR);
    }

    //Beleuchtung und Calling ausschalten, Dithering aktivieren
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);

    //das Bildseitenverhältnis berechnen
    float fAspect = (float)(g_Direct3DParameters.VideoMode.Width) / (float)(g_Direct3DParameters.VideoMode.Height);

    //die Projektionsmatrix erzeugen
    tbMatrix mProjection = tbMatrixProjection(TB_DEGTO_RAD(90.0f), fAspect, 0.1f, 100.0f);

    //Projektionsmatrix einsetzen
    g_pD3Device->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));

    //Init. des Dreiecks
    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    = (DWORD)(tbColor(1.0f, 0.0f, 0.0f));
    g_aTriangleVertex[1].dwColor    = (DWORD)(tbColor(0.0f, 1.0f, 0.0f));
    g_aTriangleVertex[2].dwColor    = (DWORD)(tbColor(0.0f, 0.0f, 1.0f));

    return TB_OK;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Initialisierungsfunktion
tbResult InitApplication()
{
    tbResult Result;

    // TriBase-Engine initialisieren
    tbInit();

    // Direct3D-Optionen abfragen (vom Benutzer gewählt)
    Result = GetDirect3DParameters(&g_Direct3DParameters);
    if(Result == TB_ERROR)
    {
        // Es trat ein Fehler auf!
        MessageBox(NULL, "Fehler beim Abzählen!", "Fehler",
                   MB_OK | MB_ICONEXCLAMATION);
        return TB_ERROR;
    }
    else if(Result == TB_CANCELED)
    {
        // Der Dialog wurde abgebrochen!
        return TB_CANCELED;
    }

    // Fenster initialisieren. Die Größe hängt vom gewählten
    // Videomodus ab, der in der Parameterstruktur gespeichert ist.
    if(InitWindow(g_Direct3DParameters.VideoMode.Width,
                  g_Direct3DParameters.VideoMode.Height,
                  "Beispielprogramm Nr. 3: Das erste Dreieck",
                  LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1))))
    {
        // Fehler beim Erstellen des Fensters!
        MessageBox(NULL, "Fehler beim Erstellen des Fensters!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        return TB_ERROR;
    }

    // Direct3D mit den abgefragten Einstellungen initialisieren
    if(InitDirect3D(&g_Direct3DParameters,
                    g_hWindow))
    {
        // Fehler!
        MessageBox(g_hWindow, "Fehler beim Initialisieren von Direct3D!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        ExitApplication();
        return TB_ERROR;
    }

    // Szene initialisieren
    if(InitScene())
    {
        // Fehler!
        MessageBox(g_hWindow, "Fehler beim Initialisieren der Szene!",
                   "Fehler", MB_OK | MB_ICONINFORMATION);
        ExitApplication();
        return TB_ERROR;
    }

    // Alles OK!
    return TB_OK;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Windows-Hauptfunktion
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    tbResult Result;

    // Initialisierung
    Result = InitApplication();
    if(Result == TB_CANCELED) return 0;
    else if(Result)
    {
        MessageBox(NULL, "Fehler beim Initialisieren der Anwendung!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }

    // Nachrichtenschleife
    tbDoMessageLoop(Render, Move);

    // Herunterfahren
    ExitApplication();

    return 0;
}


Hoffe ihr könnt mir helfen (ich habe noch keinen Fehler gefunden).
Mfg Serubabbel

P.S.: Tut mir Leid, aber ich benutze die englische Version von Visual C++.

Maxi

Treue Seele

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

2

23.12.2003, 14:57

Versuch mal über Projekt->Dem Profkthinzufügen->Dateien oder so ähnlich InitDirect3D und D3Denum mit einzufügen und dann zu kompilieren
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Anonymous

unregistriert

3

26.12.2003, 13:42

Hi, hab ich gemacht. Funktioniert trotzdem nicht ???
Mfg Serubabbel

Maxi

Treue Seele

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

4

27.12.2003, 13:06

Hi!

Änder mal deinen Datei header von so:

Quellcode

1
2
3
4
5
6
#include <Windows.h> 
#include <TriBase.h> 
#include "..\\..\\Erstes Dreieck\\Allgemeines\\InitWindow.h" 
#include "..\\..\\Erstes Dreieck\\Allgemeines\\InitDirect3D.h" 
#include "..\\..\\Erstes Dreieck\\Allgemeines\\Direct3DEnum.h" 
#include "resource.h"

um in

Quellcode

1
2
3
4
5
6
#include <Windows.h> 
#include <TriBase.h> 
#include "..\\..\\Erstes Dreieck\\Allgemeines\\Direct3DEnum.h" 
#include "..\\..\\Erstes Dreieck\\Allgemeines\\InitWindow.h" 
#include "..\\..\\Erstes Dreieck\\Allgemeines\\InitDirect3D.h" 
#include "resource.h"
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Anonymous

unregistriert

5

05.01.2004, 10:31

Danke

Hi,
vielen Dank, jetzt funktioniert es! :-D :roll:
Mfg Serubabbel

P.S.: Konnte leider nicht eher zurückschreiben, da ich noch viel für die Schule zu tun hatte. :kotz:

Werbeanzeige