source: trunk/VUT/work/TestCullingTerrain/TerrainContentGenerator.cpp @ 74

Revision 74, 3.3 KB checked in by mattausch, 19 years ago (diff)

added support for release mode

Line 
1/**
2    \file
3        TerrainContentGenerator.cpp
4    \brief
5        Creates content for the terrain.
6*/
7#include "TerrainContentGenerator.h"
8
9/********************************************/
10/*  TerrainContentGenerator implementation  */
11/********************************************/
12//-----------------------------------------------------------------------
13TerrainContentGenerator::TerrainContentGenerator( SceneManager *sm, RayQueryExecutor *rayQueryEx )
14{
15        mSceneMgr = sm;
16        mRayQueryExecutor = rayQueryEx;
17
18        mMinPos = Vector3(-200.0f, -70.0f, 200.0f);
19        mMaxPos = Vector3(200.0f, 70.0f, 200.0f);
20
21        mMinAngle = 0;
22        mMaxAngle = 360;
23
24        mCount = 0;
25}
26//-----------------------------------------------------------------------
27void TerrainContentGenerator::generateScene( int numObjects )
28{
29        srand (time (0));
30       
31        Vector3 rotationRatio;
32        Vector3 translationRatio;
33
34        for(int i=0; i < numObjects; i++)
35        {
36                rotationRatio.x = rand() / (float) RAND_MAX;
37                rotationRatio.y = rand() / (float) RAND_MAX;
38                rotationRatio.z = rand() / (float) RAND_MAX;
39
40                translationRatio.x = rand() / (float) RAND_MAX;
41                translationRatio.y = rand() / (float) RAND_MAX;
42                translationRatio.z = rand() / (float) RAND_MAX;
43
44                generateSceneObject(translationRatio, rotationRatio, i, "sphere.mesh");
45        }
46}
47//-----------------------------------------------------------------------
48void TerrainContentGenerator::generateSceneObject(const Vector3 &translationRatio,
49                                         const Vector3 &rotationRatio, const int idx, const String& entName)
50{
51        // Setup the ray scene query
52        Real rotation = mMinAngle + rotationRatio.x * (mMaxAngle - mMinAngle);
53        Vector3 position = mMinPos + translationRatio * (mMaxPos - mMinPos);
54
55        position.y = 5000;
56   
57        Vector3 queryResult;
58
59        if(mRayQueryExecutor->executeRayQuery(&queryResult, position, Vector3::NEGATIVE_UNIT_Y))
60        {
61                char name[16];
62                sprintf( name, "%s%d", entName.c_str(), mCount++);
63
64                Entity *ent = mSceneMgr->createEntity(name, entName);
65                SceneNode *currentObject = mSceneMgr->getRootSceneNode()->
66                        createChildSceneNode(String(name) + "Node", queryResult);
67                currentObject->attachObject(ent);
68                currentObject->setScale(0.1f, 0.1f, 0.1f);
69        }
70}
71/****************************************/
72/*  RayQueryExecutor implementation     */
73/****************************************/
74//-----------------------------------------------------------------------
75RayQueryExecutor::RayQueryExecutor(SceneManager *sm)
76{
77        mRaySceneQuery = sm->createRayQuery(Ray());
78}
79//-----------------------------------------------------------------------
80RayQueryExecutor::~RayQueryExecutor()
81{
82        delete mRaySceneQuery;
83}
84//-----------------------------------------------------------------------
85bool RayQueryExecutor::executeRayQuery(Vector3 *result, const Vector3 &pos, const Vector3 &dir)
86{
87        return executeRayQuery(result, Ray(pos, dir));
88}
89
90bool RayQueryExecutor::executeRayQuery(Vector3 *result, const Ray &ray)
91{
92    mRaySceneQuery->setRay(ray);
93
94    // Perform the scene query
95    RaySceneQueryResult &queryResult = mRaySceneQuery->execute();
96    RaySceneQueryResult::iterator it = queryResult.begin();
97
98        if (it != queryResult.end() && it->worldFragment)
99        {
100                SceneQuery::WorldFragment* wf = it->worldFragment;
101
102                *result = wf->singleIntersection;
103                return true;
104        }
105
106        return false;
107}
Note: See TracBrowser for help on using the repository browser.