Menambahkan tekstur pada objek yang dirender menyebabkan objek menjadi hitam seluruhnya, OpenGL ES 2.0

Saya mencoba menambahkan tekstur ke persegi menggunakan openGL ES 2.0 di Xcode, dan saya membuat persegi dengan membuat dua segitiga. Ketika saya menjalankan proyek, kotaknya berubah menjadi hitam. Saya yakin ini ada hubungannya dengan saya menambahkan koordinat yang salah untuk teksturnya.

Struktur yang menampung semua data

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

Koordinat posisi, warna, dan tekstur

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}}
};

Koordinat kedua segitiga yang dibuat

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

Menyiapkan tekstur

   - (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;    
}

Daripada menggunakan: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

Saya menggunakan: glTexParameteri(GL_TEXTURE_BINDING_2D, GL_TEXTURE_WRAP_S, GL_NEAREST);

Tapi masih belum beruntung.


person Harshil.Chokshi    schedule 09.03.2016    source sumber
comment
Tunjukkan kode pemuatan tekstur Anda bersama dengan tekstur Anda. Ini mungkin masalah kekuatan dua, seperti yang ditunjukkan dalam pertanyaan ini.   -  person Hamish    schedule 09.03.2016
comment
Oke menambahkan kode pemuatan tekstur   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Saya tidak dapat menemukan apa pun mengenai ukuran tekstur. Saya mengikuti tutorial. Ini linknya, raywenderlich .com/4404/   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Ini adalah file png 520 X 346. Bagaimana cara memeriksa apakah itu pangkat dua atau tidak   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Jadi bukan pangkat dua (lebar dan tinggi bukan 2^N, misal 2, 4, 8, 16, 32, 64, 128...). Oleh karena itu Anda ingin menambahkan parameter yang ditunjukkan dalam pertanyaan yang saya tautkan di komentar asli saya. Itu akan menyelesaikan masalahnya.   -  person Hamish    schedule 09.03.2016
comment
Saya mengganti parameternya tetapi masih belum berhasil, saya akan tunjukkan di pertanyaan saya   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Anda harus menggunakan keempat parameter yang ditampilkan.   -  person Hamish    schedule 09.03.2016
comment
Terima kasih pengguna asli, ini berhasil. Bisakah Anda memposting sebagai jawaban sehingga saya dapat menerimanya   -  person Harshil.Chokshi    schedule 09.03.2016
comment
Itu bukan jawabanku! Karena ini adalah masalah non-kekuatan dua, pertanyaan ini sekarang secara efektif merupakan duplikat. Memposting jawaban duplikat tidak akan bermanfaat bagi komunitas.   -  person Hamish    schedule 09.03.2016
comment
Tip yang tidak terkait, pertanyaannya terjawab: lihat GLKTextureLoader untuk menghindari penerapan -setupTexture: sendiri.   -  person Tommy    schedule 17.03.2016