"\n"
"void main(void)\n"
"{\n"
- " texcoord = gl_MultiTexCoord0.st + vec2(textureIndex, 0.0);\n"
+ " texcoord = gl_MultiTexCoord0.st + vec2(textureIndex, 0.0);\n"
" vec3 position = gl_Vertex.xyz * gl_Color.w + gl_Color.xyz;\n"
" gl_Position = gl_ModelViewProjectionMatrix * vec4(position,1.0);\n"
" vec3 ecPosition = vec3(gl_ModelViewMatrix * vec4(position, 1.0));\n"
// DonĀ“t track vertex color
material->setColorMode(Material::OFF);
material->setAmbient(Material::FRONT_AND_BACK,
- Vec4(.6f, .6f, .6f, 1.0f));
+ Vec4(.8f, .8f, .8f, 1.0f));
material->setDiffuse(Material::FRONT_AND_BACK,
- Vec4(.4f, .4f, .4f, 1.0f));
+ Vec4(.2f, .2f, .2f, 1.0f));
}
stateset->setAttributeAndModes(alphaFunc.get());
stateset->setAttribute(program.get());
if (node)
terrainGroup->addChild(node);
- if (use_random_objects) {
+ if (use_random_objects || use_random_vegetation) {
// Simple matrix for used for flipping models that have been oriented
// with the center of the tile but upside down.
osg::Matrix mAtt = flip * osg::Matrix::rotate(hlOr.osg());
// The inverse goes from world coordinates to Z up tile coordinates.
osg::Matrix world2Tile(osg::Matrix(hlOr.osg().conj()) * flip);
-
- tileGeometryBin.computeRandomObjects(matlib);
+
+ if (use_random_objects) {
+ tileGeometryBin.computeRandomObjects(matlib);
- if (tileGeometryBin.randomModels.getNumModels() > 0) {
- // Generate a repeatable random seed
- mt seed;
- mt_init(&seed, unsigned(123));
-
- std::vector<ModelLOD> models;
- for (unsigned int i = 0; i < tileGeometryBin.randomModels.getNumModels(); i++) {
- SGMatModelBin::MatModel obj = tileGeometryBin.randomModels.getMatModel(i);
- osg::Node* node = sgGetRandomModel(obj.model);
+ if (tileGeometryBin.randomModels.getNumModels() > 0) {
+ // Generate a repeatable random seed
+ mt seed;
+ mt_init(&seed, unsigned(123));
+
+ std::vector<ModelLOD> models;
+ for (unsigned int i = 0;
+ i < tileGeometryBin.randomModels.getNumModels(); i++) {
+ SGMatModelBin::MatModel obj
+ = tileGeometryBin.randomModels.getMatModel(i);
+ osg::Node* node = sgGetRandomModel(obj.model);
- // Create a matrix to place the object in the correct location, and then
- // apply the rotation matrix created above, with an additional random
- // heading rotation if appropriate.
- osg::Matrix mPos = osg::Matrix::translate(obj.position.osg());
- osg::MatrixTransform* position;
-
- if (obj.model->get_heading_type() == SGMatModel::HEADING_RANDOM) {
- // Rotate the object around the z axis.
- double hdg = mt_rand(&seed) * M_PI * 2;
- osg::Matrix rot(cos(hdg), -sin(hdg), 0, 0,
- sin(hdg), cos(hdg), 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1);
- position = new osg::MatrixTransform(rot * mAtt * mPos);
- } else {
- position = new osg::MatrixTransform(mAtt * mPos);
+ // Create a matrix to place the object in the correct
+ // location, and then apply the rotation matrix created
+ // above, with an additional random heading rotation if appropriate.
+ osg::Matrix transformMat(mAtt);
+ transformMat.postMult(osg::Matrix::translate(obj.position.osg()));
+ if (obj.model->get_heading_type() == SGMatModel::HEADING_RANDOM) {
+ // Rotate the object around the z axis.
+ double hdg = mt_rand(&seed) * M_PI * 2;
+ transformMat.preMult(osg::Matrix::rotate(hdg,
+ osg::Vec3d(0.0, 0.0, 1.0)));
+ }
+ osg::MatrixTransform* position =
+ new osg::MatrixTransform(transformMat);
+ position->addChild(node);
+ models.push_back(ModelLOD(position, obj.lod));
}
-
- position->addChild(node);
- models.push_back(ModelLOD(position, obj.lod));
+ RandomObjectsQuadtree quadtree((GetModelLODCoord(world2Tile)),
+ (AddModelLOD()));
+ quadtree.buildQuadTree(models.begin(), models.end());
+ randomObjects = quadtree.getRoot();
+ randomObjects->setName("random objects");
}
- RandomObjectsQuadtree quadtree((GetModelLODCoord(world2Tile)),
- (AddModelLOD()));
- quadtree.buildQuadTree(models.begin(), models.end());
- randomObjects = quadtree.getRoot();
- randomObjects->setName("random objects");
}
- if (use_random_vegetation)
- {
+ if (use_random_vegetation) {
// Now add some random forest.
tileGeometryBin.computeRandomForest(matlib);