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.
2^N
, misal2, 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.2016GLKTextureLoader
untuk menghindari penerapan-setupTexture:
sendiri. - person Tommy   schedule 17.03.2016