Ab einer bestimmten Anzahl Vertizes wird nicht mehr gerendert



  • Hi,
    ich habe mir eine Funktion gebastelt, die mir die entsprechenden Vertizes für ein Schachbrett erstellt und das wird anschliessend gerendert. Nun habe ich aus Neugier das Schachbrett vergrössert und bei 419x419 (sprich 419x419x6 Vertizes) wurde auf einmal nichtsmehr gerendert.
    Laut den d3dcaps akzeptiert die DrawPrimitive-Funktion mehr als 1 Mio. Dreiecke, das Schachbrett besteht aber nur aus ca. 350.000. Daran kann es also nicht liegen.

    Hier mal der Code der Schachbrett-Funktion:

    LPDIRECT3DVERTEXBUFFER9 createGeometry(D3DObjectIS d3dob)
    {
    	LPDIRECT3DDEVICE9 lpD3DDevice = d3dob.getDevice();
    	LPDIRECT3DVERTEXBUFFER9 VB_Triangle;	
    	VOID* VertexBufferStart;
    
    	float resize = 10.0;
        int sidelength = 419;                                     // Seitenlänge des Schachbretts
    	int size = sidelength*sidelength*6;                       // Viereck ~ 6 Vertices
    
    	customVertex *TriangleVertices = new customVertex[size];  // Es enststehen ca. 350000 Primitives,
    	                                                          // von DrawPrimitive werden >1.000.000 akzeptiert
    	for(int x = 0; x<sidelength; x++)
    	{ 
    		for(int y = 0; y<=sidelength; y++)
    		{
    		TriangleVertices[(x*sidelength+y)*6].x     = x/resize;
    		TriangleVertices[(x*sidelength+y)*6].z     = y/resize;
    		TriangleVertices[(x*sidelength+y)*6].y     = 1.0f;
    		TriangleVertices[(x*sidelength+y)*6].color = RGB(255, 0, 0);
    		TriangleVertices[(x*sidelength+y)*6+1].x     = x/resize;
    		TriangleVertices[(x*sidelength+y)*6+1].z     = y/resize+1/resize;
    		TriangleVertices[(x*sidelength+y)*6+1].y     = 1.0f;
    		TriangleVertices[(x*sidelength+y)*6+1].color = (x+y)%2 * RGB(255, 255, 255);
    		TriangleVertices[(x*sidelength+y)*6+2].x     = x/resize+1/resize;
    		TriangleVertices[(x*sidelength+y)*6+2].z     = y/resize;
    		TriangleVertices[(x*sidelength+y)*6+2].y     = 1.0f;
    		TriangleVertices[(x*sidelength+y)*6+2].color = (x+y)%2 * RGB(255, 255, 255);
    		TriangleVertices[(x*sidelength+y)*6+3].x     = x/resize+1/resize;
    		TriangleVertices[(x*sidelength+y)*6+3].z     = y/resize;
    		TriangleVertices[(x*sidelength+y)*6+3].y     = 1.0f;
    		TriangleVertices[(x*sidelength+y)*6+3].color = (x+y)%2 * RGB(255, 255, 255);
    		TriangleVertices[(x*sidelength+y)*6+4].x     = x/resize+1/resize;
    		TriangleVertices[(x*sidelength+y)*6+4].z     = y/resize+1/resize;
    		TriangleVertices[(x*sidelength+y)*6+4].y     = 1.0f;
    		TriangleVertices[(x*sidelength+y)*6+4].color = (x+y)%2 * RGB(255, 255, 255);
    		TriangleVertices[(x*sidelength+y)*6+5].x     = x/resize;
    		TriangleVertices[(x*sidelength+y)*6+5].z     = y/resize+1/resize;
    		TriangleVertices[(x*sidelength+y)*6+5].y     = 1.0f;
    		TriangleVertices[(x*sidelength+y)*6+5].color = (x+y)%2 * RGB(255, 255, 255);
    		}
    
    	}
    
    	lpD3DDevice->SetFVF(D3D_CUSTOMVERTEX);
    	lpD3DDevice->CreateVertexBuffer(size*sizeof(customVertex),    
                          D3DUSAGE_WRITEONLY, D3D_CUSTOMVERTEX,     D3DPOOL_MANAGED, &VB_Triangle, NULL);
    
    	VB_Triangle->Lock(0,0, &VertexBufferStart, 0);
    
    	memcpy(VertexBufferStart, TriangleVertices, size*sizeof(customVertex));
    
    	VB_Triangle->Unlock();
    
    	return VB_Triangle;
    }
    

    Kann mir jemand sagen, warum er ab 419x419 Vierecken nichtmehr rendert?

    gtx, Rimmon



  • DrawPrimitive-Funktion akzeptiert mehr als 1 Mio. Dreiecke

    nicht dreiecke sondern eckpunkte.

    bei 419x419x6 Vertizes wurde auf einmal nichtsmehr gerendert.

    na dann rechne mal nach 🙂



  • Benutz doch die Debug-Version von D3D und deinem Programm und schau dir die Meldung im Debug-Output an.



  • hellihjb schrieb:

    nicht dreiecke sondern eckpunkte.

    Thx. Das wirds wohl sein. (sagt zumindest mein Taschenrechner ^^)
    Ich war der Meinung, dass es Dreiecke sind, da man ja auch bei PrimitiveCount die Anzahl der Dreiecke angibt. Dass es auch Punkte und Linien gibt, habe ich wohl verdrängt :>



  • Vielleicht lieber mal in der Doku nachlesen? Ist bei sowas sicher nicht verkehrt. f'`8k

    Gruß, TGGC (\-/ has leading)



  • was mich eher interresieren würde: wieso brauchst du für ein schachbrett so viele vertizes o.O



  • TravisG schrieb:

    was mich eher interresieren würde: wieso brauchst du für ein schachbrett so viele vertizes o.O

    Ich brauch sie nicht für ein Schachbrett, sondern für Terrains. Beim Schachbrett ist nur das Problem aufgetaucht^^



  • dann verfolgst du am besten mal den nachbar-thread, dann brauchst du nur noch 1/12...



  • Äh. Dann eben in mehreren Batches rendern? Verstehe das Problem nicht...



  • rimmon schrieb:

    hellihjb schrieb:

    nicht dreiecke sondern eckpunkte.

    Thx. Das wirds wohl sein. (sagt zumindest mein Taschenrechner ^^)

    Vielleicht hätte ich schreiben sollen, dass sich das Problem ab hier erledigt hatte^^


Anmelden zum Antworten