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
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 |
vectorAll.Insert(vectorAll.end(), vector1.begin(), vector1.end()); vectorAll.Insert(vectorAll.end(), vector2.begin(), vector2.end()); vectorAll.Insert(vectorAll.end(), vector3.begin(), vector3.end()); vectorAll.Insert(vectorAll.end(), vector4.begin(), vector4.end()); |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Schau dir mal std::vector::insert() an. Die Frage, die du dir an diesem Punkt aber unbedingt stellen solltest, ist, wieso du überhaupt meinst, tausende std::vector aneinanderhängen zu müssen!?
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Ich hoffe, du machst das einlesen nicht in jedem Frame![]()
Geometry eines jeden Blocks nicht gleich
![]() |
C-/C++-Quelltext |
1 2 |
for(Iterator i = Vector1.begin(); i != Vector1.end(); i++) VectorAll.push_back(i.Position + Vector(5, 2, 4)); |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Zitat
Nein leider nicht!
![]() |
C-/C++-Quelltext |
1 2 3 4 |
// pseudocode enum EBlocktype { eBlockTypA, eBlockTypB, eBlockTypC } blocks[10][10].type = eBlockTypA; blocks[10][10].position = Vector3(10, 70, 10); |
Das würde dann heißen, dass der Operator einen Positionsvektor zurückgibt! Wie mache ich das, dass aber dann ein Vertex eingefügt wird? Also die Position geändert, aber der Normalen- und Texturvektor bleibt bestehen. Muss ich dann einen "+=" Operator nehmen? Und wie muss der überladen werden oder mache ich das mit casten? Geht das überhaupt ohne eine "Temporäre" Variable erstellen zu müssen?Das + funktioniert nur, wenn der + operator entsprechend überschrieben wird.
Und wie mache ich das beim Rendern dann? Ich kann doch nicht für mehrere Millionen Blöcke einzeln die Blöcke rendern? Das braucht doch viel länger, als einen (oder ein paar) VertexBuffer zu rendern...Dann würde ich an deiner Stelle trotzdem nicht die einzelnen Daten für jeden einzelnen Block kopieren, sondern auch hier lässt sich Geometry Instancing anwenden![]()
Auf die Idee bin ich schon gekommenKannst du nicht Klassen für die Blöcke schreiben, die eine Methode implementieren, welche ihre Vertices relativ zu ihrer eigenen Position zurückgibt? (statisch dann, weil jede Instanz gleich)?
![]() |
C-/C++-Quelltext |
1 2 |
BlockWorld_Chunk* Chunks; Chunks = new BlockWorld_Chunk[32*32]; |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Zitat
Wie mache ich das, dass aber dann ein Vertex eingefügt wird?
![]() |
C-/C++-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
struct Vertex { float x, y, z; Vertex(float x, float y, float z) ... }; struct Vector3 { float x, y, z; Vertex operator+(const Vector3& v) { return Vertex(x + v.x, y + v.y, z + v.z); } }; |
Zitat
Und wie mache ich das beim Rendern dann? Ich kann doch nicht für mehrere Millionen Blöcke einzeln die Blöcke rendern?
Zitat
Wenn ich nun jeden Chunk im Array um eine Position in X-Richtung verschieben will
![]() |
C-/C++-Quelltext |
1 2 3 4 5 |
Vector3 relativePosition(1.0f, 0, 0); Vector3 GetGlobalChunkPosition(Chunk* pChunk) { return pChunk->position + relativePosition; } |
Werbeanzeige