We know how to create geometric objects and light already. Not let's combine this, add some textures to a couple of spheres, make them rotate a bit and voila: We have a Solar System Simulation!
The following code will create a sphere and assign a simple material and texture to it.
// create a sphere
Geode *sphere = new Geode();
sphere->addDrawable(new ShapeDrawable(new Sphere(Vec3(), 1)));
// create a simple material
Material *material = new Material();
material->setEmission(Material::FRONT, Vec4(0.8, 0.8, 0.8, 1.0));
// create a texture
// load image for texture
Image *image = osgDB::readImageFile("texture.png");
if (!image) {
std::cout << "Couldn't load texture." << std::endl;
return NULL;
}
osg::Texture2D *texture = new Texture2D;
texture->setDataVariance(Object::DYNAMIC);
texture->setFilter(Texture::MIN_FILTER, Texture::LINEAR_MIPMAP_LINEAR);
texture->setFilter(Texture::MAG_FILTER, Texture::LINEAR);
texture->setWrap(Texture::WRAP_S, Texture::CLAMP);
texture->setWrap(Texture::WRAP_T, Texture::CLAMP);
texture->setImage(image);
// assign the material and texture to the sphere
StateSet *sphereStateSet = sphere->getOrCreateStateSet();
sphereStateSet->ref();
sphereStateSet->setAttribute(material);
sphereStateSet->setTextureAttributeAndModes(0, texture, StateAttribute::ON);
As you can see it doesn't take much to add a texture to our scene. Combined with the other things we know already we can create some good looking Solar System Simulation. Download the complete source code to see how!
Since we use classes and textures here, we can't just drop the whole source code. Instead, you can download all needed files in a zip-archive: