Opengl es 制作平面OpenGL曲面以应用纹理:我的代码中的奇怪行为(添加图片以供参考)
我有一个非常简单的AR应用程序,其中有一个我检测到的标记,然后在这个标记上,我创建一个openGL平面,并对其应用纹理。我现在用的是一个简单的正方形。代码如下所示:Opengl es 制作平面OpenGL曲面以应用纹理:我的代码中的奇怪行为(添加图片以供参考),opengl-es,Opengl Es,我有一个非常简单的AR应用程序,其中有一个我检测到的标记,然后在这个标记上,我创建一个openGL平面,并对其应用纹理。我现在用的是一个简单的正方形。代码如下所示: #define NUM_SURFACE_OBJECT_VERTEX 12 #define NUM_SURFACE_OBJECT_INDEX 12 static const float surfaceVertices[] = { 20, -20, 5, 20, 20, 5, -20, 20, 5,
#define NUM_SURFACE_OBJECT_VERTEX 12
#define NUM_SURFACE_OBJECT_INDEX 12
static const float surfaceVertices[] =
{
20, -20, 5,
20, 20, 5,
-20, 20, 5,
-20, -20, 5
};
static const float surfaceTexCoords[] =
{
1, 0,
1, 1,
0, 1,
0, 0
};
static const float surfaceNormals[] =
{
};
static const unsigned short surfaceIndices[] =
{
0, 1, 2,
2, 3, 0
};
QCAR::Matrix44F modelViewProjection;
ShaderUtils::translatePoseMatrix(
0.0f, 0.0f, kObjectScale, &modelViewMatrix.data[0]);
ShaderUtils::scalePoseMatrix(
kObjectScale,
kObjectScale,
kObjectScale,
&modelViewMatrix.data[0]);
ShaderUtils::multiplyMatrix(
&projectionMatrix.data[0],
&modelViewMatrix.data[0],
&modelViewProjection.data[0]);
glUseProgram(shaderProgramID);
glVertexAttribPointer(
vertexHandle,
3,
GL_FLOAT,
GL_FALSE,
0,
(const GLvoid*)&surfaceVertices[0]);
glVertexAttribPointer(
textureCoordHandle,
2,
GL_FLOAT,
GL_FALSE,
0,
(const GLvoid*)&surfaceTexCoords[0]);
glEnableVertexAttribArray(vertexHandle);
glEnableVertexAttribArray(textureCoordHandle);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, [thisTexture textureID]);
glUniformMatrix4fv(
mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]);
glDrawElements(
GL_TRIANGLES,
NUM_SURFACE_OBJECT_INDEX,
GL_UNSIGNED_SHORT,
(const GLvoid*)&surfaceIndices[0]);
ShaderUtils::checkGlError("EAGLView renderFrameQCAR");
绘制它的代码如下所示:
#define NUM_SURFACE_OBJECT_VERTEX 12
#define NUM_SURFACE_OBJECT_INDEX 12
static const float surfaceVertices[] =
{
20, -20, 5,
20, 20, 5,
-20, 20, 5,
-20, -20, 5
};
static const float surfaceTexCoords[] =
{
1, 0,
1, 1,
0, 1,
0, 0
};
static const float surfaceNormals[] =
{
};
static const unsigned short surfaceIndices[] =
{
0, 1, 2,
2, 3, 0
};
QCAR::Matrix44F modelViewProjection;
ShaderUtils::translatePoseMatrix(
0.0f, 0.0f, kObjectScale, &modelViewMatrix.data[0]);
ShaderUtils::scalePoseMatrix(
kObjectScale,
kObjectScale,
kObjectScale,
&modelViewMatrix.data[0]);
ShaderUtils::multiplyMatrix(
&projectionMatrix.data[0],
&modelViewMatrix.data[0],
&modelViewProjection.data[0]);
glUseProgram(shaderProgramID);
glVertexAttribPointer(
vertexHandle,
3,
GL_FLOAT,
GL_FALSE,
0,
(const GLvoid*)&surfaceVertices[0]);
glVertexAttribPointer(
textureCoordHandle,
2,
GL_FLOAT,
GL_FALSE,
0,
(const GLvoid*)&surfaceTexCoords[0]);
glEnableVertexAttribArray(vertexHandle);
glEnableVertexAttribArray(textureCoordHandle);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, [thisTexture textureID]);
glUniformMatrix4fv(
mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]);
glDrawElements(
GL_TRIANGLES,
NUM_SURFACE_OBJECT_INDEX,
GL_UNSIGNED_SHORT,
(const GLvoid*)&surfaceIndices[0]);
ShaderUtils::checkGlError("EAGLView renderFrameQCAR");
这是我正在旋转的一组测试纹理(实际上,所有的png都是一样的,我只是复制了多次。它们的大小都是512x512px):
如果显示的代码段不正确,我深表歉意,但这是程序的绘图部分。从本质上说,这是我试图解决的示例代码,我刚刚用平面和纹理替换了他们使用的茶壶模型
因此,有几点需要注意:
这些照片是从我的iPad2上拍摄的。我的AR应用程序正在我的iPad2上运行。我正在用我的macbook air来显示木片的标记。因此,我的ipad正在识别macbook air上显示的标记图像,并在标记顶部应用纹理 通过添加法向量,它似乎是固定的 通过添加法向量,它似乎是固定的 我对最后一张图片有点困惑。这是一张从相机上拍摄的电脑照片,还是台灯是你的纹理的一部分?因为如果它是从照相机上拍摄的。。。那么,你的电脑不知何故正在将多边形泄漏到现实世界中……这张图片是我在ipad 2上运行的AR应用程序中看到的屏幕截图我对最后一张图片有点困惑。这是一张从相机上拍摄的电脑照片,还是台灯是你的纹理的一部分?因为如果它是从照相机上拍摄的。。。那么,你的电脑不知何故正在将多边形泄漏到现实世界中……这张图片是我在ipad 2上运行的AR应用程序中看到的屏幕截图