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

Phili

unregistriert

1

15.12.2005, 18:30

Textur wird nicht angezeigt

Hallo,
Ich bin noch ein ziemlicherAnfanger bei Direct3D, also verzeiht mir die Frage: Ich habe ein Problem mit den Texturen, das Programm weigert sich, sie Ordnungsgemäß anzuzeingen. Es zeichnet nur ein weißes Dreieck.


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
#include <windows.h>
#include <D3D9.h>
#include <D3DX9.h>
#include <StdIO.h>
#include "resource.h"

struct Vertex
{
    float Pos[3];
    DWORD Color[3];
    float tex[2];
};

struct Polygone
{
    Vertex vert[3];
};

WNDCLASSEX wndclassex;
HWND hwnd;
IDirect3D9 *D3D;
IDirect3DDevice9 *D3DDev;
MSG msg;
D3DPRESENT_PARAMETERS pp;
D3DMATRIX World;
D3DMATRIX Projection;
D3DMATRIX View;
IDirect3DTexture9 *Tex;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    Polygone Poly;
    Poly.vert[0].Pos[0] = 0;
    Poly.vert[0].Pos[1] = 0;
    Poly.vert[0].Pos[2] = 0;
    Poly.vert[0].tex[0] = 0;
    Poly.vert[0].tex[1] = 0;
    Poly.vert[1].Pos[0] = 1;
    Poly.vert[1].Pos[1] = 0;
    Poly.vert[1].Pos[2] = 0;
    Poly.vert[1].tex[0] = 1;
    Poly.vert[1].tex[1] = 0;
    Poly.vert[2].Pos[0] = 0.5;
    Poly.vert[2].Pos[1] = 1;
    Poly.vert[2].Pos[2] = 0;
    Poly.vert[2].tex[0] = 0.5;
    Poly.vert[2].tex[1] = 1;

    wndclassex.cbClsExtra = NULL;
    wndclassex.cbSize = sizeof(WNDCLASSEX);
    wndclassex.hbrBackground = (HBRUSH)(COLOR_WINDOW);
    wndclassex.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1));
    wndclassex.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));
    wndclassex.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));
    wndclassex.hInstance = hInstance;
    wndclassex.lpfnWndProc = DefWindowProc;
    wndclassex.lpszClassName = "PHILIP";
    wndclassex.lpszMenuName = NULL;
    wndclassex.style = CS_CLASSDC;
    RegisterClassEx(&wndclassex);
    if(FAILED(
    hwnd = CreateWindow("PHILIP", "PHILIP", WS_VISIBLE | WS_OVERLAPPEDWINDOW, 
        0, 0, 300,300, NULL, NULL, GetModuleHandle(NULL), NULL)))
    {
        MessageBox(NULL, "Fehler beim Erstellen des Fensters", "Fehlermeldung", MB_OK);
    }


    D3D = Direct3DCreate9(D3D_SDK_VERSION);
    ZeroMemory(&pp, sizeof(D3DPRESENT_PARAMETERS));
    pp.BackBufferWidth = 1024;
    pp.BackBufferHeight = 768;
    pp.BackBufferFormat = D3DFMT_X8R8G8B8;
    pp.BackBufferCount = 1;
    pp.MultiSampleType = D3DMULTISAMPLE_NONE;
    pp.MultiSampleQuality = 0;
    pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    pp.Windowed = FALSE;
    pp.EnableAutoDepthStencil = TRUE;
    pp.AutoDepthStencilFormat = D3DFMT_D32;
    pp.FullScreen_RefreshRateInHz = 60;
    pp.PresentationInterval = 1;
    if(FAILED(
    D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hwnd, 
        D3DCREATE_MIXED_VERTEXPROCESSING, &pp, &D3DDev)))
    {
        MessageBox(NULL, "Fehler beim Erstellen der D3D9Device", "Fehlermeldung", MB_OK);
    }


    D3DDev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1);
    D3DDev->SetRenderState(D3DRS_LIGHTING, FALSE);
    D3DDev->SetRenderState(D3DRS_CULLMODE, FALSE);


    D3DXCreateTextureFromFileEx(D3DDev, "Picture1.bmp", 512, 512, D3DX_DEFAULT, 0,
        D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_BOX|D3DX_FILTER_MIRROR_U, D3DX_DEFAULT, 0, NULL, NULL,
        &Tex);
    D3DDev->SetTexture(0, Tex);


    while(msg.message != WM_QUIT)
    {

        while(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }


        D3DDev->BeginScene();
        D3DDev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(100, 100, 100), 1, 1);
        D3DDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, &Poly.vert[0], sizeof(Vertex));
        D3DDev->EndScene();
        D3DDev->Present(0,0,0,0);
    }


    return 0;
}


Ich habe die Textur als BMP-Daetei in den Ordner, daran kann es also nicht liegen.

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

2

15.12.2005, 18:35

prüf mal ob die textur wirklich geladen wurde
Was es alles gibt, das ich nich brauche - Aristoteles

Phili

unregistriert

3

15.12.2005, 20:09

Es funktioniert. Das programm schien nich zu akkzeptieren, das ich eine Farbe für die Vertizies angab. Ich hab D3DFVF_DIFFUSE weggelassen, dann gings.

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

4

15.12.2005, 20:12

du darfst pro vertex ja auch nu einen dword color setzen sonst klappt es nich
Was es alles gibt, das ich nich brauche - Aristoteles

Phili

unregistriert

5

16.12.2005, 14:59

Ach so, ich dachte einen pro Grundfarbe(Rot grün blau).

Werbeanzeige