random_racer/src/TerrainGenerator.cpp

Go to the documentation of this file.
00001 #include <algorithm>
00002 
00003 #include "ControlPointContainer.h"
00004 #include "Nurbs.h"
00005 
00006 #include "TerrainGenerator.h"
00007 
00008 using namespace VRS;
00009 
00010 
00011 namespace random_racer
00012 {
00013 
00014 TerrainGenerator::TerrainGenerator(
00015     SO<ControlPointContainer> p_container,
00016     double p_size,
00017     double p_spacing,
00018     unsigned int p_lod)
00019 {
00020     m_container = p_container;
00021     m_size      = p_size;
00022     m_spacing   = p_spacing;
00023     m_lod       = p_lod;
00024 
00025     // 512 in size => 16x16 ctrl points with 32.0 spacing
00026     m_nurbs = new Nurbs(round(m_size/m_spacing), m_spacing);
00027 }
00028 
00029 TerrainGenerator::~TerrainGenerator()
00030 {
00031 }
00032 
00033 void
00034 TerrainGenerator::generate(
00035     double p_x, double p_y, std::vector<VRS::Vector>* p_target)
00036 {
00037     // just a plane, needs a 2x2 Mesh in the Loader
00038     // p_target->push_back(Vector(0.0, 0.0, 0.0));
00039     // p_target->push_back(Vector(0.0, 0.0, m_size));
00040     // p_target->push_back(Vector(m_size, 0.0, 0.0));
00041     // p_target->push_back(Vector(m_size, 0.0, m_size));
00042 
00043     double correctX, correctY, offset;
00044 
00045     offset      = m_size/2.0;
00046     correctX    = ((p_x-offset) - floor((p_x-offset)/32.0)*32.0);
00047     correctY    = ((p_y-offset) - floor((p_y-offset)/32.0)*32.0);
00048 
00049     // std::cout << "lower left: " 
00050     //           << (p_x - offset) << " " << (p_y - offset) << std::endl
00051     //           << "correct: " << correctX << " " << correctY << std::endl;
00052 
00053     std::vector<VRS::Vector> temp;
00054 
00055     m_container->getPoints(p_x, p_y, &temp);
00056 
00057     // std::cout << "got " << temp.size() << " points from the container\n";
00058 
00059     m_nurbs->clear();
00060     m_nurbs->setCorrection(float(correctX), float(correctY));
00061 
00062     m_nurbs->fill(temp.begin(), temp.end(), p_x - offset, p_y - offset);
00063     m_nurbs->evaluate(m_lod, p_target);
00064 
00065     // this is just for reversing parts of the output to create
00066     // a better linestrip, should soon be removed.
00067     // std::vector<VRS::Vector>::iterator itBeg, itEnd;
00068     // for(unsigned int i = 1; i < 32; i += 2)
00069     // {
00070     //     itBeg  = p_target->begin();
00071     //     itBeg += i*32;
00072     //     itEnd  = itBeg + 32;
00073     // 
00074     //     std::reverse(itBeg, itEnd);
00075     // }
00076 }
00077 
00078 } // namespace random_racer

Generated on Fri May 11 21:01:58 2007 for Random Racer by  doxygen 1.5.1