Проблемы с glDrawTex_OES - PullRequest
1 голос
/ 06 июля 2010

Я не уверен, что правильно использую glDrawTex_OES.На самом деле, я уверен, что не потому, что получаю черный прямоугольник на экране, а не предполагаемую текстуру.

Чтобы убрать глупые точки с пути: Да, строка GL Extensionсодержит токен OES_draw_textureДа, текстура загружается в память / и т.д.правильно: он отображается очень хорошо, если я сопоставляю его с многоугольником.

Из прочтения различных битов документации я могу найти для него, похоже, мне нужно "настроить [e]прямоугольник обрезки текстуры ... через TexParameteriv () с pname равным TEXTURE_CROP_RECT_OES ".Согласно этому посту на форумах khronos (лучшую документацию для меня может найти google), значения для этого являются "Ucr, Vcr, Wcr, Hcr. То есть left / bottom / width / height"

Вот код рендеринга:

void SetUpCamera( int windowWidth, int windowHeight, bool ortho ) // only called once
{
  glViewport( 0, 0, windowWidth, windowHeight );
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();

  if( ortho )
  {
    float aspect = (float)windowWidth / (float)windowHeight;
    float halfHeight = 32;
    glOrthof( -halfHeight*aspect, halfHeight*aspect, -halfHeight, halfHeight, 1.0f, 100.0f );
  }
  else
  {
    mygluPerspective( 45.0f, (float)windowWidth / (float)windowHeight, 1.0f, 100.0f ); // I don't _actually_ have glu, but that's irrelevant--this does what you'd expect.
  }
}

void DrawTexture( int windowWidth, int windowHeight, int texID )
{
  // Clear back/depth buffer
  glClearColor( 1, 1, 1, 1 );
  glClearDepth( 1.0f );
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

  // Next 2 lines probably not necessary, but, you know, sanity check:
  glMatrixMode( GL_MODELVIEW );
  glLoadIdentity();

  // set up texture
  glBindTexture( GL_TEXTURE_2D, texID ); // texID is the glGenTexture result for a 64x64 2D RGB_8 texture - nothing crazy.
  GLint coords [] = {0, 0, 64, 64};
  glTexParameteriv( GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, coords );

  // blit? =(
  glDrawTexiOES( windowWidth / 2 - 32, windowHeight - 70, 10, 64, 64 );
}

Я что-то упускаю из виду?Делать что-нибудь просто глупо?

1 Ответ

2 голосов
/ 06 июля 2010

Очевидно, проблема в том, что вы (или я, в зависимости от обстоятельств) не вызываете glColor () со всеми полноцветными каналами в первую очередь.Это похоже на ошибку в реализации, с которой я работаю (Android, NDK), так как цвет по умолчанию должен быть (1, 1, 1, 1).Тем не менее, вызова glColor4f (1, 1, 1, 1) достаточно для исправления ситуации.

(у меня нет других вызовов glColor в моей программе. Не уверен, что есть какой-либо другой способ обновить текущий цвет, нотекстуры отображаются правильно, используя цвет по умолчанию и рисуя их с помощью glEnableClientState (GL_TEXTURE_COORD_ARRAY) / glDrawArrays ())

...