2016-12-19 1 views
0

Я играю с Vuforia, и это код OpenGL, но я не знаю, что все делает. Я просто хочу отключить текстуру в этом, так как код, который я генерирую из файлов .obj, не содержит файла текстуры.Как отключить текстуру в этом коде?

Я просто хочу, чтобы кто-то рассказал мне, что делает каждый блок, и как я могу очистить текстуру, поэтому моя модель полностью белая (или белая с тенями, если это легко сделать).

// 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? Что это делает?

+0

Какую версию OpenGL вы используете? Есть ли какие-то шейдеры? –

ответ

1

Самый простой способ - отредактировать шейдерный код, который использует текстуру для использования белого цвета. Это должно быть похоже на замену texture2D(texture, coord) с vec4(1.0)

В качестве альтернативы вы можете использовать glTexImage2d, чтобы загрузить белую текстуру, которая может созданную в 1x1 буфере, содержащем следующие данные:

GLubyte texdata[1 * 1 * 4] = {0xFF, 0xFF, 0xFF, 0xFF}; 
+1

Да, действительно, они используют шейдеры. Я заменю 'gl_FragColor = texture2D (texSampler2D, texCoord),' который теперь существует с 'vec4 (1.0);' – vrwim

+0

Итак, ваш ответ технически корректен, но теперь я вижу вещь полностью в белом. Я хочу, чтобы у него было немного тени, так что очевидно, что это 3D-объект. Легко ли добавить свет где-нибудь, чтобы тени были наложены на объект, давая ощущение 3D? – vrwim

+0

@vrwim Вы можете использовать альтернативное решение для этого. Не заглядывая в шейдерный код, нельзя сказать, что можно улучшить прежнее решение. –

 Смежные вопросы

  • Нет связанных вопросов^_^