首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用此代码中的纹理?

如何禁用此代码中的纹理?
EN

Stack Overflow用户
提问于 2016-12-19 09:32:39
回答 1查看 97关注 0票数 0

我在玩Vuforia,它是OpenGL代码,但我不知道每件事都做什么。我只想在这里禁用纹理,因为我从.obj文件生成的代码不包含纹理文件。

我只是想要有人告诉我,每个块做什么,我如何清理纹理,所以我的模型是完全白色(或白色与阴影,如果这很容易做到)。

代码语言:javascript
复制
// Clear colour and depth buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Render video background
[appRenderer renderVideoBackground];

glEnable(GL_DEPTH_TEST);
// We must detect if background reflection is active and adjust the culling direction.
// If the reflection is active, this means the pose matrix has been reflected as well,
// therefore standard counter clockwise face culling will result in "inside out" models.
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);

for (int i = 0; i < state.getNumTrackableResults(); ++i) {
    // Get the trackable
    const Vuforia::TrackableResult* result = state.getTrackableResult(i);
    Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose());

    // OpenGL 2
    Vuforia::Matrix44F modelViewProjection;

    VuforiaApplicationUtils::translatePoseMatrix(0.0f, 0.0f, kObjectScale, &modelViewMatrix.data[0]);
    VuforiaApplicationUtils::scalePoseMatrix(kObjectScale, kObjectScale, kObjectScale, &modelViewMatrix.data[0]);
    VuforiaApplicationUtils::multiplyMatrix(&projectionMatrix.data[0], &modelViewMatrix.data[0], &modelViewProjection.data[0]);

    glUseProgram(shaderProgramID);

    glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotVertices);
    glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotNormals);
    glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotTexCoords);

    glEnableVertexAttribArray(vertexHandle);
    glEnableVertexAttribArray(normalHandle);
    glEnableVertexAttribArray(textureCoordHandle);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, augmentationTexture[i].textureID);
    glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]);
    glUniform1i(texSampler2DHandle, 0 /*GL_TEXTURE0*/);
    glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)teapotIndices);

    glDisableVertexAttribArray(vertexHandle);
    glDisableVertexAttribArray(normalHandle);
    glDisableVertexAttribArray(textureCoordHandle);

    VuforiaApplicationUtils::checkGlError("EAGLView renderFrameVuforia");
}

glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);

glDrawElements调用看起来很重要,但是如果我不需要纹理,该传递什么呢?我是否启用和禁用VertexAttribArray?那又能做什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 09:38:45

最简单的方法是编辑使用纹理使用白色颜色的着色器代码。它应该类似于用texture2D(texture, coord)替换vec4(1.0)

或者,您可以使用glTexImage2d上载白色纹理,该纹理可以在包含以下数据的1x1缓冲区中创建:

代码语言:javascript
复制
GLubyte texdata[1 * 1 * 4] = {0xFF, 0xFF, 0xFF, 0xFF};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41219514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档