【发布时间】:2018-03-08 03:39:12
【问题描述】:
我在我的 iPhoneX 上使用 OpenGLES 绘制 ARFaceGeometry,我绘制了 GL_POINTS 和跟踪我脸部的点,但结果似乎不正确,请大家帮我找出错误的地方?
这是我的绘图代码:
ARFaceGeometry *faceGeometry = [[ARFaceGeometry alloc] initWithBlendShapes:self.faceAnchor.blendShapes];
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, faceGeometry.vertexCount*3*sizeof(GLfloat), faceGeometry.vertices, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
GLuint textureCoordBuffer;
glGenBuffers(1, &textureCoordBuffer);
glBindBuffer(GL_ARRAY_BUFFER, textureCoordBuffer);
glBufferData(GL_ARRAY_BUFFER, faceGeometry.textureCoordinateCount*2*sizeof(GLfloat), faceGeometry.textureCoordinates, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, faceGeometry.triangleCount*3*sizeof(unsigned short), faceGeometry.triangleIndices, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
[self.program setUniformMatrix4fv:@"u_pMatrix" value:self.projectionMatrix.m];
[self.program setUniformMatrix4fv:@"u_vMatrix" value:self.viewMatrix.m];
[self.program setUniformMatrix4fv:@"u_mMatrix" value:(GLfloat *)self.faceAnchor.transform.columns];
[self.program setUniform1i:@"maskTexture" value:[self.texture activeUnit:1]];
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
[self.program setAttribute:@"a_vertex" size:3 stride:3*sizeof(GLfloat) offset:0];
glBindBuffer(GL_ARRAY_BUFFER, textureCoordBuffer);
[self.program setAttribute:@"a_texture_coord" size:2 stride:2*sizeof(GLfloat) offset:0];
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glDrawElements(GL_POINTS, (int)faceGeometry.triangleCount*3, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
【问题讨论】:
-
我已经解决了这个问题!
-
太棒了!请将您的解决方案作为答案发布,以便其他遇到类似问题的人受益。
-
@Misery 请分享一下你是如何解决这个问题的?
标签: ios arkit iphone-x face-id