In the previous examples, we have only featured single objects in a virtual environment using OpenGL ES. What if you want to have multiple 3D objects in a virtual environment? For example, showing a 3D character A and S together in the same virtual scene. Let's have a look at how we implement this. In order to draw multiple objects in a scene, I just need to call the draw functions of the 3D objects in the onDrawFrame function in the MyRenderer object. However, it may crash the program as the virtual 3D objects have different vertex and fragment shader programs. When just calling the draw functions, OpenGL may get confused and use the wrong shader programs for drawing the 3D object. In order to show the different objects with different vertex and fragment shader, I only need to add one line of code in the draw function of each virtual 3D object. I just need to call the glUseProgram function to tell the application to use the 3D objects' own shader programs. By doing this, you should see that the 3D character A and 3D character S are shown overlapping each other on the screen. Let's have a look at this in our program. I want to show the character A and character S. So I modify the MyRenderer object, and then in the CharacterA object, add the line to use the mProgram, the shading program of the object. So in the character S and also the arbitrary object Sphere. When you run the program, you'll see that it'll draw the 3D character A and the 3D character S. When drawing the two virtual 3D objects, the two objects are joined at the origin and merged together. How do you think we can separate them? To separate the two objects, we can move one of the objects along the x-axis using the translate function. To separate the two objects, I simply use the translate function to move the object S to the right by two units, and so I update the model matrix to translate for two units, then call them multiply MM function to update the MVM and mMVPMatrixes. Let's look at this in our example program. Let's modify our program to separate the two 3D objects. So I add the line translate, to translate the object to the right by two units and then used the multiplyMM to update the MVM and MVPMatrix. When you run the program, you will see that the character S has moved slightly to the right. In the next video, we'll look at how we can optimize the drawing of many 3D objects by using an approach called face calling.