سؤال

لقد كتبت محمل 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 واضحًا ومباشرًا إلى حد ما واضحة بما يكفي لإعطائك فكرة عن كيفية عمله ، أو يمكنك فقط استخدام المكتبة ، أو قصها واللصق منها. (الترخيص هو المجال العام.) ألق نظرة عليه ؛

http://darksleep.com/OOBJLOADER/

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