Frage

Wie gehen Sie über eine Kugel mit Maschen in Direct-X zu schaffen? Ich bin mit C ++ und das Programm wird unter Windows ausgeführt wird, nur.

Alles zur Zeit durch ein IDiRECT3DDEVICE9 Objekt gerendert wird.

War es hilfreich?

Lösung

Sie können die D3DXCreateSphere Funktion.

Andere Tipps

Es gibt viele Möglichkeiten, um eine Kugel zu schaffen.

Eine ist Polarkoordinaten zu verwenden Scheiben der Kugel zu erzeugen.

struct Vertex
{
    float x, y, z;
    float nx, ny, nz;
};

Da struct Sie die Kugel erzeugen würde wie folgt (habe ich nicht getestet dies so kann ich etwas falsch verstanden).

std::vector< Vertex > verts;
int count   = 0;
while( count < numSlices )
{
    const float phi = M_PI / numSlices;
    int count2  = 0;
    while( count2 < numSegments )
    {
        const float theta   =  M_2PI / numSegments
        const float xzRadius = fabsf( sphereRadius * cosf( phi ) );

        Vertex v;
        v.x = xzRadius * cosf( theta );
        v.y = sphereRadius * sinf( phi );
        v.z = xzRadius * sinf( theta );

        const float fRcpLen = 1.0f / sqrtf( (v.x * v.x) + (v.y * v.y) + (v.z * v.z) );
        v.nx    = v.x * fRcpLen;
        v.ny    = v.y * fRcpLen;
        v.nz    = v.z * fRcpLen;

            verts.push_back( v );
        count2++;
    }
    count++;
}

Dies ist, wie D3DXCreateSphere tut es ich glaube. Natürlich oben wird der Code nicht die Gesichter bilden, aber das ist nicht ein besonders komplexes Stück Code, wenn Sie Ihren Verstand zu ihm gesetzt:)

Die andere und interessanter meiner Meinung nach, Art und Weise ist durch Oberflächenunterteilung.

Wenn Sie mit einem Würfel beginnen, die Normalen definiert die gleiche Art und Weise wie der obige Code hat man rekursiv jede Seite unterteilen können. Grundsätzlich Sie die Mitte des Gesichts finden. Generieren Sie einen Vektor von der Mitte zu dem neuen Punkt. Normalisieren es. Drücken Sie den vert dem Radius der Kugel wie folgt (* Unter der Annahme v.n die normalisierte normal):

v.x = v.nx * sphereRadius;
v.y = v.ny * sphereRadius;
v.z = v.nz * sphereRadius;

Sie dann wiederholen Sie diesen Vorgang für den Mittelpunkt jeder Kante des Gesichts Sie sind unterteilt.

Jetzt können Sie jedes Gesicht in 4 neue Gesichter Viereck geteilt. Sie können dann jede dieser Quads in 4 neue Quads unterteilen und so weiter, bis Sie zur Verfeinerung Ebene erhalten Sie benötigen.

Ich persönlich finde dieses Verfahren eine schönere Vertex Verteilung auf der Kugel als das erste Verfahren zur Verfügung stellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top