Hey guys
In ImageTargets application i want to initially show a 3D model and then when user touches the screen another 3D model should come on the same tracker image.
In the ImageTargets.java file i have added this piece of code which intimates the cpp file when the user touches the screen
I have modified the ImageTargets.cpp as follows :-
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
int eventId = event.getAction();
switch (eventId){
case MotionEvent.ACTION_DOWN:
callFromJava();
break;
}
return super.onTouchEvent(event);
}
After this i have done the changes in the ImageTargets.cpp file. I have added the callFromJava() function in the file as follows :-
Java_com_qualcomm_QCARSamples_ImageTargets_ImageTargets_callFromJava(JNIEnv *, jobject)
{
modelId = 1 ;
//return 1;
}
where modelId is the int variable in the file. After this i have done the following code in the renderFrame() method to add logic i.e. when application starts the modelId variable is 0 and when user touches the screen modelId = 1 and according to this the other 3D model should load . I have created another 3D model .h file and it works well separately so there should no be any issue in it.
#ifdef USE_OPENGL_ES_1_1
// Load projection matrix:
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projectionMatrix.data);
// Load model view matrix:
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(modelViewMatrix.data);
glTranslatef(0.f, 0.f, kObjectScale);
glScalef(kObjectScale, kObjectScale, kObjectScale);
// Draw object:
glBindTexture(GL_TEXTURE_2D, thisTexture->mTextureID);
if(modelId == 1){
glTexCoordPointer(2, GL_FLOAT, 0, (const GLvoid*) &teapotTexCoords[0]);
glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) &teapotVertices[0]);
glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &teapotNormals[0]);
glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT,
(const GLvoid*) &teapotIndices[0]);
LOG("modelID %d", modelId);
}else{
glTexCoordPointer(2, GL_FLOAT, 0, (const GLvoid*) &bananaTexCoords[0]);
glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) &bananaVerts[0]);
glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &bananaNormals[0]);
glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);
LOG("modelID %d", modelId);
}
#else
QCAR::Matrix44F modelViewProjection;
SampleUtils::translatePoseMatrix(0.0f, 0.0f, kObjectScale,
&modelViewMatrix.data[0]);
SampleUtils::scalePoseMatrix(kObjectScale, kObjectScale, kObjectScale,
&modelViewMatrix.data[0]);
SampleUtils::multiplyMatrix(&projectionMatrix.data[0],
&modelViewMatrix.data[0] ,
&modelViewProjection.data[0]);
glUseProgram(shaderProgramID);
if(modelId == 0){
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaVerts[0]);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaNormals[0]);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaTexCoords[0]);
LOG("modelID %d in else", modelId);
}else{
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0,(const GLvoid*) &teapotVertices[0]);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &teapotNormals[0]);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0,(const GLvoid*) &teapotTexCoords[0]);
LOG("modelID %d in else", modelId);
}
glEnableVertexAttribArray(vertexHandle);
glEnableVertexAttribArray(normalHandle);
glEnableVertexAttribArray(textureCoordHandle);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, thisTexture->mTextureID);
glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE,
(GLfloat*)&modelViewProjection.data[0] );
if(modelId == 0){
glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);
LOG("modelID %d last", modelId);
}else{
glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT,
(const GLvoid*) &teapotIndices[0]);
LOG("modelID %d last", modelId);
}
SampleUtils::checkGlError("ImageTargets renderFrame");
#endif
}
glDisable(GL_DEPTH_TEST);
But still i am not able to see the teapot image . I can see the banana 3D model when i touch the screen.
I have included both Teapot.h and banan.h in cpp
Please guide me if this is not the way to achieve this goal.
Thanks in advance
Hi khushiv09, if it is about iOS, could you create a new thread in the iOS section please ?
https://developer.vuforia.com/forum/ar-technical-discussion/ios
Thanks.