Trong dự án opengl của tôi, tôi cần phải chuyển đổi UIImage thành kết cấu; cách để làm điều đó là gì? Bạn có thể giúp tôi không?Chuyển đổi UIImage trong kết cấu
7
A
Trả lời
10
tôi đã không kiểm tra sau nhưng tôi sẽ phân hủy các chuyển đổi trong 3 bước: info
Extract cho hình ảnh của bạn:
UIImage* image = [UIImage imageNamed:@"imageToApplyAsATexture.png"]; CGImageRef imageRef = [image CGImage]; int width = CGImageGetWidth(imageRef); int height = CGImageGetHeight(imageRef);
Phân bổ một
textureData
với các tính chất trên:GLubyte* textureData = (GLubyte *)malloc(width * height * 4); // if 4 components per pixel (RGBA) CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); NSUInteger bytesPerPixel = 4; NSUInteger bytesPerRow = bytesPerPixel * width; NSUInteger bitsPerComponent = 8; CGContextRef context = CGBitmapContextCreate(textureData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGColorSpaceRelease(colorSpace); CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); CGContextRelease(context);
Thiết lập kết cấu của bạn:
GLuint textureID; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);
EDIT:
đọc this tut; mọi thứ được giải thích từ việc chuyển đổi một hình ảnh thành một kết cấu và áp dụng một kết cấu trong môi trường iOS.
0
Một cách khác để làm điều này bằng cách sử dụng khuôn khổ GLKit:
//Path to image
NSString *path = [[NSBundle mainBundle] pathForResource:@"textureImage" ofType:@"png"];
//Set eaglContext
[EAGLContext setCurrentContext:[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]];
//Create texture
NSError *theError;
GLKTextureInfo *texture = [GLKTextureLoader textureWithContentsOfFile:filePath options:nil error:&theError];
glBindTexture(texture.target, texture.name);
texture.name
là tên Bối cảnh OpenGL cho kết cấu.
0
Đây là phiên bản nhanh chóng nhận được kết cấu ra khỏi một UIImage
func setupTexture(sourceImage: UIImage) -> GLuint {
guard let textureImage = sourceImage.cgImage else {
print("Failed to load image")
return 0
}
let width = textureImage.width
let height = textureImage.height
/*
it will write one byte each for red, green, blue, and alpha – so 4 bytes in total.
*/
let textureData = calloc(width * height * 4, MemoryLayout<GLubyte>.size) //4 components per pixel (RGBA)
let spriteContext = CGContext(data: textureData,
width: width,
height: height,
bitsPerComponent: 8,
bytesPerRow: width * 4,
space: textureImage.colorSpace!,
bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)
spriteContext?.draw(textureImage, in: CGRect(x: 0, y: 0, width: width, height: height))
var textName = GLuint()
glGenTextures(1, &textName)
glBindTexture(GLenum(GL_TEXTURE_2D), textName)
glTexParameteri(GLenum(GL_TEXTURE_2D), GLenum(GL_TEXTURE_MIN_FILTER), GL_NEAREST)
glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width),
GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), textureData)
return textName
}
Lưu ý:. Cần ghi nhớ rằng Lõi đồ họa làm bật bức tranh khi chúng ta nạp chúng trong
Các vấn đề liên quan
- 1. Chuyển đổi UIImage thành CVImageBufferRef
- 2. Chuyển đổi UIImage thành Tệp PDF
- 3. cách chuyển đổi CVImageBufferRef sang UIImage
- 4. Chuyển đổi UIImage sang Byte Array
- 5. UIImage trong vòng kết nối
- 6. Chuyển đổi kết cấu OpenGL sang OpenCV Mat
- 7. Làm cách nào để chuyển đổi FBProfilePictureView thành UIImage?
- 8. Chuyển đổi tọa độ UIImageView Chạm vào Tọa độ UIImage
- 9. Chuyển nội dung UIWebview thành UIImage
- 10. Làm cách nào để lấy dữ liệu kết cấu thô (không được chuyển đổi) trong OpenGL?
- 11. Làm thế nào để chuyển đổi bộ đệm kCVPixelFormatType_420YpCbCr8BiPlanarFullRange sang UIImage trong iOS
- 12. Sự cố với tính minh bạch khi chuyển đổi UIView thành UIImage
- 13. Chuyển đổi UIImage đen trắng và không phải là thang độ xám để sử dụng tesseract
- 14. Chuyển đổi cấu trúc thành byte
- 15. Chuyển đổi mảng cấu trúc thành IntPtr
- 16. Chuyển đổi cấu trúc Go thành JSON
- 17. Cách thay đổi đơn texel trong kết cấu OpenGL
- 18. Thay đổi kích thước đơn giản của UIImage trong XCODE
- 19. Tải kết cấu JuicyPixels trong Haskell OpenGL?
- 20. Chuyển đổi mô hình 3D sang JSJ SceneJS, bao gồm kết cấu
- 21. MonoTouch chuyển đổi màu UIImage thành alpha sang thang độ xám và mờ?
- 22. int mảng kết cấu OpenGL trong android
- 23. ASIHTTP: Tải lên UIImage?
- 24. Làm thế nào để chuyển đổi giá trị NSData để UIImage
- 25. Làm cách nào để chuyển đổi UIImage sang NSData hoặc CFDataRef?
- 26. Chuyển đổi Endianess trên cấu trúc trường bit
- 27. Xoay UIImage?
- 28. Tính năng đổ bóng không sửa đổi kết cấu 3d
- 29. TFS 2010 xây dựng cấu hình chuyển đổi vấn đề
- 30. Thêm UIImage vào CCSprite?
Tôi có hai câu hỏi: hình ảnh của tôi là 1024x768 nơi tôi nên đặt những valiues này? và cuối cùng là kết cấu của tôi là gì? – CrazyDev
nếu bạn biết kích thước hình ảnh bạn không cần phải trích xuất chiều rộng và chiều cao chỉ cần đặt nó trực tiếp – tiguero
kết cấu 2d của bạn tương ứng với đối tượng gl bạn đang tạo khi gọi glTexImage2D, bạn có thể truy cập nó qua tên: textureID – tiguero