Tag: opengl es

使用GLKit和OpenGL-ES,如何绘制两个三angular形,一个纹理,另一个坚实

我是OpenGL-ES的新手,已经开始通过Buck的学习OpenGL ES for iOS书籍工作。 第2章介绍用纯色绘制三angular形,第3章继续使用纹理。 作为个人学习练习,我试图改变示例代码来绘制两个三angular形; 一个是质地,另一个是固体。 看起来像一个非常基本的练习,但作为一个OpenGL-ES初学者 – 是一个棘手的问题。 到目前为止,我已经尝试了一些组合。 首先,我准备绘制GLKVertexAttribPosition ,然后GLKVertexAttribTexCoord0 。 然后我用三angular形1绘制我的顶点缓冲区。 接下来,我尝试了几件事情,包括: glDisableVertexAttribArray(GLKVertexAttribTexCoord0); 和 GLuint name = self.textureInfo0.name; glDeleteTextures(1, &name); 然后再绘制颜色属性: [self.vertexBuffer prepareToDrawWithAttrib:GLKVertexAttribColor numberOfCoordinates:3 attribOffset:offsetof(SceneVertex, colours) shouldEnable:YES]; 在屏幕截图中可以看到,左下angular的三angular形具有与顶点颜色属性混合的纹理。 正方形 – 使广场 – 是完全黑色的。 请注意, prepareToDrawWithAttrib方法调用是Buck的实用程序类,主要调用glVertexAttribPointer方法。 需要注意的是我在这里使用GLKit ,所以没有着色器或任何东西。 这是截图: 任何想法非常赞赏。

在ios上渲染的framebuffer对象

我有问题获得跨屏渲染工作在iOS上。 以下是设置帧缓冲区对象和相关缓冲区的代码。 这与苹果在开发者中心的代码基本相同。 glGenFramebuffers(1, &pick_id); glBindFramebuffer(GL_FRAMEBUFFER, pick_id); GLuint color_id, depth_id; glGenRenderbuffers(1, &color_id); glBindRenderbuffer(GL_RENDERBUFFER, color_id); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, screen_width, screen_height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_id); glGenRenderbuffers(1, &depth_id); glBindRenderbuffer(GL_RENDERBUFFER, depth_id); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, screen_width, screen_height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_id); std::cout << pick_id << " " << color_id << " " << depth_id << std::endl; switch(glCheckFramebufferStatus(GL_FRAMEBUFFER)) { case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: std::cout << […]

Qt iOS:如何从QVideoFilterRunnable返回types为GLTextureHandle的QVideoFrame

我试图捕捉摄像头输出帧,并在GPUpipe道中进一步处理。 出于这个原因,将纹理作为GPU纹理来回转是最好的select。 从QVideoFilterRunnable类inheritance的run方法接收QVideoFrame对象的types不等于QAbstractVideoBuffer :: GLTextureHandle 。 它等于NoHandle ,我需要做map / unmap,并通过glTexImage手动加载纹理,这不利于性能。 有没有可用于返回纹理名称的控制选项? 一些说明: 在Android上看起来不错。 返回的框架是质感,所以这就像一个魅力: QVideoFrame* input = …; GLuint texture = input->handle().toUInt(); f->glBindTexture(GL_TEXTURE_2D, texture); 一般来说,可能有iOS纹理cachingfunction: CVPixelBufferRef pixelBuffer = …; CVOpenGLESTextureCacheCreateTextureFromImage(…, pixelBuffer, …, &textureRef); texture = CVOpenGLESTextureGetName(textureRef);

以固定的时间间隔为单个图像加载两个纹理 – GLkit openglES

我使用下面的代码来加载对象的纹理。 – (void)ldText:(UIImage *)Image { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); CGImageRef cgImage = Image.CGImage; float Width = CGImageGetWidth(cgImage); float Height = CGImageGetHeight(cgImage); CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(cgImage)); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, CFDataGetBytePtr(data)); } 纹理得到正确映射。 我现在需要加载两个纹理。 纹理应该定期更换。 可能吗? 有人可以指导我如何从这里出发? * 更新:我用Image2加载了另一个纹理,函数ldText2。 并在每个“更新视图”中进行更新。 现在我在同一个对象上得到两个纹理,每当调用“update”函数的时候就会发生变化。 每次调用“更新”function时,我都会交换纹理1和纹理2。 但问题是时间间隔! 我希望它发生缓慢。 如何为此设置一个时间间隔? *

将vector<float>转换为GLfloat

我目前在iOS的OpenGL的工作,我想听听是否有任何方式将vector转换为GLfloat? 由于glBufferData: void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage); 该向量是stl_bvector.h的一部分

ios – 从纹理caching创build的video是黑色的

我正在尝试使用Brad Larson的答案在iOS上进行高效的video处理。 这个答案是关于如何在不使用glReadPixels情况下高效地获得像素缓冲区的输出。 据我所知,必须从AVAssetWriterInputPixelBufferAdaptor pixelBufferPool中加载一个像素缓冲区,将其链接起来,然后在每个渲染循环之后调用 CVPixelBufferUnlockBaseAddress(buffer, CVPixelBufferLockFlags(rawValue: 0)) writerAdaptor?.append(buffer, withPresentationTime: currentTime) 但是,当我尝试这样做,输出video是黑色的。 原来的答案显示了代码片段,而不是完整的设置。 我也看过GPUImage,但令人惊讶的是它使用glReadPixels : https : //github.com/BradLarson/GPUImage/blob/167b0389bc6e9dc4bb0121550f91d8d5d6412c53/framework/Source/Mac/GPUImageMovieWriter.m#L501 这里是我想要工作的代码的一个稍微简化的版本: 1)开始摄像机录制 override func viewDidLoad() { // Start the camera recording session = AVCaptureSession() session.sessionPreset = AVCaptureSessionPreset1920x1080 // Input setup. device = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo).first as? AVCaptureDevice input = try? AVCaptureDeviceInput(device: device) session.addInput(input) // Output setup. let output […]

如何在iOS上以最高FPS的图像数组来组装animation?

如果这个问题听起来很愚蠢,我很抱歉。 我有一个由另一个项目生成的图像数组,我想尽可能快地将它们显示在屏幕上,将它们组装成animation。 我应该如何做到这一点,以达到帧率至less高于30FPS? 我是iOS开发新手,我不知道从哪里开始。 我应该看看核心animation或OpenGL或Quartz2D或其他? 有人可以指点我一个方向吗? 非常感谢! 真的很感谢帮助。

相机帧到UIImage到OpenGL渲染提供了一个奇怪的形象

我正在提取UIImage NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer]; UIImage *image = [UIImage imageWithData:imageData]; 然后我创build一个OpenGL纹理并呈现它。 然后我从帧缓冲区提取UIImage,但它出来的错误,你可以看到。 我试着玩纹理顶点数组,但它保持不变。 这是坐标: const GLfloat squareVertices[] = { -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, }; const GLfloat textureVertices[] = { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, }; glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices); glEnableVertexAttribArray(ATTRIB_VERTEX); glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_FLOAT, 0, 0, […]

iOS版。 OpenGL的。 在曲线下面用梯度填充区域

我需要创build一个像Siri( SiriAnim )的声波animationOpenGL我有一个波形: 这是我的代码: @property (strong, nonatomic) EAGLContext *context; @property (strong, nonatomic) GLKBaseEffect *effect; // ….. – (void)setupGL { [EAGLContext setCurrentContext:self.context]; glEnable(GL_CULL_FACE); self.effect = [[GLKBaseEffect alloc] init]; self.effect.useConstantColor = GL_TRUE; self.effect.constantColor = GLKVector4Make(0.0f, 1.0f, 0.0f, 1.0f); } // ….. – (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { glClearColor(_curRed, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); [self.effect prepareToDraw]; GLfloat line[1440]; for (int […]

GPUImageLookupFilter与强度控制?

我正在为我的项目使用Brad Larson的GPUImage框架。 我试图find一种方法来实现强度控制GPUImageLookupFilter并通过https://github.com/BradLarson/GPUImage/issues/1485 gl_FragColor = mix(textureColor,vec4(vec3(newColor),1.0),mixTexture); “textureColor”是原始纹理,“newColor”是LookupFilter结果,mixTexture是(0〜1.0)的Alpha值,可以认为是强度variables。 我不知道如何实现这一点,我不知道如何实现OpenGL着色器。 任何人都可以告诉我在哪里添加这个代码来实现强度控制GPUImageLookupFilter ?