Ich brauche Hilfe bei dem richtigen Algorithmus kommt eine Ecke Schwimmerpufferarray mit Daten zu füllen ...Index in Array von XYZ berechnen?
Da jeder Punkt 9 Attribute (XYZ, UV, RGBA) in meinem Setup, und ich bin Zeichnung mit Quads, jedes Gesicht hat insgesamt 36 Indizes. Ich zeichne Würfel so, dass es 6 Gesichter für insgesamt 216 (9 * 4 * 6) Indizes gibt. Anstatt nur den Puffer Iterieren es zu füllen durch:
public void AddVertex(int x, int y, int z, float u, float v, Color4 color)
{
if (vCount >= vertex_data.Length)
return;
else
{
vertex_data[vCount++] = x;
vertex_data[vCount++] = y;
vertex_data[vCount++] = z;
vertex_data[vCount++] = u;
vertex_data[vCount++] = v;
vertex_data[vCount++] = color.R;
vertex_data[vCount++] = color.G;
vertex_data[vCount++] = color.B;
vertex_data[vCount++] = color.A;
}
}
Ich mag eine direkt Offset verwenden, um die Position im Puffer Ziel auf der GPU aktualisiert werden (durch Verwendung von BufferSubData). Das Problem besteht jedoch darin, den relativen Positionswert eines Cubes (XYZ) in die Position im Pufferarray zu übertragen, damit ich seine Werte aktualisieren kann.
Dies ist, wie ich Würfel bin iteriert, und mein Versuch, die richtige Position bekommen ...
for (int x = 0; x < Chunk.DEFAULT_SIZE; x++)
{
for (int y = 0; y < Chunk.DEFAULT_SIZE; y++)
{
for (int z = 0; z < Chunk.DEFAULT_SIZE; z++)
{
<...>
offset = (x + size * (y + size * z)) * 216;
SetVertex(offset, face_i.X + absX, face_i.Y + absY, face_i.Z + -absZ, u, v, color);
//SetVertex (...) would be called 3 more times, and "offset" would be supplemented by 0,9,18, and 27 (totalling 36 indices).
<...>
}
}
}
Ich habe sogar versucht Bitverschiebung die XYZ-Werte:
int offset = 216 * (x<<10) + 216 * (y<<5) + 216*z;
dass nur gearbeitet in bestimmten Situationen. Gehe ich in die falsche Richtung oder? Das Ergebnis des obigen Codes erstellt nur die untere Fläche der Würfel, aber sie erstellt sie in allen richtigen Intervallen.
Sollte '216' in diesem Code nicht:' offset = (x + size * (y + size * z)) * 216; 'ersetzt werden durch was auch immer die aktuelle Indexzahl ist? Wenn also "x = y = z = 0" ist, sollte nicht diese "216" -Nummer "0" sein? Auch was ist mit allen Klammern in 'SetVertex (Offset, Gesicht_i.X + absX), Gesicht_i.Y + absY), Gesicht_i.Z + -absZ), u, v, Farbe);', gibt es eine öffnende und vier schließende Klammern . – Quantic
Whoops, Tippfehler, den ich vermisste, während ich ihn vereinfachte. Thx - korrigiere jetzt. –
Ja, normalerweise wäre es Offset + i. Ich bin 9 * (x <4). Frage bearbeiten, um das einzuschließen. –