| 261 | | // _primitiveSets.clear(); |
|---|
| 262 | | for(j=0; j<numRows-1; ++j) |
|---|
| 263 | | { |
|---|
| 264 | | osg::DrawElementsUInt* elements = new osg::DrawElementsUInt(GL_TRIANGLE_STRIP, numColumns*2); |
|---|
| 265 | | for(unsigned int i=0; i<numColumns; ++i) |
|---|
| 266 | | { |
|---|
| 267 | | unsigned int iv = j*numColumns + i; |
|---|
| 268 | | (*elements)[i*2] = iv + numColumns; |
|---|
| 269 | | (*elements)[i*2+1] = iv; |
|---|
| 270 | | } |
|---|
| | 263 | bool optimizeOrientations = _elevations!=0; |
|---|
| | 264 | |
|---|
| | 265 | if (!optimizeOrientations) |
|---|
| | 266 | { |
|---|
| | 267 | osg::notify(osg::NOTICE)<<"Old tesselation"<<std::endl; |
|---|
| | 268 | for(j=0; j<numRows-1; ++j) |
|---|
| | 269 | { |
|---|
| | 270 | osg::DrawElementsUInt* elements = new osg::DrawElementsUInt(GL_TRIANGLE_STRIP, numColumns*2); |
|---|
| | 271 | for(unsigned int i=0; i<numColumns; ++i) |
|---|
| | 272 | { |
|---|
| | 273 | unsigned int iv = j*numColumns + i; |
|---|
| | 274 | (*elements)[i*2] = iv + numColumns; |
|---|
| | 275 | (*elements)[i*2+1] = iv; |
|---|
| | 276 | } |
|---|
| | 277 | |
|---|
| | 278 | if (_terrainGeometry.valid()) _terrainGeometry->addPrimitiveSet(elements); |
|---|
| | 279 | |
|---|
| | 280 | if (_geometry.valid()) _geometry->addPrimitiveSet(elements); |
|---|
| | 281 | } |
|---|
| | 282 | } |
|---|
| | 283 | else |
|---|
| | 284 | { |
|---|
| | 285 | osg::notify(osg::NOTICE)<<"New tesselation"<<std::endl; |
|---|
| | 286 | |
|---|
| | 287 | osg::DrawElementsUInt* elements = new osg::DrawElementsUInt(GL_TRIANGLES); |
|---|
| | 288 | elements->reserve((numRows-1) * (numColumns-1) * 6); |
|---|
| | 292 | |
|---|
| | 293 | for(j=0; j<numRows-1; ++j) |
|---|
| | 294 | { |
|---|
| | 295 | for(unsigned int i=0; i<numColumns-1; ++i) |
|---|
| | 296 | { |
|---|
| | 297 | unsigned int i00 = j*numColumns + i; |
|---|
| | 298 | unsigned int i10 = i00+1; |
|---|
| | 299 | unsigned int i01 = i00+numColumns; |
|---|
| | 300 | unsigned int i11 = i01+1; |
|---|
| | 301 | float e00 = (*_elevations)[i00]; |
|---|
| | 302 | float e10 = (*_elevations)[i10]; |
|---|
| | 303 | float e01 = (*_elevations)[i01]; |
|---|
| | 304 | float e11 = (*_elevations)[i11]; |
|---|
| | 305 | |
|---|
| | 306 | if (fabsf(e00-e11)<fabsf(e01-e10)) |
|---|
| | 307 | { |
|---|
| | 308 | elements->push_back(i01); |
|---|
| | 309 | elements->push_back(i00); |
|---|
| | 310 | elements->push_back(i11); |
|---|
| | 311 | |
|---|
| | 312 | elements->push_back(i00); |
|---|
| | 313 | elements->push_back(i10); |
|---|
| | 314 | elements->push_back(i11); |
|---|
| | 315 | } |
|---|
| | 316 | else |
|---|
| | 317 | { |
|---|
| | 318 | elements->push_back(i01); |
|---|
| | 319 | elements->push_back(i00); |
|---|
| | 320 | elements->push_back(i10); |
|---|
| | 321 | |
|---|
| | 322 | elements->push_back(i01); |
|---|
| | 323 | elements->push_back(i10); |
|---|
| | 324 | elements->push_back(i11); |
|---|
| | 325 | } |
|---|
| | 326 | } |
|---|
| | 327 | } |
|---|