ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4439048
Jetzt (Chat):
6 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
DirectX API
Re: Probleme beim Rendern mit Vertexbuffer
Normal
AutorThema
FredK Offline
ZFX'ler


Registriert seit:
06.05.2004

Schleswig-Holstein
Probleme beim Rendern mit VertexbufferNach oben.
Ich hab mich nun mal aufgerafft und render mit Vertexbuffern. Vorher hatte ich quasi jedes Dreieck einzeln mit DrawPrimitiveUP gerendert.
Den Vertexbuffer hab ich als Zeiger deklariert:
Code:
IDirect3DVertexBuffer9 *VB;

Meine Dreiecke speicher ich in folgenden Strukturen:
Code:
#define FVF_RPVERTEX D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1

struct RPMeshVertex
{
D3DXVECTOR3 position; // Ortsvektor
D3DXVECTOR3 normal;  //Normalvektor
float tu,tv;
};

struct RPMeshTriangle
{
    RPMeshVertex v[3];
};

RPMeshTriangle *tri;      //Wird beim Laden befüllt
int RPMeshTriangleAnz;    //Enthält die Anzahl der Dreiecke, die in tri lagern

So erstelle ich den Vertexbuffer:
Code:
g_pd3dDevice->CreateVertexBuffer(RPMeshTriangleAnz*sizeof(RPMeshTriangle),0,FVF_RPVERTEX,D3DPOOL_DEFAULT,&this->VB,NULL);
    
    RPMeshTriangle *vert;
    this->VB->Lock(0,RPMeshTriangleAnz*sizeof(RPMeshTriangle),(void**)&vert,0);

    for(int i=0;ithis->VB->Unlock();

Und so render ich ihn:
Code:
g_pd3dDevice->SetFVF(FVF_RPVERTEX);
g_pd3dDevice->SetStreamSource(0,this->VB,0,sizeof(RPMeshVertex));
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,1,RPMeshTriangleAnz);

Problem dabei ist, dass das Programm mit ner Windowsstandartfehlermeldung abstürzt.
Früher habe ich erfolgreich mit g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,tri[i].v,sizeof(RPMeshVertex)); gerendert.

Ich schätze, dass ich irgend nen Parameter falsch eingetragen hab oder dass er mein RPMeshTriangle-Konstrukt übel nimmt. Wenn ich DrawPrimitive auskommentiere, dann läuft das Programm (bringt mir aber nix). Da ich aber noch nie (aus Bequemlichkeit) mit Vertexbuffern gerendert hab, hab ich da leider keine Erfahrung.
28.12.2008, 21:20:54 Uhr
www.funex.tk
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Probleme beim Rendern mit VertexbufferNach oben.
Ändere den zweiten Parameter von 1 auf 0.

Er bezeichnet das Offset, also wieviele Vertices im Buffer übersprungen werden sollen, bevor die Anzahl Primitives im zweiten Parameter gerendert wird.
Ist dein Buffer nur ein Dreieck lang, also drei Vertices, überspringt er mit Offset=1 das erste und versucht dann, drei weitere für ein Dreieck zu rendern, wobei der Puffer aber nur zwei weitere enthält.

Gruß, Ky

Edit: Btw ist es objektorientier, das FVF in der Vertex-Struktur zu speichern:
Code:
struct RPMeshVertex
{
    […]
    static const UINT FVF = (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1);
};

g_pd3dDevice->SetFVF(RPMeshVertex::FVF);


2 Mal gendert, zuletzt am 28.12.2008, 21:38:38 Uhr von Krishty.
28.12.2008, 21:31:04 Uhr
FredK Offline
ZFX'ler


Registriert seit:
06.05.2004

Schleswig-Holstein
Re: Probleme beim Rendern mit VertexbufferNach oben.
Umgh. Daran liegt es leider nicht. Die Fehlermeldung kommt trotzdem. Laut MSDN ist bei DrawPrimitive das zweite Parameter der StartVertex und nicht das Offset.
28.12.2008, 21:43:52 Uhr
www.funex.tk
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Probleme beim Rendern mit VertexbufferNach oben.
Der StartVertex ist ein Offset, sie nennen ihn nur nicht so weil sie den Begriff lieber nur für „rohe“ Byte-Größenangaben nutzen. Das erste Vertex hat also nichtsdestotrotz den Index 0.

Auf die Schnelle habe ich auch nichts anderes entdeckt – hast du mal die Debug-Runtime aktiviert um eine präzisere Meldung zu bekommen?

1 Mal gendert, zuletzt am 28.12.2008, 22:05:47 Uhr von Krishty.
28.12.2008, 22:01:31 Uhr
FredK Offline
ZFX'ler


Registriert seit:
06.05.2004

Schleswig-Holstein
Re: Probleme beim Rendern mit VertexbufferNach oben.
Ha! Läuft doch. Wundert mich, warum das beim ersten Versuch nicht lief. Ist aber nun auch egal. Besten Dank.
28.12.2008, 22:21:50 Uhr
www.funex.tk
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel