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

21.05.2009, 11:55

Terrrain wird falsch gerendert

Guten Morgen zusammen.

Ich hab jetzt meine Engine um einen kleinen Terrain-Renderer erweitert, und auch wenn Techniken wie LOD odeer Textur-Splatting noch fehlen, war ich eigentlich ganz zufrieden.
Wenn da nicht ein Problem beim Rendern wäre.
(Video) <- Sorry für die schlechte Qualität, das Programm konnte das nicht besser
Sieht irgendiwe so aus, als ob DX beim Rendern das was dahinter liegt dem vorne vorzieht. Ich vermute mal, es liegt an den Renderstates.
Die Folgenden hab ich gesetzt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
D3D->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
D3D->SetRenderState(D3DRS_LIGHTING, TRUE);
D3D->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
D3D->SetRenderState(D3DRS_ZENABLE, TRUE);
D3D->SetRenderState(D3DRS_DITHERENABLE, TRUE);
D3D->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
D3D->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
D3D->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
D3D->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);


Hat jemand eine Idee, woran es liegen könnte?

Schon mal Danke im Voraus,

mfg mm

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

21.05.2009, 12:18

Hallo, ich würds mir gerne mal ansehen, nur leider funktioniert das Video nicht...stattdessen kommen so nervige Popups

3

21.05.2009, 12:21

Dito.
Auch "Ziel speichern unter..." hat nix geholfen.
fka tm

4

21.05.2009, 12:22

Oh, tut mir leid. :oops: Hab das T im Namen groß geschrieben, musste aber klein sein. Jetzt funktioniert es.

5

21.05.2009, 12:27

Sieht so aus, als ob Vertices falsch gesetzt sind.

ZBuffer, ZBuffer-Format (richtig) initialisiert?
ZWriteEnable?

Render das Ganze doch mal mit Wireframe (Cullmode=None).
fka tm

6

21.05.2009, 12:32

Zitat von »"TrikkieMikkie"«

Sieht so aus, als ob Vertices falsch gesetzt sind.

Im Wireframe siehts eigentlich ok aus.

Zitat von »"TrikkieMikkie"«


ZWriteEnable?

Ändert nichts.

Was meinst du mit ZBuffer (Format)?
Beim initialisieren von DX oder wie?

7

21.05.2009, 12:34

Zitat von »"MMAnfänger"«

Was meinst du mit ZBuffer (Format)?
Beim initialisieren von DX oder wie?


Genau!

Und bei Device->Clear? Initialisierst da den ZBuffer mit?

Kannst du mal den gesamten Code (wenn nicht zu groß, sonst uploaden) posten?
fka tm

8

21.05.2009, 12:37

Der ganze Code wäre etwas happig, hier mal der Code von der DX initialisierung (Engine):

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
dmResult dmD3D::CreateInstance(char *Titel, char *name, HICON hIcon, bool bShowConfig, HINSTANCE hInstance)
{
    g_hInstance = hInstance;
    bShowConfig = false; // vorruebergehend

    //if(bShowCongfig)config = MakeConfig();

    if(m_bInitialised)return R_OK;
    config.frequenz      = 65;
    config.fullscreen    = false;
    config.height        = 600;
    config.width         = 800;

    // Fenster initialisieren...

    dmCreateWindow(config.width, config.height, Titel, name, hIcon);
    
    D3DPRESENT_PARAMETERS d3dpp;
    D3DDISPLAYMODE d3ddm;
    D3DDEVTYPE devtype;
    D3DCAPS9 caps;

    m_pD3D = Direct3DCreate9( D3D_SDK_VERSION);
    if(!m_pD3D)
    {
        ERROR("Direct3DCreate9 fehlgeschlagen...");
        return R_ERROR;
    }

    if( m_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm) < 0)
    {
        ERROR("Abfragen der Adapterinformationen fehlgeschlagen...");
        return R_ERROR;
    }

    ZeroMemory( &d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = !config.fullscreen;
    
    d3dpp.SwapEffect =      D3DSWAPEFFECT_DISCARD;
    d3dpp.EnableAutoDepthStencil = FALSE;
 
    d3dpp.BackBufferFormat = d3ddm.Format;
    d3dpp.BackBufferHeight = config.height;
    d3dpp.BackBufferWidth  = config.width;
    d3dpp.hDeviceWindow    = g_hWindow;

    if( m_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT,  D3DDEVTYPE_HAL, &caps) < 0)
        {
        WARNING("Keine Hardwareunterstützung gefunden. Bitte nehmen Sie sich viel Zeit, Sie werden sie brauchen...");
        INFO("REF-DEVICE setzen...");
        devtype = D3DDEVTYPE_REF;
        }
    else
    {
        INFO("HAL-DEVICE setzen...");
        devtype = D3DDEVTYPE_HAL;
    }

    if( m_pD3D->CreateDevice( D3DADAPTER_DEFAULT, devtype, g_hWindow, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &m_pD3DDevice) < 0)
        return R_ERROR;


    DirectInput8Create(g_hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&m_pDInput, NULL);
    if(!m_pDInput)WARNING("Fehler beim Erstellen des Input-Objekts...!");
    GetKeyboardDevice();
    GetMouseDevice();
    m_pCursor = new dmMouse();
    m_pCursor->Show(false);

    m_bInitialised = true;
    return R_OK;
}


Ich uppe auch mal den ganzen Code, dauert aber einen Moment

9

21.05.2009, 12:44

So, das ganze Projekt ist online (www.manuelmathar.de.vu/Downloads/Terrain.zip)

10

21.05.2009, 12:45

Probier mal folgendes:

C-/C++-Quelltext

1
2
d3dpp.EnableAutoDepthStencil  = true; 
d3dpp.AutoDepthStencilFormat  = D3DFMT_D24S8;
fka tm

Werbeanzeige