Добавление текстуры к визуализируемым объектам приводит к тому, что объект становится полностью черным, OpenGL ES 2.0

Я пытаюсь добавить текстуру к квадрату, используя openGL ES 2.0 в Xcode, и я создал квадрат, создав два треугольника. Когда я запускаю проект, квадрат становится черным. Я считаю, что это как-то связано с тем, что я добавил неправильные координаты для текстуры.

Структура, в которой хранятся все данные

typedef struct {
float Position[3];
float Color[4];
float TexCoord[2];
} Vertex;

Координаты положения, цвета и текстуры

const Vertex Vertices[] = {

//postion    color         Texture
{{1, -1, 0}, {1, 0, 0, 1}, {1, 0}},
{{1, 1, 0}, {0, 1, 0, 1}, {1, 1}},
{{-1, 1, 0}, {0, 0, 1, 1}, {0, 1}},
{{-1, -1, 0}, {0, 0, 0, 1}, {0, 0}}
};

Координаты двух треугольников, созданных

const GLubyte Indices[] = {
0, 1, 2,
2, 3, 0
};

Настройка текстуры

   - (GLuint)setupTexture:(NSString *)fileName {
   // 1
   CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage;
   if (!spriteImage) {
       NSLog(@"Failed to load image %@", fileName);
       exit(1);
   }

   // 2
   size_t width = CGImageGetWidth(spriteImage);
   size_t height = CGImageGetHeight(spriteImage);

   GLubyte * spriteData = (GLubyte *) calloc(width*height*4,  sizeof(GLubyte));

   CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width*4,
                                   CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast);

   // 3
   CGContextDrawImage(spriteContext, CGRectMake(0, 0, width, height), spriteImage);

   CGContextRelease(spriteContext);

   // 4
   GLuint texName;
   glGenTextures(1, &texName);
   glBindTexture(GL_TEXTURE_2D, texName);

   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);

   free(spriteData);        
   return texName;    
}

Вместо использования: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

Я использовал: glTexParameteri(GL_TEXTURE_BINDING_2D, GL_TEXTURE_WRAP_S, GL_NEAREST);

Но все равно не повезло.


person Harshil.Chokshi    schedule 09.03.2016    source источник
comment
Покажите код загрузки текстуры вместе с вашей текстурой. Вероятно, это проблема со степенью двойки, как показано в этом вопросе.   -  person Hamish    schedule 09.03.2016
comment
Хорошо добавляю код загрузки текстуры   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Я не могу найти ничего о размере текстуры. Я следую учебнику. Вот ссылка, raywenderlich .com/4404/   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Это файл png размером 520 X 346. Как я могу проверить, является ли это степенью двойки или нет   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Так что это не степень двойки (ширина и высота не равны 2^N, например 2, 4, 8, 16, 32, 64, 128...). Поэтому вы хотите добавить параметры, показанные в вопросе, на который я ссылался в своем первоначальном комментарии. Это решит проблему.   -  person Hamish    schedule 09.03.2016
comment
Я заменил параметры, но все равно не повезло, я покажу в своем вопросе   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Вам необходимо использовать все 4 показанных параметра.   -  person Hamish    schedule 09.03.2016
comment
Спасибо originaluser это сработало. Можете ли вы опубликовать как ответ, чтобы я мог принять   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Это не мой ответ! Поскольку это была проблема, не связанная со степенью двойки, этот вопрос теперь фактически является дубликатом. Публикация повторяющегося ответа не будет полезна для сообщества.   -  person Hamish    schedule 09.03.2016
comment
Несвязанный совет, ответ на вопрос: проверьте GLKTextureLoader, чтобы не реализовывать -setupTexture: самостоятельно.   -  person Tommy    schedule 17.03.2016