source: GTP/trunk/App/Demos/Illum/Standalone/StochasticIteration [DirectX]/ObjectVector.cpp @ 1808

Revision 1808, 3.1 KB checked in by szirmay, 18 years ago (diff)
Line 
1#include "dxstdafx.h"
2#include "d3ddefs.h"
3#include <cstdio>
4#include <ctime>
5#include <ostream>
6#include <cstdlib>
7#include <cmath>
8#include <vector>
9#include "vector4d.h"
10#include "color.h"
11#include "object.h"
12#include "ObjectVector.h"
13
14ObjectVector::ObjectVector(){
15        offsetSum=1;
16}
17       
18ObjectVector::~ObjectVector(){
19        vector <ObjectModel*>::iterator iter;
20        for(iter=models.begin();iter!=models.end();iter++){
21                SAFE_DELETE(*iter);
22        }
23        models.clear();
24}
25
26ObjectModel* ObjectVector::getObjectModel(UINT modelNum){
27        return (models.at(modelNum));
28}
29
30void ObjectVector::resetAllObjects(LPDIRECT3DDEVICE9 device){
31        vector <ObjectModel*>::iterator iter;
32        for(iter=models.begin();iter!=models.end();iter++){
33                (*iter)->resetDeviceObjects(device);
34        }
35}
36
37void ObjectVector::initAllObjects(LPDIRECT3DDEVICE9 device){
38        vector <ObjectModel*>::iterator iter;
39        for(iter=models.begin();iter!=models.end();iter++){
40                (*iter)->initDeviceObjects(device);
41        }
42}
43
44HRESULT ObjectVector::RenderAllWithFX(LPD3DXEFFECT m_pEffect,bool renderToAtlas,D3DXMATRIX modelview,D3DXMATRIX modelviewproj){
45        HRESULT hr;
46        vector <ObjectModel*>::iterator iter;
47        for(iter=models.begin();iter!=models.end();iter++){
48                V_RETURN((*iter)->RenderWithFX(m_pEffect,renderToAtlas,modelview,modelviewproj))
49        }
50        return S_OK;
51}
52
53void ObjectVector::getTriangleByIndex(UINT shooterIndex,Triangle& tri,Vector& vertex1,Vector& vertex2,Vector& vertex3,Vector& texcoord1,Vector& texcoord2,Vector& texcoord3){
54        UINT shooterSum=1;
55        if(models.size()<1){
56                return;
57        }
58        vector <ObjectModel*>::iterator iter;
59        for(iter=models.begin();iter!=models.end();iter++){
60                if(shooterIndex<shooterSum+(*iter)->ntriangles){
61                        assert(shooterIndex-shooterSum<(*iter)->ntriangles);
62                        int index=shooterIndex-shooterSum;
63                        tri=(*iter)->triangles[index];
64                        vertex1=(*iter)->vertices[tri.v[0]];
65                        vertex2=(*iter)->vertices[tri.v[1]];
66                        vertex3=(*iter)->vertices[tri.v[2]];
67                        texcoord1=(*iter)->texcoords[tri.t[0]];
68                        texcoord2=(*iter)->texcoords[tri.t[1]];
69                        texcoord3=(*iter)->texcoords[tri.t[2]];
70                        return;
71                }
72                else{
73                        shooterSum+=(*iter)->ntriangles;
74                }
75        }
76}
77       
78vector<ObjectModel*> ObjectVector::getAllObjectModels(){
79        return this->models;
80}
81       
82void ObjectVector::addObjectModel(ObjectModel& objectModel){
83        objectModel.setOffset(offsetSum);
84        offsetSum+=objectModel.ntriangles;
85        models.push_back(&objectModel);
86}
87
88bool ObjectVector::createAllD3DVertices(){
89        vector <ObjectModel*>::iterator iter;
90        for(iter=models.begin();iter!=models.end();iter++){
91                if((*iter)->isLoaded()){
92                        (*iter)->CreateD3DVertices();
93                }
94                else{
95                        return false;
96                }
97        }
98        return true;
99}
100
101void ObjectVector::removeObjectModel(UINT modelNum){
102        vector <ObjectModel*>::iterator iter;
103        int number=1;
104        bool found=false;
105        offsetSum=1;
106        for(iter=models.begin();iter!=models.end();iter++){
107                if(number==modelNum){
108                        models.erase(iter);
109                        found=true;
110                }
111                else{
112                        number++;
113                        (*iter)->setOffset(offsetSum);
114                        offsetSum+=(*iter)->ntriangles;
115                        if(found){
116                                (*iter)->CreateD3DVertices();
117                        }
118                }
119        }
120}
121
122void ObjectVector::removeAllObjectModels(){
123        models.clear();
124}
Note: See TracBrowser for help on using the repository browser.