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

1

01.07.2011, 09:21

Erstes Dreieck - Problem

Hallo,

ich habe ein kleines Problem mit meinem QUellcode für die Darstellung des 1. Dreiecks :).

Problem ist, es entsteht kein Abfragefenster wo man die Auflösungen & Co einstellt.
Mit Hilfe des Debuggers konnte ich auch schon feststellen wo das Problem in etwa liegt.

Hier erstmal mein 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
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
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <TriBase.h>
#include "Allgemeines.h"
#include "Direct3DEnum.h"
#include "InitDirect3D.h"
#include "InitWindow.h"
#include "Resource.h"
//Vertexstruktur
struct SVertex
{
tbVector3 vPosition; //Position des Vertex
DWORD dwColor;
};

// Globale Variablen
SDirect3DParametersg_Direct3DParameters;// Direct3D-Parameter
floatg_fTime = 0.0f;// Zeitzähler
SVertexg_aTriangleVertex[3];// Die drei Vertizes des Dreiecks


tbResult Render(float fNumSecsPassed)
{
HRESULT hResult;

//Translationsmatrix des Dreiecks erzeugen
tbMatrix mRotation(tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime * 90.0f)));
tbMatrix mTranslation(tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f)));

//Beide kombinieren und als Weltmatrix setzen
tbMatrix mWorld(mRotation * mTranslation);
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));

//Puffer leeren,  Bild + Z Buffer
if(FAILED(hResult = g_pD3DDevice->Clear(0, NULL,
D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0,0,63),
1.0f,0)))
{
//Fehler beim leeren
TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
}

//szene beginnen
g_pD3DDevice->BeginScene();

//Nun Das Dreieck zeichnen
if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,
1,
g_aTriangleVertex,
sizeof(SVertex))))
{
TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
}

//Sezene beenden
g_pD3DDevice->EndScene();

//Bildpuffer sichtbar machen
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);


return TB_OK;
}

tbResult Move(float fNumSecsPassed)
{
//Zeitzähler erhöhen
g_fTime += fNumSecsPassed;
return TB_OK;
}

tbResult InitScene() 
{
HRESULT hResult;
//Vertexformat setzen - Positions und Farbangaben

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

//Beleuchtung und Culling ausschalten, Ditheriing aktivieren
g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, FALSE);

//Das Bild Seitenverhäötnis berechnen
float fAspect = (float) (g_Direct3DParameters.VideoMode.Width)
/ (float) (g_Direct3DParameters.VideoMode.Height);

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

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

g_aTriangleVertex[0].vPosition = tbVector3(0.0f, 1.0f, 0.0f);
g_aTriangleVertex[1].vPosition = tbVector3(0.0f, 1.0f, 0.0f);
g_aTriangleVertex[2].vPosition = tbVector3(0.0f, 1.0f, 0.0f);
g_aTriangleVertex[0].dwColor = tbColor(1.0f, 0.0f, 0.0f);
g_aTriangleVertex[1].dwColor = tbColor(0.0f, 1.0f, 0.0f);
g_aTriangleVertex[2].dwColor = tbColor(0.0f, 0.0f, 1.0f);

return TB_OK;

}
// ******************************************************************

// Windows-Hauptfunktion

int WINAPI WinMain(HINSTANCE hInstance,
               HINSTANCE hPrevInstance,
               char* pcCmdLine,
               int iShowCmd)
{
tbInit();

//Direct 3D optionen Abfragen vom benutzer
SDirect3DParameters Direct3DParameters;

tbResult Result = GetDirect3DParameters(&Direct3DParameters);
g_Direct3DParameters =Direct3DParameters;
if(Result == TB_ERROR)
{
//Es trat ein Fehler auf
MessageBox(NULL, "Fehler beim Abzählen!", "Fehler", MB_OK | MB_ICONEXCLAMATION);
tbExit();

return 0;
}
else if( Result == TB_CANCELED)
{
//Der Dialog wurde abgebrochen
tbExit();
return 0;
}

//Fenster Initialisieren
//Die Größe hängt vom gewählten Videomodus ab
if(InitWindow(Direct3DParameters.VideoMode.Width,
Direct3DParameters.VideoMode.Width,
"Beispielprogramm: Das erste Dreieck",
LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1))))
{
MessageBox(NULL, "Fehler beim erstellen des Fensters!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);

tbExit();
return 0;
}

//DirectX mit den abgefragten Einstellungen initialisieren
if(InitDirect3D(&Direct3DParameters,
g_hWindow))
{
//Fehler
MessageBox(NULL, "Fehler beim initialisieren von DirectX!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
ExitWindow();
tbExit();
return 1;
}

InitScene();

//Nachrichtenschleife
tbDoMessageLoop(Render, Move);

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

//Engine herrunterfahren
tbExit();

return 0;
}


Problem ist er springt in Zeile 137 hinen:

C-/C++-Quelltext

1
else if( Result == TB_CANCELED)


Bei genaueren Untersuchungen der Funktion GetDirect3DParameters sieht man,

dass bei

C-/C++-Quelltext

1
2
3
4
iResult = (int)(DialogBox(GetModuleHandle(NULL),
  MAKEINTRESOURCE(IDD_DIRECT3D_SETTINGS),
  NULL,
  D3DEnumDialogProc));


-1 zurück gegeben wird. Habt ihr eine Idee wo das Problem hier liegt? Meine Vermutung ist ja, dass es etwas mit dem GetModuleHandle(NULL) zu tun hat... jedoch bin ich mir da nicht sicher. Leider steht zu den Funktionen recht wenig im Buch und man ist aufgeschmissen wenn diese nicht funktionieren.

Wäre super wenn jemand helfen kann..

LG

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Akrillo« (01.07.2011, 09:29)


2

01.07.2011, 09:49

Da fehlen vermutlich die Ressource-Dateien. Glaube, das sind dreieck.rc und resource.h.
Die müsstest du dem Projekt hinzufügen.
fka tm

3

01.07.2011, 22:21

jop das wars, danke! :)

Werbeanzeige