Tôi là người mới và cố gắng hiển thị hình ảnh trên màn hình iPhone bằng cách sử dụng OpenGL ES. Tôi biết nó đơn giản hơn và dễ dàng hơn để làm điều đó với cocos2d nhưng bây giờ tôi đang cố gắng để mã trực tiếp trên OpenGL. Có cách nào đơn giản nhưng hiệu quả để tải và hiển thị các sprites trong OpenGL ES không. Những gì tôi đã tìm thấy cho đến bây giờ là phức tạp hơn nhiều. :(Cách tải và hiển thị hình ảnh trong OpenGL ES cho iphone
Trả lời
Dưới đây là một số mã để tải một png từ ABC: Cái.
UIImage* image = [UIImage imageNamed:@"PictureName.png"];
GLubyte* imageData = malloc(image.size.width * image.size.height * 4);
CGContextRef imageContext = CGBitmapContextCreate(imageData, image.size.width, image.size.height, 8, image.size.width * 4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(imageContext, CGRectMake(0.0, 0.0, image.size.width, image.size.height), image.CGImage);
CGContextRelease(imageContext);
Dưới đây là một số mã để tạo ra một kết cấu với dữ liệu hình ảnh
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.size.width, image.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Và một ví dụ về làm thế nào để hiển thị điều này:
glBindTexture(GL_TEXTURE_2D, texture);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
Ở đây bạn cần tìm giá trị của đỉnh, normals và textureCoords phù hợp với bạn r nhu cầu.
Cập nhật 1
Hãy nhớ để thiết lập các trạng thái đúng như thế này:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
Nếu bạn sử dụng glOrthof
(Xem bên dưới) để thiết lập một chiếu 2D trong ứng dụng, bạn có thể sử dụng các giá trị :
GLfloat vertices[] = {
-1.0, 1.0,
1.0, 1.0,
-1.0, -1.0,
1.0, -1.0, };
GLfloat normals[] = {
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0 };
GLfloat textureCoords[] = {
0.0, 0.0,
1.0, 0.0,
0.0, 1.0,
1.0, 1.0 };
cập nhật 2
Đây là cách tôi ngồi chế độ chiếu khi sử dụng đoạn mã trên để render sprites:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-5.0, 5.0, -7.5, 7.5, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Và đây là làm thế nào tôi thiết lập chức năng pha trộn của tôi. Điều này cho phép tính minh bạch trong các tệp png:
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Tôi khuyên bạn nên xem ứng dụng ví dụ mẫu GLSprite của Apple. Đó chính xác là những gì ứng dụng này làm.
Nếu bạn muốn tải kết cấu được nén PVRTC, hãy xem ví dụ PVRTextureLoader của chúng. Tôi sử dụng mã từ điều này trong một số sample application Tôi đã viết cho lớp iPhone của mình.
- 1. Hiển thị OpenGL ES 2d thành hình ảnh
- 2. OpenGL ES cho Iphone
- 3. iPhone OpenGL ES - Cách chọn
- 4. Cách hiển thị bàn phím iPhone/iPad trên toàn màn hình Ứng dụng OpenGL ES
- 5. Làm cho OpenGL ES 2.0 thành hình ảnh
- 6. Hình ảnh và mặt nạ trong OpenGL ES 2.0
- 7. Kết hợp các khối hoạt ảnh UIView và hiển thị OpenGL ES
- 8. Có hướng dẫn tải mô hình 3D trong OpenGL ES trên iPhone không?
- 9. OpenGl ES trên Iphone - Hiển thị và xoay đối tượng 3D
- 10. Hiển thị OpenGL ES theo yêu cầu sử dụng GLKit
- 11. Cách tải họa tiết trong OpenGL ES hiệu quả
- 12. Kết cấu toàn màn hình iPhone OpenGL ES
- 13. Tải hình ảnh OpenCV cho OpenGL Texture
- 14. khác biệt trong iOS OpenGL ES và Android OpenGL ES
- 15. Làm cách nào để hiển thị phản hồi trong OpenGL ES trên iPhone mà không có bộ đệm stencil?
- 16. Làm cách nào để hiển thị quả địa cầu/trái đất tương tác cho iPhone OpenGL ES?
- 17. Hiển thị hình ảnh tải với getJSON
- 18. Làm cách nào để tạo hình ảnh mipmap trong OpenGL ES?
- 19. OpenGL ES 1.1 hoặc 2.0 trên iPhone
- 20. OpenGL ES Shader để phác thảo hình ảnh 2D
- 21. Iphone: Cách hiển thị hình ảnh thư mục tài liệu trong chế độ xem hình ảnh?
- 22. OpenGL: Hiển thị nhanh trên màn hình
- 23. OpenGL-ES và Cg
- 24. glGetUniformLocation trở -1 OpenGL ES (iPhone)
- 25. OpenGL ES Render to Texture
- 26. OpenGL ES và OpenGL shaders tương thích
- 27. Vẽ hình cầu trong OpenGL ES
- 28. Chọn OpenGL ES 1.1 hoặc OpenGL ES 2.0?
- 29. Ảnh chụp màn hình của nội dung OpenGL ES dành cho ứng dụng Paint
- 30. Hình ảnh được tải trước không hiển thị trong Chrome
Phiên bản OpenGL ES, 1 hoặc 2 nào? –
Tôi đang sử dụng ES 1. – nomann