我正在尝试使用GLKView将图像放入UITableViewCell来绘制图像.
我在故事板中有一个原型单元,我有一个GLKView.它没有选中Enable setNeedsDisplay.
原型单元有一个名为PhotoTableViewCell的自定义类
import UIKit
import GLKit
class PhotoTableViewCell: UITableViewCell {
var eaglContext:EAGLContext!
var ciContext:CIContext!
var myImage:CIImage!
@IBOutlet weak var photoGlView: GLKView!
@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var cameraLabel: UILabel!
@IBOutlet weak var notesLabel: UILabel!
override func layoutSubviews() {
self.photoGlView.delegate = self
}
}
extension PhotoTableViewCell: GLKViewDelegate {
override func draw(_ rect: CGRect) {
let drawableRectSize = CGSize(width: 200, height: 200)// width: photoGlView.drawableWidth, height: photoGlView.drawableHeight)
let drawableRect = CGRect(origin: CGPoint.zero, size: drawableRectSize)
print("rect ->\(drawableRect)")
print("rect size -> …Run Code Online (Sandbox Code Playgroud) 我有一个GLKit基于应用程序,显示一些简单的对象.
一切正常,除了屏幕旋转,在此期间GLKView不更新(-drawRect:未调用).因此,在旋转期间,投影矩阵不会根据动态变化的屏幕尺寸进行更新,并且对象看起来很糟糕(拉伸).
我有一系列UIImage(由来自服务器的传入jpeg数据制成),希望使用MTKView进行渲染。问题是,与GLKView相比,它太慢了。当我要在MTKView中显示一系列图像但在GLKView中没有延迟时,会有很多缓冲和延迟。
这是MTKView显示代码:
private lazy var context: CIContext = {
return CIContext(mtlDevice: self.device!, options: [CIContextOption.workingColorSpace : NSNull()])
}()
var ciImg: CIImage? {
didSet {
syncQueue.sync {
internalCoreImage = ciImg
}
}
}
func displayCoreImage(_ ciImage: CIImage) {
self.ciImg = ciImage
}
override func draw(_ rect: CGRect) {
var ciImage: CIImage?
syncQueue.sync {
ciImage = internalCoreImage
}
drawCIImage(ciImg)
}
func drawCIImage(_ ciImage:CIImage?) {
guard let image = ciImage,
let currentDrawable = currentDrawable,
let commandBuffer = commandQueue?.makeCommandBuffer()
else {
return
}
let currentTexture …Run Code Online (Sandbox Code Playgroud) 我正在尝试将GLKViewController添加到我的UserInterfaceViewController.我正在使用来自raywenderlich教程的示例项目(http://www.raywenderlich.com/5235/beginning-opengl-es-2-0-with-glkit-part-2)
这是我的代码片段
#import <UIKit/UIKit.h>
@interface UserInterfaceViewController : UIViewController
@end
@implementation UserInterfaceViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIViewController *userInterfaceController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"HelloGLKitViewController"];
userInterfaceController.view.frame = CGRectMake(50.0, 100.0, 200.0, 200.0);
[self.view addSubview:userInterfaceController.view];
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在我所期望的框架中的UserInterfaceViewController视图中绘制了上下文.HelloGLKitViewController有代码在GLKViewControllerDelegate方法"update"中旋转多维数据集,如下所示.但是当HelloGLKitViewController查看到我的UserInterfaceViewController视图时,没有调用GLKViewControllerDelegate .
#import <GLKit/GLKit.h>
@interface HelloGLKitViewController : GLKViewController
@end
@implementation HelloGLKitViewController
#pragma mark - GLKViewDelegate
- …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现此类,以便我可以在我的应用程序中捕获签名:
PPSSignatureView *sign = [[PPSSignatureView alloc] initWithFrame:CGRectMake(10, 10, 500, 300)];
GLKViewController *glkView = [[GLKViewController alloc] init];
glkView.view = sign;
[self.view addSubview:glkView.view];
Run Code Online (Sandbox Code Playgroud)
我之前没有使用任何openGL组件,所以我不确定我是否正确设置了它.
(PPSSignatureView是GLKView的子类)
对于modelviewMatrix,我了解如何形成转换和缩放Matrix。但是我无法理解如何使用来形成viewMatrix GLKMatrix4MakeLookAt。谁能解释它的工作原理以及如何给参数赋值(眼睛中心向上XYZ)。
GLK_INLINE GLKMatrix4 GLKMatrix4MakeLookAt(float eyeX, float eyeY, float eyeZ,
float centerX, float centerY, float centerZ,
float upX, float upY, float upZ)
Run Code Online (Sandbox Code Playgroud) 我尝试使用glkview实现视频输入,但是当我尝试旋转旋转时总是从connectionWithMediaType返回nil.
这是我的设置
override public func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
videoFeed = GLKView(frame: self.view.bounds, context: EAGLContext(API: .OpenGLES2))
videoFeed.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
videoFeed.translatesAutoresizingMaskIntoConstraints = true
videoFeed.contentScaleFactor = 1.0
self.view.addSubview(videoFeed)
renderContext = CIContext(EAGLContext: videoFeed.context)
sessionQueue = dispatch_queue_create("dCamSession", DISPATCH_QUEUE_SERIAL)
videoFeed.bindDrawable()
}
override public func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
startSession()
}
func createSession() -> AVCaptureSession {
let cam = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var input:AVCaptureInput
do {
input = try AVCaptureDeviceInput(device: cam)
} catch _ as NSError {
print("Cannot Init …Run Code Online (Sandbox Code Playgroud) 我使用 ViewController、GLKView 和 UISlider 创建了测试应用程序。所选过滤器中的滑块更改值。渲染图像很慢。我的代码有什么问题?
GLKview的测试类:
import UIKit
import CoreImage
import GLKit
class CustomGLView: GLKView {
//test filters
let clampFilter = CIFilter(name: "CIAffineClamp")!
let blurFilter = CIFilter(name: "CIGaussianBlur")!
let ciContext:CIContext
override init(frame: CGRect) {
let glContext = EAGLContext(api: .openGLES2)
ciContext = CIContext(
eaglContext: glContext!,
options: [
kCIContextWorkingColorSpace: NSNull()
]
)
super.init(frame: frame, context: glContext!)
enableSetNeedsDisplay = true
}
required init(coder aDecoder: NSCoder) {
let glContext = EAGLContext(api: .openGLES2)
ciContext = CIContext(
eaglContext: glContext!,
options: [
kCIContextWorkingColorSpace: NSNull()
]
)
super.init(coder: …Run Code Online (Sandbox Code Playgroud) glkview ×8
ios ×6
objective-c ×2
opengl-es ×2
swift ×2
xcode ×2
avcapture ×1
core-image ×1
eaglcontext ×1
glkit ×1
iphone ×1
matrix ×1
metalkit ×1
opengl ×1
rendering ×1
uitableview ×1