Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用OpenGL ES for iOS绘制三角形_Ios_Swift_Opengl Es - Fatal编程技术网

使用OpenGL ES for iOS绘制三角形

使用OpenGL ES for iOS绘制三角形,ios,swift,opengl-es,Ios,Swift,Opengl Es,我不是OpenGL专家,我很难在屏幕上画一个三角形。我正在修改一个从苹果(GLPaint)移植到Swift的旧示例项目。该项目是一个基本的手指绘图应用程序,我想修改它,使我可以绘制形状 我能画点(GL_点),但不能画三角形(GL_三角形) 我发现了一个类似的帖子,其中一个用户试图做与我相同的事情,但没有帮助: 下面是我用来成功在屏幕上绘制点的代码: EAGLContext.setCurrent(上下文) glBindFramebuffer(GL_FRAMEBUFFER.ui,viewFrame

我不是OpenGL专家,我很难在屏幕上画一个三角形。我正在修改一个从苹果(GLPaint)移植到Swift的旧示例项目。该项目是一个基本的手指绘图应用程序,我想修改它,使我可以绘制形状

我能画点(GL_点),但不能画三角形(GL_三角形)

我发现了一个类似的帖子,其中一个用户试图做与我相同的事情,但没有帮助:

下面是我用来成功在屏幕上绘制点的代码:

EAGLContext.setCurrent(上下文)
glBindFramebuffer(GL_FRAMEBUFFER.ui,viewFramebuffer)
设平方顶点:[GLfloat]=[
500.0, 500.0,
1000.0,  500.0,
1000.0,  1000.0,
]
glDisable(GL_TEXTURE_2D.ui);
glColor4f(1.0,0.0,0.0,1.0);
GlenableVertexAttributeArray(ATTRIB_VERTEX.ui)
glvertexattributepointer(ATTRIB_VERTEX.ui,2,GL_FLOAT.ui,GL_FALSE.ub,0,squarevertex)
glUseProgram(程序[程序点].id)
GLDrawArray(GL_POINTS.ui,0,3)
glBindRenderbuffer(GL_RENDERBUFFER.ui,viewRenderbuffer)
context.presentRenderbuffer(GL_RENDERBUFFER.l)
以下是初始化代码:

private func initGL()->Bool{
//为帧缓冲区对象和颜色渲染缓冲区生成ID
glGenFramebuffers(1和viewFramebuffer)
glGenRenderbuffers(1,&viewRenderbuffer)
glBindFramebuffer(GL_FRAMEBUFFER.ui,viewFramebuffer)
glBindRenderbuffer(GL_RENDERBUFFER.ui,viewRenderbuffer)
//此调用将当前渲染缓冲区的存储与EAGLDrawable(我们的CAEAGLLayer)关联
//允许我们绘制一个缓冲区,该缓冲区稍后将被渲染到屏幕上,无论层位于何处(与我们的视图相对应)。
renderbufferStorage(GL_RENDERBUFFER.l,from:(self.layer as!EAGLDrawable))
glFramebufferRenderbuffer(GL_FRAMEBUFFER.ui、GL_COLOR_ATTACHMENT0.ui、GL_RENDERBUFFER.ui、viewRenderbuffer)
GLGetRenderBuffer参数(GL_RENDERBUFFER.ui、GL_RENDERBUFFER_WIDTH.ui和backingWidth)
GLGetRenderBuffer参数(GL_RENDERBUFFER.ui、GL_RENDERBUFFER_HEIGHT.ui和backingHeight)
//对于此示例,我们不需要深度缓冲区。如果需要,则可以创建深度缓冲区并将其附加到帧缓冲区:
//glGenRenderbuffers(1和深度RenderBuffer);
//glBindRenderbuffer(GL_RENDERBUFFER,depthRenderbuffer);
//GLrenderBuffer存储(GL_RENDERBUFFER,GL_DEPTH_component 16,backingWidth,backingHeight);
//glFramebufferRenderbuffer(GL_帧缓冲区、GL_深度附件、GL_渲染缓冲区、深度渲染缓冲区);
如果glCheckFramebufferStatus(GL\u FRAMEBUFFER.ui)!=GL\u FRAMEBUFFER\u COMPLETE.ui{
NSLog(“未能生成完整的帧缓冲区对象%x”,GLCHECKFRAMEBERSTATUS(GL_framebuffer.ui))
返回错误
}
//以像素为单位设置视图端口
glViewport(0,0,backingWidth,backingHeight)
//创建一个顶点缓冲区对象来保存数据
glGenBuffers(1,&vboId)
//加载笔刷纹理
brushTexture=self.texture(fromName:“ParticleNew.png”)
//加载着色器
self.setupShaders()
//启用混合并设置适合预乘alpha像素数据的混合函数
glEnable(GL_BLEND.ui)
glBlendFunc(GL_ONE.ui,GL_ONE_减去SRC_ALPHA.ui)
返回真值
}
为了绘制三角形,我尝试将glDrawArrays(GL_POINTS.ui,0,3)更改为glDrawArrays(GL_TRIANGLES.ui,0,3),但没有在屏幕上绘制任何内容。控制台上也没有打印错误消息

任何帮助或指导都将不胜感激