سؤال

أقوم بخطواتي الأولى مع OpenGL ES 2.0 أجرب الأشياء على جهاز iPod touch الخاص بي. كنت أتساءل عن كيفية حل هذه القضية الإحداثيات ..

لشرح أفضل ، كنت أحاول رسم رباعي وتدويره/ترجمته باستخدام تظليل قمة الرأس (أيضًا لأنه من ما قرأته يبدو أن الطريقة الوحيدة للقيام بذلك).

بما أنني أعمل مع جهاز iPod لدي 1.5 : 1 نسبة ومنفذ العرض بواسطة

glViewport(0, 0, backingWidth, backingHeight);

لذا 0,0 هل يجب أن يكون المركز وحدود القطع في -1.0, -1.0, -1.0, 1.0, ، إلخ (أليس كذلك؟)

لرسم مربع ، اضطررت إلى استخدام قيم مختلفة لإحداثيات X و Y بسبب نسبة العرض إلى الارتفاع:

static const GLfloat lineV[] = {
        -0.5f, 0.33f,  0.5f, 0.33f,
         0.5f, 0.33f,  0.5f,-0.33f, 
         0.5f,-0.33f, -0.5f,-0.33f,
        -0.5f,-0.33f, -0.5f, 0.33f,
        -0.5f, 0.33f,  0.5f,-0.33f,
         0.5f, 0.33f, -0.5f,-0.33f,
    };

إنه مربع مع كل من الأقطار (أعرف أن استخدام الفهارس سيكون أكثر كفاءة ولكن هذه ليست النقطة) ..

ثم حاولت كتابة تظليل قمة لتدوير الكائن أثناء تحريكه:

void main()
{
    m = mat4( cos(rotation), sin(rotation), 0.0, 0.0,
             -sin(rotation), cos(rotation), 0.0, 0.0,
                        0.0,           0.0, 1.0, 0.0,
                        0.0,           0.0, 0.0, 1.0);

    m2 = mat4(1.0);
    m2[1][3] = sin(rotation)*0.8;
    gl_Position = position*(m*m2);
}

إنه يعمل ولكن نظرًا لأن الإحداثيات ليست هي نفسها ، فسيتم تشويه الرباعية أثناء تدويرها. كيف يمكنني منع ذلك؟ اعتقدت أنه إذا كان من الممكن تغيير عرض الرؤية للحصول على حدود مختلفة (وليس -1.0 إلى 1.0 على كلا المحورين بحيث يؤدي التوسيع على المحور ص إلى إصلاح المشكلة).

بالإضافة إلى ذلك ، هل هناك طريقة أفضل لاستخدام المصفوفات؟ أعني ، كنت معتادًا على الاستخدام glRotatef دون الحاجة إلى تحديد المصفوفة بأكملها .. هل توجد وظائف/منشئي الراحة لإنجاز هذه المهمة؟

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

المحلول 2

لا يتم توفير وظائف الوفرة أو الدعم مما رأيته. في الأساس ، قمت بحلها باستخدام إحداثيات متساوية عند إنشاء رؤوس واستخدام تظليل قمة الرأس لتوسيع نطاق محور Y بواسطة نسبة العرض إلى الارتفاع الصحيح.

نصائح أخرى

الحجج الأولى ل glViewport() ليس المركز ، إنه إحداثيات الزاوية اليسرى السفلية.

ربما يجب عليك إعداد إسقاط يأخذ جانبك في الاعتبار ، وعادة ما تستخدم اللمعان () (إذا كان GLU متاحًا في ES).

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