我不是OpenGL专家,在屏幕上绘制三角形时遇到困难。我正在修改我已移植到Swift的Apple(GLPaint)的旧示例项目。该项目是一个基本的手指绘制应用程序,我想对其进行修改以便可以绘制形状。
我能够绘制点(GL_POINTS),但不能绘制三角形(GL_TRIANGLES)
我发现了一个类似的帖子,用户试图与我做同样的事情,但没有帮助:
Draw Square with OpenGL ES for iOS
下面是我用来成功在屏幕上绘制点的代码:
EAGLContext.setCurrent(context)
glBindFramebuffer(GL_FRAMEBUFFER.ui, viewFramebuffer)
let squareVertices : [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);
glEnableVertexAttribArray(ATTRIB_VERTEX.ui)
glVertexAttribPointer(ATTRIB_VERTEX.ui, 2, GL_FLOAT.ui, GL_FALSE.ub, 0, squareVertices)
glUseProgram(program[PROGRAM_POINT].id)
glDrawArrays(GL_POINTS.ui, 0, 3)
glBindRenderbuffer(GL_RENDERBUFFER.ui, viewRenderbuffer)
context.presentRenderbuffer(GL_RENDERBUFFER.l)
下面是初始化代码:
private func initGL() -> Bool {
// Generate IDs for a framebuffer object and a color renderbuffer
glGenFramebuffers(1, &viewFramebuffer)
glGenRenderbuffers(1, &viewRenderbuffer)
glBindFramebuffer(GL_FRAMEBUFFER.ui, viewFramebuffer)
glBindRenderbuffer(GL_RENDERBUFFER.ui, viewRenderbuffer)
// This call associates the storage for the current render buffer with the EAGLDrawable (our CAEAGLLayer)
// allowing us to draw into a buffer that will later be rendered to screen wherever the layer is (which corresponds with our view).
context.renderbufferStorage(GL_RENDERBUFFER.l, from: (self.layer as! EAGLDrawable))
glFramebufferRenderbuffer(GL_FRAMEBUFFER.ui, GL_COLOR_ATTACHMENT0.ui, GL_RENDERBUFFER.ui, viewRenderbuffer)
glGetRenderbufferParameteriv(GL_RENDERBUFFER.ui, GL_RENDERBUFFER_WIDTH.ui, &backingWidth)
glGetRenderbufferParameteriv(GL_RENDERBUFFER.ui, GL_RENDERBUFFER_HEIGHT.ui, &backingHeight)
// For this sample, we do not need a depth buffer. If you do, this is how you can create one and attach it to the framebuffer:
// glGenRenderbuffers(1, &depthRenderbuffer);
// glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
// glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, backingWidth, backingHeight);
// glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
if glCheckFramebufferStatus(GL_FRAMEBUFFER.ui) != GL_FRAMEBUFFER_COMPLETE.ui {
NSLog("failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER.ui))
return false
}
// Setup the view port in Pixels
glViewport(0, 0, backingWidth, backingHeight)
// Create a Vertex Buffer Object to hold our data
glGenBuffers(1, &vboId)
// Load the brush texture
brushTexture = self.texture(fromName: "ParticleNew.png")
// Load shaders
self.setupShaders()
// Enable blending and set a blending function appropriate for premultiplied alpha pixel data
glEnable(GL_BLEND.ui)
glBlendFunc(GL_ONE.ui, GL_ONE_MINUS_SRC_ALPHA.ui)
return true
}
要绘制三角形,我尝试将glDrawArrays(GL_POINTS.ui,0,3)更改为glDrawArrays(GL_TRIANGLES.ui,0,3),但屏幕上未绘制任何内容。也没有错误消息打印到控制台。
任何帮助或指导将不胜感激。