在我的opengl項目中,我需要在紋理中轉換UIImage;怎麼辦呢? 你能幫我嗎?在紋理中轉換UIImage
7
A
回答
10
我沒有測試以下,但我會分解轉化3個步驟:爲你的形象
提取信息:
UIImage* image = [UIImage imageNamed:@"imageToApplyAsATexture.png"]; CGImageRef imageRef = [image CGImage]; int width = CGImageGetWidth(imageRef); int height = CGImageGetHeight(imageRef);
分配上述性質的
textureData
: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);
設置您的紋理:
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);
編輯:
讀this tut;一切都從一個圖像轉換爲紋理並在iOS環境中應用紋理來解釋。
0
這樣使用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
是OpenGL的背景下對紋理名。
0
這裏是獲得質地出的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
}的迅速版
注:需要記住的是核芯顯卡翻轉圖像時,我們在加載它們
相關問題
- 1. 在UIImage到紋理轉換,紋理垂直翻轉
- 2. OpenGL紋理轉換
- 3. 從紋理大端轉換
- 4. 轉換爲Cinder gl ::紋理
- 5. 將紋理轉換爲GL_COMPRESSED_RGBA
- 6. UIimage char *轉換
- 7. 將ARGB紋理轉換爲下一個2紋理紋理的快速方法
- 8. 如何將OpenGL紋理轉換爲CUDA紋理?
- 9. 如何將TextureRegion轉換爲紋理來設置精靈紋理
- 10. 從NSData UIImage轉換
- 11. 如何從EAGLView的紋理獲取UIImage?
- 12. 在UIImage中轉換UIScrollView的內容
- 13. 加載和轉換HBITMAP爲OpenGL紋理
- 14. SceneKit - 紋理之間的轉換
- 15. 將OpenCV2圖像轉換爲Kivy紋理
- 16. 將FFmpeg幀轉換爲OpenGL ES紋理
- 17. OpenGL紋理混合和轉換
- 18. 將JOGL紋理轉換爲BufferedImage
- 19. 將數組轉換爲紋理表示
- 20. 將OpenGL紋理轉換爲OpenCV Mat
- 21. 將jpg UIImage轉換爲位圖UIImage?
- 22. 通過轉換轉換的Android位圖LibGdx的紋理
- 23. 使用離線collada2gltf轉換器與紋理COLLADA模型轉換
- 24. 在iOS中將NPOT PVR紋理轉換爲POT
- 25. 如何在Android中將opengl紋理轉換回位圖?
- 26. OpenGL紋理倒轉
- 27. 翻轉OpenGL紋理
- 28. FBO紋理翻轉/旋轉
- 29. 如何在SDL2中旋轉紋理?
- 30. 將NSString轉換爲UIImage
我有兩個問題:我的圖像是1024x768,我應該設置這些值?最後是我的質感? – CrazyDev
如果你知道你的圖像尺寸,你不需要提取寬度和高度直接設置它 – tiguero
您的2D紋理對應於您在調用glTexImage2D時創建的GL對象,您可以通過它訪問它名稱:textureID – tiguero