So verwenden Sie eine Wavefront-Objektdatei wie hier definiert: Ссылка
wie soll ich Gesichter darstellen, die mehr als 4 Vertices in opengl haben. Ich nehme an, dass, wenn es 3 Vertices hat, ich GL_TRIANGLES verwende, wenn es 4 hat, verwende ich GL_QUADS, aber wenn es 5 oder mehr hat, was soll ich verwenden? Gibt es einen Standard? In meiner Internetsuche war ich nicht in der Lage, mit etwas zu kommen und Samples Open-Gl-Code ich habe nur Unterstützung bis zu 4 Vertices gefunden.
OBJ-Exporteure exportieren die Vertices in einer vernünftigen Reihenfolge für jedes Gesicht (gegen / im Uhrzeigersinn), und solange Ihre Gesichter koplanar und konvex sind (was sie verdammt sein sollten!) - Sie können GL_TRIANGLE_FAN verwenden.
Ich stimme Nicol Bolas 'Standpunkt nicht zu, dass Flächen immer drei Vertices haben sollten, obwohl narrensicher, wenn Ihre Polygone den obigen Regeln folgen, die Verwendung von GL_TRIANGLE_FAN
Ihren Code vereinfacht und den Systemspeicherverbrauch reduziert. Nichts wird die GPU-Seite ändern, da die Polygone sowieso in Dreiecke zerlegt werden.
Zuerst sollten Sie jedem Export-Tool mitteilen, keine Flächen mit so vielen Vertices zu exportieren. Gesichter sollten 3 Ecken haben, Punkt.
Wenn Ihr Exportwerkzeug das nicht kann, dann sollte Ihr Ladewerkzeug die Polygone in drei Scheitelflächen zerlegen. Ich bin mir ziemlich sicher, dass die Asset Importer-Bibliothek das kann.
Der Wikipedia-Eintrag auf wavefront-obj sagt, dass Flächen koplanar und konvex sein müssen, aber ich kann keine solche Deklaration in der ursprünglichen OBJ-Spezifikation finden.
Wenn das Gesicht koplanar und konvex ist, können Sie entweder GL_TRIANGLE_FAN verwenden, oder Sie können GL_TRIANGLE verwenden und den Ventilator manuell selbst auswerten. Ein Fan hat alle Dreiecke die erste Ecke teilen. So:
%Vor%Wenn das Gesicht koplanar, aber konkav ist, müssen Sie das Gesicht mit einem Algorithmus triangulieren, z. B. mit der Ear-Clipping-Methode.
Wenn das Gesicht nicht-koplanar ist, sind Sie geschraubt, weil OBJ nicht genug Informationen bewahrt, um zu wissen, welche Tesselation beabsichtigt war.