indices auf nodes aufteilen
-
hi!
Da ich mein Problem mit dem Frustum jetzt gelöst habe, habe ich den nächsten Schritt in Richtung Octree gemacht. Ich kann jetzt Objekt, wie zum Beispiele Sprites oder Models mit Nodes verknüpfen und durch diese dann rendern. Soweit so gut.
Aber ein Terrain ist ja großer als ein einzelnes Node, also hab ich mir gedacht dass ich jedem Node eine Anzahl an Indices verpasse um das Terrain zu rendern (Ich realisiere das Rendern der Terrain durch Vertexarrays -> OPENGL). Aber wie kann ich den Nodes jetzt die richtigen Indices zum rendern geben.
Hier mal ein bisschen Source Code:void COctree::AddObject (CMeshObject *Object, int depth) { //Wenn das Objekt ein Terrain ist müssen die Indices richtig aufgeteilt werden if(Object->getType() == TERRAIN) { Log->Output ("OBJEKT IST EIN TERRAIN<br>"); --depth; if(depth <= 0) { //HIER IST MEIN PROBLEM! Wie gekomme ich die richten Indices aus Object.indices raus? Wenn ich schreibe: indices (die indices aus dem octree) = Object.indices; werden ja ALLE indices mit dem Node verknüft, ich will aber nur die, die für die Dreiecke zuständig sind, die im aktuellen Node liegen . . . } else { } } else if(Object->getType() == SKYBOX) { //Skybox wird immer gerendert (mit Root Node verbunden) Log->Output ("OBJEKT IST EINE SKYBOX<br>"); Objectlist.push_back (Object); } else { //Wenn Object ein normales Objekt ist wird getestet in welchem Node es liegt und mit diesem verknüpft --depth; if(depth <= 0) { Objectlist.push_back (Object); } else { for(int idx=0; idx < 8; ++idx) { if(SphereHitsSphere(Object->vCenter,Object->BoundingSphere->Radius, Nodes[idx].BBox.vPos, Nodes[idx].BBox.Width)) { Log->Output ("OBJEKT in NODE[%i]",idx); Nodes[idx].AddObject (Object, depth); return; } } } } }
danke im vorraus!!
stefan
-
Hi !
Du solltest dein Terrain in Form eines Baumes speichern, so kannst du auch große Teile des Terrains direkt verwerfen
-
und wie soll ich das machen? kannst du das bitte genauer erklären