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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
struct BlockVertex { tbVector3 Position; tbVector3 Normal; tbVector2 Texture; static const DWORD VF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1; }; for(Iterator i = Vector1.begin(); i != Vector1.end(); i++) { BlockVertex tempVertex = i; tempVertex.Position += tbVector3(5, 2, 6); VectorAll.push_back(tempVertex ); } |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Zitat
Wie kann ich dass jetzt kürzer machen? Ohne den Umweg über "tempVertex".
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
struct BlockVertex { ... BlockVertex(const tbVector3& pos, const tbVector3& norm, const tbVector2& tex) : Position(pos), Normal(norm), Texture(tex) { } }; for (auto blockVertexIt = Vector1.begin(); blockVertexIt != Vector1.end(); ++blockVertexIt) { VectorAll.push_back(BlockVertex(blockVertexIt->Position + tbVector3(5, 2, 6), blockVertexIt->Normal, blockVertexIt->Texture)); } |
Nein. Verstehe ich nicht. Warum musst du das Array modifizieren? Reicht es nicht zu, wenn du darauf zugreifst und dabei prüfst, ob die Chunks in der Reichweite sind?Zitat
und die alten, die weiter entfernt sind fallen quasi aus dem Array raus. Verstehst du?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void GetVisibleChunks(Chunk** pOut, const tbVector3& pos) { pOut = new Chunk[MAX_CHUNKS_VISIBLE]; unsigned int nChunksAdded = 0; for (int iChunk = 0; iChunk < nChunks; ++iChunk) { if (allChunks[i].IsVisible(pos)) pOut[(++nChunksAdded) - 1] = &allChunks[i]; if (nChunksAdded == MAX_CHUNKS_VISIBLE) break; } } if (Camera.PosChangedDuringThisFrame()) GetVisibleChunks(&gameInstance.pVisibleChunks, Camera.GetPosition()); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »iSmokiieZz« (08.05.2014, 20:22)
Wie kann ich dass jetzt kürzer machen? Ohne den Umweg über "tempVertex".
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Steef« (08.05.2014, 17:58)
Würde es was bringen, wenn ich dem BlockVertex einen "+=" Operator hinzufügen würde, der dann zu einem Vertex eine Position addiert und einen Vertex returnt? Oder ist das nicht schneller?sehr viel bringt das aber auch nicht mehr..
Ich würde sagen nein, weil die Welt ja eine OpenWorldMap ist und deshalb unendlich groß sein kann. Ich würde da lieber dynamisch Chunks zuladen und wieder löschen. Und das, indem sie in einem Array "verschoben" werden, damit ich leichter benachbarte Chunks rausfinden kann. Gibts da 'ne Möglichkeit mit den Adressen?Reicht es nicht zu, wenn du darauf zugreifst und dabei prüfst, ob die Chunks in der Reichweite sind?
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
for(Iterator i = Vector1.begin(); i != Vector1.end(); i++) { BlockVertex tempVertex = i; tempVertex.Position += tbVector3(5, 2, 6); VectorAll.push_back(tempVertex ); } |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <algorithm> // ... size_t size_v_all = VectorAll.size(); VectorAll.resize(size_v_all + Vector1.size()); std::transform(Vector1.begin(), Vector1.end(), VectorAll.begin() + size_v_all, [] (BlockVertex v) -> BlockVertex { v.Position += tbVector3(5, 2, 6); return v; } ); |
Zitat
Ich würde da lieber dynamisch Chunks zuladen und wieder löschen. Und das, indem sie in einem Array "verschoben" werden, damit ich leichter benachbarte Chunks rausfinden kann. Gibts da 'ne Möglichkeit mit den Adressen?
Ohne irgendetwas im Speicher zu bewegen wird schlecht gehen.
C-/C++-Quelltext |
|
1 |
vector<BlockWorld_Block**> Blöcke; |
[] (BlockVertex v) -> BlockVertex
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Zitat von »CeDoMain«
Kann ich nicht so ein Array machen:
Zitat
Was bedeutet diese Zeile?
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Werbeanzeige