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

C++Amateur

Frischling

  • »C++Amateur« ist der Autor dieses Themas

Beiträge: 50

Wohnort: irgendwo in der Milchstraße

Beruf: Schüler

  • Private Nachricht senden

1

21.06.2005, 14:54

"Das erste Dreieck" funktioniert nicht

Ich habe ein Problem mit dem Beispielprogramm "Das erste Dreieck".
Ich wollte mal den Code so weit wie möglich selbst Programmieren und so wenig wie Möglich in das Buch gucken.
Wenn ich das Programm compiliere bekomme ich keine Fehlermeldung. Wenn ich aber im Einstellungsdialog auf "OK" drücke "hat das Programm ein Problem festgestellt und muss beendet werden".
Ich habe einige Teile des Codes wegkommentiert und habe bemerkt, dass der Fehler nicht auftritt, wenn ich den Inhalt der InitScene()-Methode wegkommentiere. Ich habe die Methode auch schon von einem funktionierendem Beispiel kopiert und die Variablennamen angepasst, aber das Problem tritt trotzdem auf.
Hier mein Quellcode(er ist ja nicht so lang, deswegen poste ich ihn komplett, kann ja auch sein, dass der Fehler wo anders ist):

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
#include <Windows.h>
#include <TriBase.h>
#include "..\\..\\Allgemeines\\InitWindow.h"
#include "..\\..\\Allgemeines\\Direct3DEnum.h"
#include "..\\..\\Allgemeines\\InitDirect3D.h"
#include "Resource.h"
#include "D3D9.h"
#pragma comment(lib, "d3dx9.lib")
struct SVertex{
tbVector3 vPosition;
DWORD dwColor;
};
SVertex TriangleVertex[3];
SDirect3DParameters D3DP;
float fTime = 0.0f;
tbResult Render(float fNumSecsPassed){
    tbMatrix mRotation(tbMatrixRotationY(TB_DEG_TO_RAD(fTime * 90.0f)));
    tbMatrix mTranslation(tbMatrixTranslation(tbVector3(2.0f,0.0f,0.0f)));
    tbMatrix mWorld(mRotation * mTranslation);
    g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,63),1.0f,0);
g_pD3DDevice->BeginScene();
g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,
                              1,
                              TriangleVertex,
                              sizeof(SVertex));
g_pD3DDevice->EndScene();
g_pD3DDevice->Present(NULL,NULL,NULL,NULL);
return TB_OK;
}
tbResult Move(float fNumSecsPassed){
fTime += fNumSecsPassed;
return TB_OK;
}
tbResult InitScene(){
    g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE);
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);
    float Aspect = (float)(D3DP.VideoMode.Width) / (float)(D3DP.VideoMode.Height);
    tbMatrix mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f),
        Aspect,
        0.1f,
        100.0f);
    g_pD3DDevice->SetTransform(D3DTS_PROJECTION,(D3DMATRIX*)(&mProjection));
    TriangleVertex[0].vPosition = tbVector3(1.0f,0.0f,0.0f);
    TriangleVertex[1].vPosition = tbVector3(1.0f,-1.0f,0.0f);
    TriangleVertex[2].vPosition = tbVector3(-1.0f,-1.0f,0.0f);
    TriangleVertex[0].dwColor = tbColor(0.0f,1.0f,0.0f);
    TriangleVertex[1].dwColor = tbColor(1.0f,1.0f,0.0f);
    TriangleVertex[2].dwColor = tbColor(1.0f,1.0f,0.0f);
    return TB_OK;
}
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE PrevInstance,
                   char* pcCommandLine,
                   int iShowCommand){
tbInit();
tbResult Result = GetDirect3DParameters(&D3DP);
if(Result == TB_CANCELED){
tbExit();
return 0;
}
InitScene();
HRESULT hResult;
if(FAILED(hResult = InitWindow(D3DP.VideoMode.Width,
           D3DP.VideoMode.Height,
           "Das Spiel",
           LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)))))
{
MessageBox(g_hWindow,"Fehler beim Initialisieren des Fensters","Fehler",MB_OK | MB_ICONEXCLAMATION);
return 1;
tbExit();
}
if(FAILED(hResult = InitDirect3D(&D3DP, g_hWindow)))
{
MessageBox(g_hWindow,"Fehler beim Initialisieren des Fensters","Fehler",MB_OK | MB_ICONEXCLAMATION);
}
tbDoMessageLoop(Render,Move);
ExitDirect3D();
ExitWindow();
tbExit();
return 0;
}


Ich hoffe, dass mir jemand helfen kann.
Meine Seite übers Programmieren:
http://www.selfsite.de.vu

C++Amateur

Frischling

  • »C++Amateur« ist der Autor dieses Themas

Beiträge: 50

Wohnort: irgendwo in der Milchstraße

Beruf: Schüler

  • Private Nachricht senden

2

23.06.2005, 15:23

Ich habe den Fehler jetzt gefunden:
Erst InitWindow, dann InitDirect3D, das war der Fehler.
Meine Seite übers Programmieren:
http://www.selfsite.de.vu

Werbeanzeige