JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=cd77ac1c6c9a9871896e2b584417ec71Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

DrawPrimitiveUP()

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 12.12.2003, 12:40    Titel: DrawPrimitiveUP() Antworten mit Zitat

jetzt hab ich es endlich geschafft ein x file zu parsen und in eine verwendbare form zu bringen, und jetzt scheiterts an der darstellung...
mal vorweg: kann man bei der funktion irgendeinen memory pointer nehmen, oder muß der auf ein array zeigen? also kann ich meine vertizen auch in einer list speichern?
mein problem: ich hab mehrere strukturen, die miteinander durch lists verkettet sind, als da wären: Sector->Subset->Faces->Vertex. Letztendlich hab ich jetzt eine liste von sektoren, welche eine liste an subsets enthalten, usw. Vertex beinhaltet dann eben die daten des FVF.
Wie verwende ich jetzt DrawPrimitiveUP()? Momentan sieht es so aus:
Code:

   for (int i=0; i<m_vSectors.capacity(); i++)
   {
      for (int j=0; j<m_vSectors[i].vMaterialSets.capacity(); j++)
      {
         m_lpDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, m_vSectors[i].vMaterialSets[j].lNumFaces,
                                       &m_vSectors[i].vMaterialSets[j].vFaces, sizeof(Portal_Vertex)); 
      }
   }

je nachdem was man als 3. Parameter ausprobiert wird irgendein polygonhaufen gerendert, also daten sind da, stimmen tun sie (ziemlich sicher) auch, ist sicher nur eine frage des richtigen offsets...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 12.12.2003, 13:24    Titel: Antworten mit Zitat

Die Vertexdaten müssen alle in einem klaren Array sein also nicht in verschiedene strukturen wie bei dir.

so:
vertex[vertexzahl]

nicht so:
face1[vertexzahl1]
...

und von der DrawPrimitiveUP() Funktion würde ich dir abraten die ist sehr langsam.

Am besten nutzt du die Funktion DrawIndexedPrimitive, das ist die schnellste Funktion von allen und du kannst die Reihenfolge der zu rendernden Vertexe bestimmen. Dazu musst du aber Vertexbuffer und Indexbuffer erstellen, was nicht alzu schwer ist wenn man es einmal hat.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 12.12.2003, 16:10    Titel: Antworten mit Zitat

das heißt sowas geht definitiv nicht?

struct Vertex
{
Pos;
Norm;
u, v;
}
struct Face
{
vector<Vertex> VertexList;
}

DrawPrimitiveUP(..., &Face.VertexList, ...);

Ich dachte, dass man das mit dem 4 parameter vielleicht hinbiegen könnte...

was ist damit?
.
.
.
struct Face
{
Vertex* VertexList;
}
vector<Face> FaceList;

FaceList[i].VertexList = new Vertex[x];
DrawPrimitiveUP(....., &FaceList[i].VertexList, ...);

Das ganze soll ja mal der editor, bzw. das format für eine portal engine werden...die ansätze die ich mir bisher angesehen habe, arbeiten fast immer über den systemspeicher...ist glaub ich vor allem bei einem editor recht sinnvoll, da sehr oft die vertexdaten verändert werden (zuviele locks). Vertex & Indexbuffer werd ich mir dann noch mal für die (nicht editor-) engine überlegen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 12.12.2003, 16:18    Titel: Antworten mit Zitat

Diese STL Vectoren müssten ziemliche Probleme erzeugen.

Und das was du da vorschlägst. LASS ES

Die Leistung geht bei komplexeren Gebilden absolut unter. Aus diesen Gründen:

·DrawPrimitiveUP das teil ist laaaannngggsssaaammm

·Wenn das mit den Vectoren gehen sollte (was ich nicht glaube) dann müssten die einzelnen Werte extre gecastet werden und die indizierung [i] verlangsamt das auch (ich habs selber auch so Wink )

·Da du für jedes Face (2 Polygone) die Funktion aufrufst. Muss der Rechner die Polygone einzeln zuschneiden anstatt alle zusammen. Und das, kostet EXTREM viel Leistung.

Dann solltest du UNBEDINGT Vertexbuffer und Indexbuffer verwenden. Das locken und Unlocken wird bei dir im Editor ja nicht zu extrem oft auftreten. Daher sollte es da keinen grossen Leistungseinbruch geben.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 13.12.2003, 20:33    Titel: Antworten mit Zitat

ok, ok, da du mir bis jetzt immer nur gute ratschläge gegeben hast, werd ich alles in einen VB packen. weiß das sehr zu schätzen...du hast mir jetzt schon öfters sehr geholfen.
noch ein paar dinge:

sinn hinter einer portal-engine ist es ja, so gut wie nie komplexere objekte zu rendern. man zerteilt das level in konvexe sektoren, checkt dann die portale gegen das frustum und zeichnet die zum portal gehörenden sektoren. da man die ganzen polys aber auch fürs kollisionschecking braucht, sollte man glaub ich auf jeden fall eine kopie im systemspeicher halten.

es geht schon auch mit vektoren...ich kann ja das erste poly in meinem vektor ohne probleme zeichen, nur passt dann halt der offset zum nächsten nicht. das geht sicher mit dem 4. parameter, man muß nur irgendwie zu sizeof(Vertex) noch die größe hinzuaddieren, die verbraucht wird weil das noch woanders drin ist....oder so...

ich wollte die funktion nicht für je 2 polys aufrufen...ich wollte auf einen schlag eine liste von faces (bei mir polys, mit je 3 verticen) zeichen, die in einem sektor einem bestimmten 'MaterialSubset' (selbes mat./tex.) angehören.

ich werds jetzt irgendwie so machen, dass ich alle verticen eines levels in einem VB habe und in den subsets in den sektoren jeweils einen IB. im systemspeicher noch eine kopie die für alle berechnungen und verändererungen verwendet wird und ggfs. den VB aktualisiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum