การเพิ่มพื้นผิวให้กับวัตถุที่เรนเดอร์ส่งผลให้วัตถุนั้นเป็นสีดำทั้งหมด 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
ขอบคุณผู้ใช้ดั้งเดิมมันใช้งานได้ คุณช่วยโพสต์เป็นคำตอบให้ฉันยอมรับได้ไหม   -  person Harshil.Chokshi    schedule 09.03.2016
comment
มันไม่ใช่คำตอบของฉัน! เนื่องจากไม่ใช่ประเด็นสำคัญของสองประเด็น คำถามนี้จึงซ้ำกันอย่างมีประสิทธิภาพ การโพสต์คำตอบซ้ำจะไม่เป็นประโยชน์สำหรับชุมชน   -  person Hamish    schedule 09.03.2016
comment
เคล็ดลับที่ไม่เกี่ยวข้อง คำถามที่ได้รับคำตอบ: ลองดู GLKTextureLoader เพื่อหลีกเลี่ยงการติดตั้ง -setupTexture: ด้วยตัวคุณเอง   -  person Tommy    schedule 17.03.2016