كيف يمكنك تمرير ملفات OBJ تواجه تعريفات لـ OpenGL
سؤال
لقد كتبت محمل OBJ الذي يوسع الرؤوس ، ومنسقات الملمس ، والمعايير ، يتم تخزين كل منها في عائم ، ويتم تمريرها إلى OpenGL:
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);
ومع ذلك ، فأنا مهتمة بالكيفي الذي من المفترض أن أقوم بتمرير مخزن المؤسسة الفهرس إلى gldrawelement يبدو أن الوجوه مخزنة بتنسيق مثل هذا:
f 1/2/3 4/5/6 7/8/9
مع وجود التنسيق
vertice/texture/normal
يقبل GldrawElements فهرس واحد فقط ، والذي يجب أن يشير إلى كل 3 ، ولكن عندما أنظر إلى ملف OBJ الفعلي ، لا يبدو هذا ممكنًا. كيف تمرر الفهرس لجميع 3؟
يمكنك العثور على نسخة من الرمز هنا:http://codepad.org/melc1hic
المحلول
لا يمكنك مباشرة ، فأنت بحاجة إلى القيام ببعض المعالجة المسبقة قبل تمرير البيانات إلى OpenGL ، لذلك يتم استخدام فهرس واحد فقط لكل قمة ، ويعمل هذا الفهرس أيضًا على إحداثيات الملمس ، والمعايير ، إلخ.
نصائح أخرى
لقد كتبت مكتبة صغيرة تقوم بتوصيف ملفات .OBJ ، وتتضمن عينة رمز لتقديم النموذج في OpenGL (LWJGL). نأمل أن تكون الكود لإنشاء VBOS واضحًا ومباشرًا إلى حد ما واضحة بما يكفي لإعطائك فكرة عن كيفية عمله ، أو يمكنك فقط استخدام المكتبة ، أو قصها واللصق منها. (الترخيص هو المجال العام.) ألق نظرة عليه ؛