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

11

01.06.2009, 18:08

Wenn die PNG nicht gefunden wird, würde wahrscheinlich ein Fehler auftreten.
Ansonsten gilt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
// Im aktuellen Ordner (Ordner, in dem die Exe liegt)

D3DXCreateTextureFromFile(d3ddev, L"image.png", &Point); 

// Relative Pfadangabe (ausgehend vom aktuellen Ordner)

D3DXCreateTextureFromFile(d3ddev, L"textures\\highres\\image.png", &Point); 

// Absolute Pfadangabe 

D3DXCreateTextureFromFile(d3ddev, L"C:\\Projekte\\cpp\\2d\\textures\\highres\\image.png", &Point);


Ich hab noch was vergessen: ;-)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
// ende initD3D()


...

d3ddev->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );                 // Culling:  None

d3ddev->SetRenderState( D3DRS_LIGHTING, false );

 return;


V O R A U S != V O RR A U S
Wurde von der Rechtschreibprüfung kritisiert.
:)
fka tm

12

01.06.2009, 18:17

Hmm vielen dank schonmal für deine hilfe, aber es funktioniert immer noch nicht...das Fenster ist leider immer noch schwarz ohne bild :-(
im übrigen benutze ich Visual C++ 2008
nur falls es helfen sollte
warum ist das eigentlich so kompliziert, liegt es am fenstermodus?
oder ist das tutrorial nicht vollständig?
im moment krieg ich n

hmm achja mist voraus xD sorry
aber warum wird das zensiert?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

01.06.2009, 18:18

Zitat von »"thedna"«


aber warum wird das zensiert?


Weil das vorrher (<- sieht doch auch doof aus) so oft falsch geschrieben wurde, dass es gewisse Leute genervt hat. ;)

14

01.06.2009, 18:23

habs hinbekommen!

C-/C++-Quelltext

1
2
3
4
5
d3ddev->SetTexture(0, Point );
// hab ich wieder rausgenommen

//und durch

d3ddev->Draw(Point,NULL,&center,&postition,D3DCOLOR_XRGB(255,0,0));
//ersetzt.

jetz läufts

danke an alle

15

01.06.2009, 19:53

Tut mir leid ich brauch nochmal eure Hilfe :oops:

Ich habe den Code jetz ein wenig verändert, um ihn OOP zu bekommen (alles in Classen und in andere Datein auslagern.
Nun bekomm ich einen Laufzeitfehler.

Zitat

Eine Ausnahme (erste Chance) bei 0x01341c5b in Direct3dinit.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Unbehandelte Ausnahme bei 0x01341c5b in Direct3dinit.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.



die Datein:

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
//Framework.h

#ifndef FRAMEWORK_HPP
#define FRAMEWORK_HPP
#include "Singleton.hpp"
#include <d3d9.h>
#include <d3dx9.h>



#define g_pFramework CFramework::Get()

class CFramework : public TSingleton<CFramework>
{
    public:
            void initD3D(HWND hWnd,LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt);    
            void render_frame(LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt);
            void cleanD3D(LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point);
    private:
        D3DPRESENT_PARAMETERS d3dpp;
};
#endif


//################################################



//Framework.cpp

#include "Framework.h"

void CFramework::initD3D(HWND hWnd,LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt)
{
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
     //create a struct to hold various device informations

    ZeroMemory(&d3dpp,sizeof(d3dpp)); //struct frei machen

    d3dpp.Windowed = TRUE; //Windowed

    d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; //Discard old frame

    d3dpp.hDeviceWindow = hWnd; //set the window to be used by Direct3D



    //Create a device class using this informations an dinformation from the d3dpp stuct


    d3d->CreateDevice(D3DADAPTER_DEFAULT,
                        D3DDEVTYPE_HAL,
                        hWnd,
                        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                        &d3dpp,
                        &d3ddev);
    D3DXCreateSprite(d3ddev,&d3dspt);
    D3DXCreateTextureFromFile(d3ddev, L"image.png",&Point);

};

void CFramework::render_frame(LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt)
{
        
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0f,0);
d3ddev->BeginScene();
d3dspt->Begin(NULL);
D3DXVECTOR3 center( 10.0f, 10.0f, 0.0f ); // Mitte Textur

D3DXVECTOR3 postition( 50.0f, 50.f, 0.0f ); // Z = 0 !!


d3dspt->Draw(Point,NULL,&center,&postition,D3DCOLOR_XRGB(255,255,255));       
//d3ddev->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xFF308030, 1.0f, 0);


d3dspt->End();
d3ddev->EndScene(); //ends the 3D scene

d3ddev->Present(NULL,NULL,NULL,NULL); //Display all not only parts of it!



 return;
};

void CFramework::cleanD3D(LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point)
{
    Point->Release();
    d3ddev->Release();
    d3d->Release();
};


//################################################


//main.cpp

#include <windows.h>
#include <windowsx.h>

#include "Framework.h"
LPDIRECT3D9 d3d;    //the pointer to our Direct3D interface

LPDIRECT3DDEVICE9 d3ddev;   //the pointer to the device class

LPDIRECT3DTEXTURE9 Point; //Pointer to Texture

LPD3DXSPRITE d3dspt; //pointer to Sprite

//function prototypen


//Set up window Callback funktion

LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wparam,LPARAM lparam);

//MAIN

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd;
    WNDCLASSEX wc;
    CFramework Framework;

    ZeroMemory(&wc, sizeof(WNDCLASSEX));

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszClassName = L"WindowClass";

    RegisterClassEx(&wc);

    hWnd = CreateWindowEx(NULL,
                          L"WindowClass",
                          L"Our First Direct3D Program",
                          WS_OVERLAPPEDWINDOW,
                          300, 300,
                          800, 600,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);

    ShowWindow(hWnd, nCmdShow);

    // set up and initialize Direct3D

    Framework.initD3D(hWnd, d3d, d3ddev, Point, d3dspt);

    // enter the main loop:


MSG msg;
msg.message = WM_NULL;

    while(msg.message != WM_QUIT)
    {
      if(PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
      {
               TranslateMessage( &msg );
              DispatchMessage( &msg );
      }
     else
           {   
              Framework.render_frame(d3ddev,  Point,  d3dspt);
         }
    } 
    // clean up DirectX and COM

    Framework.cleanD3D( d3d,d3ddev, Point);

    return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            } break;
    }

    return DefWindowProc (hWnd, message, wParam, lParam);
}


Hoffe ihr könnt mir helfen, tut mir leid das ich so viele fragen stellen muss

Fehler liegt hier:

Quellcode

1
d3ddev->BeginScene();


Ich denke mal es liegt daran das d3dev nicht von der funktion render_frame auf die funktion init zugreifen kann, nur wie krieg ich das hin?
habs mal mit return versucht bringt aber leider auch nix.
//Update
Schenibar kann d3ddev nicht auf hWnd zugreifen, ich weiß jedoch nicht woran das liegen könnte.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

16

02.06.2009, 10:37

Sieht aus als wäre da ein NULL Pointer Problem...
Hast du im Debugger mal geschaut was da drinne steht?

17

02.06.2009, 17:01

Sobald mein Debugger in die Funktion render_frame springt ist die gesamte structur von d3ddev leer,
Keine werte mehr drin enthalten :shock:

Lg dna

18

02.06.2009, 19:19

Mach CFramework Framework mal global...
fka tm

19

02.06.2009, 19:41

Ändert leider nix, das Problem bleibt das gleiche und bleibt bestehen.

20

02.06.2009, 21:46

Wie sieht denn der Rest aus (init-Methode usw.) ?
fka tm

Werbeanzeige