سؤال

كيف يمكنك الذهاب حول إنشاء كرة مع الشبكات في Direct-X؟ أنا أستخدم C ++ وسيتم تشغيل البرنامج على Windows فقط.

كل شيء يتم عرضه حاليا من خلال كائن IDirect3device9.

هل كانت مفيدة؟

المحلول

يمكنك استخدام D3DXCreateSphere وظيفة.

نصائح أخرى

هناك الكثير من الطرق لإنشاء كرة.

واحد هو استخدام الإحداثيات القطبية لتوليد شرائح المجال.

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

بالنظر إلى أن الهيكل الذي تولد فيه المجال كما يلي (لم أختبر ذلك، فقد أحصل على خطأ قليلا).

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++;
}

هذه هي الطريقة التي يعتقد بها d3dxcreatesphere. بالطبع لا يشكل التعليمات البرمجية أعلاه الوجوه ولكن هذا ليس قليلا معقدة من التعليمات البرمجية إذا قمت بتعيين عقلك على ذلك :)

الآخر، وأكثر إثارة للاهتمام في رأيي، طريقة من خلال التقسيم الفرعي السطحي.

إذا بدأت مع مكعب يحتوي على حالات طبيعية محددة بنفس طريقة الكود أعلاه يمكنك تقسيم كل جانب. في الأساس تجد مركز الوجه. توليد متجه من المركز إلى النقطة الجديدة. تطبيعه. ادفع Vert إلى دائرة نصف قطرها على النحو التالي (افتراض VN * هو طبيعي طبيعي):

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

ثم كررت هذه العملية لنقطة منتصف كل حافة من الوجه الذي تقسمه.

الآن يمكنك تقسيم كل وجه إلى 4 وجوه رباعية جديدة. يمكنك بعد ذلك تقسيم كل من تلك الكواد إلى 4 كواد جديدة وما إلى ذلك حتى تصل إلى مستوى التنقيح الذي تحتاجه.

أنا شخصيا أجد هذه العملية توفر توزيع رأس قمة النزيع على الكرة من الطريقة الأولى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top