سؤال

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

ولكن عند استخدام هذه المنظمات والشاشة يبقى الأسود. أعتقد أنني يجب أن يكون غاب عن شيء مهم.

والحرف الأول:

unsigned int bufIds[2];
glGenBuffers( 2, bufIds );
GLfloat vertices[] = {
  0.25, 0.25, 0.0,
  0.75, 0.25, 0.0,
  0.75, 0.75, 0.0,
  0.25, 0.75, 0.0
};
glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] );
glBufferData( GL_ARRAY_BUFFER, 12, vertices, GL_STATIC_DRAW );
glBindBuffer( GL_ARRAY_BUFFER, 0 );

glClearColor( 0, 0, 0, 1 );
glColor3f( 1, 1, 1 );
glOrtho( 0.0, 1.0, 0.0, 1.0, -1.0, 1.0 );

وrenderloop لVBO (لا يعمل):

glClear( GL_COLOR_BUFFER_BIT );
glEnableClientState( GL_VERTEX_ARRAY );
glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] );
glVertexPointer( 3, GL_FLOAT, 0, 0 );
glDrawArrays( GL_QUADS, 0, 12 );
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glDisableClientState( GL_VERTEX_ARRAY );

وrenderloop للصفائف قمة الرأس (العمل):

glClear( GL_COLOR_BUFFER_BIT );
glEnableClientState( GL_VERTEX_ARRAY );
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glVertexPointer( 3, GL_FLOAT, 0, vertices );
glDrawArrays( GL_QUADS, 0, 12 );
glDisableClientState( GL_VERTEX_ARRAY );
هل كانت مفيدة؟

المحلول

وأرغ أنا فقط حظيت بها من خلال محاولة قراءة مرة أخرى محتويات المخزن المؤقت:

ولست بحاجة لتخصيص المخزن المؤقت مع 12 * sizeof (GLfloat) بدلا من 12 فقط

glBufferData( GL_ARRAY_BUFFER, 12 * sizeof( GLfloat ), vertices, GL_STATIC_DRAW );

ولي قراءة مرة أخرى كود

GLfloat vertices2[12];
glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] );
glGetBufferSubData ( GL_ARRAY_BUFFER, 0, 12 * sizeof( GLfloat ), vertices2 );
glBindBuffer( GL_ARRAY_BUFFER, 0 );

for ( int i = 0; i < 4; i ++ ) {
    LOG_DEBUG << "point " << i << ": " << vertices2[ i * 3 + 0 ] << " / " << vertices2[ i * 3 + 1 ] << " / " << vertices2[ i * 3 + 2 ];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top