【问题标题】:How to draw ARFaceGeometry using OpenGLES?如何使用 OpenGLES 绘制 ARFaceGeometry?
【发布时间】: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


【解决方案1】:

我发现vector_float3和simd_float4的大小和对齐方式一样。

所以我替换

glBufferData(GL_ARRAY_BUFFER, faceGeometry.vertexCount*3*sizeof(GLfloat), faceGeometry.vertices, GL_DYNAMIC_DRAW);

glBufferData(GL_ARRAY_BUFFER, faceGeometry.vertexCount*4*sizeof(GLfloat), faceGeometry.vertices, GL_DYNAMIC_DRAW);

这解决了我的问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多