سؤال

وحتى الآن ولقد استخدمت فقط glDrawArrays وترغب في الانتقال الى استخدام مؤشر عازلة ومثلثات المفهرسة. أنا رسم كائن معقد إلى حد ما مع احداثيات الملمس، والأوضاع الطبيعية واحداثيات قمة الرأس. يتم جمع كل هذه البيانات في المخزن مؤقت قمة معشق واحد وتعادل باستخدام دعوات مماثلة ل(على افتراض ويتم كل سيرب بشكل صحيح):

glVertexPointer( 3, GL_FLOAT, 22, (char*)m_vertexData );
glNormalPointer( GL_SHORT, 22, (char*)m_vertexData+(12) );
glTexCoordPointer( 2, GL_SHORT, 22, (char*)m_vertexData+(18) );
glDrawElements(GL_TRIANGLES, m_numTriangles, GL_UNSIGNED_SHORT, m_indexData );

هل هذا يسمح للm_indexData إلى أيضا معشق مع مؤشرات بلدي الأوضاع الطبيعية واحداثيات الملمس فضلا عن مجموعة قياسية مؤشر الموقف؟ أو أنها لا تتحمل قائمة خطية واحدة من inidices التي تنطبق على شكل قمة الرأس بأكمله (POS، NOR، TEX)؟ إذا كان هذا الأخير هو الصحيح، كيف ممكن لتقديم نفس قمة مع احداثيات الملمس مختلفة أو الأوضاع الطبيعية؟

وأعتقد كما يمكن إعادة صياغة هذا السؤال إلى: إذا كان لي 3 قوائم منفصلة فهرستها (POS، NOR، TEX) حيث هذا الأخير 2 لا يمكن إعادة ترتيب لتقاسم نفس قائمة مؤشر كأول، ما هو أفضل وسيلة ل جعل ذلك.

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

المحلول

وأنت لا يمكن أن يكون الفهارس المختلفة للقوائم مختلفة. عند تحديد glArrayElement(3) ثم برنامج OpenGL هو ذاهب الى اتخاذ عنصر 3RD من كل قائمة.
ما يمكنك القيام به هو اللعب مع مؤشر تحدده منذ أساسا مكان في القائمة التي يتم الوصول إليها في نهاية المطاف هو مؤشر تعويض من بداية القائمة بالإضافة إلى مؤشر تحدده. وهذا مفيد إذا كان لديك ثابت تعويض بين القوائم. إذا كانت القوائم فقط التقليب عشوائي ثم هذا النوع من اللعب في كل قمة من المحتمل ان تكون costy مجرد استخدام سهل القديمة glVertex3fv()، glNormal3fv() وglTexCoord3fv()

نصائح أخرى

وأواجه مشكلة مماثلة محاولة فعل الشيء نفسه في Direct3D 9.0

لبلدي تنفيذ برنامج OpenGL 3 كان من السهل إلى حد ما، وبلدي شفرة المصدر على شبكة الإنترنت إذا كان قد تساعدك على أي ... https://github.com/RobertBColton /enigma-dev/blob/master/ENIGMAsystem/SHELL/Graphics_Systems/OpenGL3/GL3model.cpp

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