Author: machiel.sleeuwaert
(2008/12/01 11:31) Over 3 years ago
249
RelativePath=".\SkyBox.h"
250
>
251
</File>
252
<Filter
253
Name="PhysX objects"
254
255
<File
256
RelativePath=".\BasicPhysXShapes.cpp"
257
258
259
260
RelativePath=".\BasicPhysXShapes.h"
261
262
263
</Filter>
264
265
Name="VMF parser"
266
267
268
RelativePath=".\OtherClasses.h"
269
RelativePath=".\UtilClasses.cpp"
270
271
272
273
RelativePath=".\UtilClasses.h"
274
275
276
RelativePath=".\vmfparser.cpp"
277
278
<FileConfiguration
Name="Debug|Win32"
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
279
280
RelativePath=".\vmfparser.h"
281
...
299
304
300
305
301
306
307
RelativePath=".\Camera2.cpp"
308
309
310
311
RelativePath=".\Camera2.h"
312
313
314
315
316
317
Name="VCCustomBuildTool"
318
319
320
321
302
RelativePath=".\MatrixClass.cpp"
322
303
323
324
410
430
411
431
412
432
433
434
Name="PhysX"
435
436
437
RelativePath=".\PhysX.cpp"
438
439
440
441
RelativePath=".\PhysX.h"
442
443
444
413
445
414
446
415
Name="Resource Files"
447
56
57
void BasicShape::Draw()
58
{
59
m_Shader->SetMaterial(&m_Mtrl);
m_Shader->SetWorld(&m_World);
60
m_Shader->Draw(this);
61
}
62
18
virtual ~BasicShape();
19
20
21
void DrawScene();
virtual void DrawScene();
22
void DeviceLost();
virtual void DeviceLost();
23
void DeviceReset();
virtual void DeviceReset();
24
25
void Draw();
virtual void Draw();
26
27
28
29
static const int BOX,SPHERE,TEAPOT,CYLINDER,TORUS;
30
31
32
private:
protected:
33
34
35
int m_Type;
36
ID3DXMesh *m_pDXMesh;
37
float m_a,m_b,m_c,m_d,m_e;
38
ColorShader* m_Shader;
39
// -------------------------
40
// Disabling default copy constructor and default assignment operator.
41
// If you get a linker error from one of these functions, your class is internally trying to use them. This is
42
// an error in your class, these declarations are deliberately made without implementation because they should never be used.
43
44
BasicShape(const BasicShape& t);
45
BasicShape& operator=(const BasicShape& t);
46
47
};
16
CCamera::CCamera( D3DXVECTOR3 vPos ):m_vectPosition(vPos),m_fSpeed(0.01f),m_bNeedUpdated(true)
17
D3DXQuaternionIdentity( &m_quatOrientation );
D3DXMatrixIdentity( & m_View );
92
91
93
D3DXMATRIX matTemp;
94
D3DXMatrixLookAtLH(&matTemp , &vFrom,&vTo, &vUp);
95
96
97
D3DXQuaternionRotationMatrix(&m_quatOrientation , &matTemp);
98
99
m_bNeedUpdated = true;
100
101
102
103
104
105
106
107
108
109
110
111
112
void CCamera::Update()
113
114
115
ViewProj=m_View;
ViewProj*=m_Proj;
void GetEye4(D3DXVECTOR4& Eye4)
if (m_bNeedUpdated) Update();
48
Eye4.x = m_vectPosition.x;
49
Eye4.y = m_vectPosition.y;
50
Eye4.z = m_vectPosition.z;
51
52
53
54
void GetInverseViewMatrix(D3DXMATRIX& ViewInverse)
55
D3DXMatrixInverse(&ViewInverse, 0, &m_View);
63
void SetSpeed(float fSpeed) { m_fSpeed = max(0.0f,fSpeed); }
64
65
66
DirectInput::DirectInput():
KeyboardCoopFlags(DISCL_NONEXCLUSIVE|DISCL_FOREGROUND),
MouseCoopFlags(DISCL_NONEXCLUSIVE|DISCL_FOREGROUND),
m_pDIinterface(0),m_pKeyboard(0),m_pMouse(0),AbsMousePos(0,0,0),RelMousePos(0,0,0),m_Sensivity(0.002f)
m_pDIinterface(0),m_pKeyboard(0),m_pMouse(0),AbsMousePos(0,0,0),RelMousePos(0,0,0),m_Sensivity(0.002f),m_KeyboardAquired(true),m_MouseAquired(true)
InitAbsMouse();
HR(m_pDIinterface->CreateDevice(GUID_SysKeyboard, &m_pKeyboard, 0));
HR(m_pKeyboard->SetDataFormat(&c_dfDIKeyboard));
HR(m_pKeyboard->SetCooperativeLevel(XE->m_hwnd, KeyboardCoopFlags));
HR(m_pKeyboard->Acquire());
if( FAILED(m_pKeyboard->Acquire()))
m_KeyboardAquired= false;
HR(m_pDIinterface->CreateDevice(GUID_SysMouse, &m_pMouse, 0));
HR(m_pMouse->SetDataFormat(&c_dfDIMouse2));
HR(m_pMouse->SetCooperativeLevel(XE->m_hwnd, MouseCoopFlags));
HR(m_pMouse->Acquire());
if( FAILED(m_pMouse->Acquire()));
//m_MouseAquired= false;
void DirectInput::InitAbsMouse(){
72
67
if( FAILED(m_pKeyboard->GetDeviceState(sizeof(m_KeyboardState), (void**)&m_KeyboardState)) )
73
68
74
69
75
m_KeyboardAquired = true;
70
// Try to acquire for next time we poll.
76
71
m_pKeyboard->Acquire();
77
78
79
80
return;
81
82
83
85
if( FAILED(m_pMouse->GetDeviceState(sizeof(DIMOUSESTATE2), (void**)&m_MouseState)) )
86
87
88
m_MouseAquired =true;
89
m_pMouse->Acquire();
90
FAILED(m_pMouse->Acquire());
84
116
128
117
bool DirectInput::KeyDown(unsigned char key)
129
118
130
119
return (m_KeyboardState[key] & 0x80) != 0;
131
if(m_KeyboardAquired)
132
133
134
return false;
120
135
121
136
122
137
123
bool DirectInput::MouseButtonDown(int button)
138
124
139
125
return (m_MouseState.rgbButtons[button] & 0x80) != 0;
140
if(m_MouseAquired)
141
142
143
126
144
127
145
146
float m_Sensivity;
bool m_KeyboardAquired;
bool m_MouseAquired;
4
#include "PlaneNormal.h"
5
#include "vmfparser.h"
6
#include "SkyBox.h"
7
#include "BasicPhysXShapes.h"
8
Game::Game()
9
10
m_SkyBox = new SkyBox(300.0f,300.0f,300.0f);
m_ObjectList.push_back(m_SkyBox);
m_PhysXCube = new MeshShapePhysX(BasicShape::BOX,1.0f,1.0f,1.0f);
m_PhysXCube->Translate(0,6,0);
m_PhysXCube->SetPhysXBody(MeshShapePhysX::RIGID);
m_PhysXCube->SetMaterialColor(1.0f,0.8f,0.3f,1);
m_ObjectList.push_back(m_PhysXCube);
m_MyChaseCam = new TargetCamera();
XE->GetMC()->AddCamera(m_MyChaseCam);
mrot = 0;
vmfp = new vmfparser();
void Game::UpdateScene(float dt)
//mrot+=D3DX_PI/2*dt;
mrot+=D3DX_PI/2*dt;
m_FpsCounter->tick(dt);
void Game::DrawScene(RECT rect)
D3DXMATRIX wor = *m_PhysXCube->GetWorldMatrix();
D3DXVECTOR3 transformed = D3DXVECTOR3(0,1.0f,0);
D3DXVec3TransformCoord(&transformed,&transformed,&wor);
if(DI->KeyDown(DIK_UPARROW))
m_PhysXCube->AddForce(D3DXVECTOR3(0,0,122.1f));
if(DI->KeyDown(DIK_DOWNARROW))
m_PhysXCube->AddForce(D3DXVECTOR3(0,0,-122.1f));
if(DI->KeyDown(DIK_LEFT))
m_PhysXCube->AddForce(D3DXVECTOR3(-122,0,0));
if(DI->KeyDown(DIK_RIGHT))
m_PhysXCube->AddForce(D3DXVECTOR3(122,0,0));
m_MyChaseCam->LookAt(transformed+D3DXVECTOR3(0.0f,0.0f,0.0f),transformed+D3DXVECTOR3(0.0f,0.0f,1.0f),D3DXVECTOR3(0.0f,1.0f,0.0f));
m_FpsCounter->paint();
for(UINT i=0;i<m_ObjectList.size();++i)
vmfp->Draw();
147
class BasicShape;
class Abstract3Dobject;
class vmfparser;
class MeshShapePhysX;
11
class TargetCamera;
12
class Game:public AbstractGame
13
14
public:
15
Abstract3Dobject *m_Textured2;
Abstract3Dobject *m_Textured3;
MeshShapePhysX *m_PhysXCube;
Abstract3Dobject *m_SkyBox;
vector<Abstract3Dobject*> m_ObjectList;
vmfparser* vmfp;
TargetCamera* m_MyChaseCam;
FPScounter* m_FpsCounter;
float mrot;
1
#pragma once
2
3
#define NOMINMAX //physX needs this
#include <windows.h>
#include "util.h"
#include "Config.h"
#include <tchar.h>
using namespace std;
#ifdef _UNICODE // extra unicode defines
#define tstring wstring
#define tcin wcin
#define WIDTH 800
#define XE XineEngine::GetSingleton()
#define DI DirectInput::GetSingleton()
#define PS ProShaderClass::GetSingleton()
#define PX PhysX::GetSingleton()
struct MOUSE {
MOUSE( int x, int y, int z ):x(x),y(y),z(z)
#include "DirectInput.h"
#include "Abstract3Dobject.h"
MatrixClass::MatrixClass():m_pCamera(0),m_Eye4(0,0,0,0)
MatrixClass::MatrixClass():m_pCamera(0),m_Eye4(0,0,0,0),m_CurrentCamera(0),m_F4pressed(false)
m_pCamera = new CCamera(D3DXVECTOR3(0, 0.0f,6.0f));
TargetCamera* tempcamera;
tempcamera= new TargetCamera();
tempcamera->LookAt(D3DXVECTOR3(0, 5,7),D3DXVECTOR3(0, 2.0f,0.0f),D3DXVECTOR3(0,1,0));
m_vCameras.push_back(tempcamera);
m_pCamera->SetLookAt(D3DXVECTOR3(0, 5,7),D3DXVECTOR3(0, 2.0f,0.0f),D3DXVECTOR3(0, 1,0));
tempcamera = new TargetCamera();
tempcamera->LookAt(D3DXVECTOR3(10.0f, 5.0f,7.0f),D3DXVECTOR3(0.0f, 2.0f,0.0f),D3DXVECTOR3(0.0f,1.0f,0.0f));
// D3DXMATRIX comp1;
// D3DXMatrixLookAtLH(&comp1 , &D3DXVECTOR3(0, 5,7),&D3DXVECTOR3(0, 2.0f,0.0f), &D3DXVECTOR3(0, 1,0));
m_pCamera = m_vCameras[m_CurrentCamera];
m_Light.dirW = D3DXVECTOR3(2.0f, -1.0f, 1.0f);
D3DXVec3Normalize(&m_Light.dirW, &m_Light.dirW);
m_Light.ambient = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);
MatrixClass::~MatrixClass()
delete m_pCamera;
for(UINT i=0;i<m_vCameras.size();++i)
delete m_vCameras.at(i);
void MatrixClass::CalculateAllMatrixes()
int modifier =1;
if(DI->KeyDown(DIK_F4) && !m_F4pressed)
if((m_CurrentCamera+1)<m_vCameras.size())
++m_CurrentCamera;
}else{
m_CurrentCamera = 0;
m_F4pressed = true;
if(!DI->KeyDown(DIK_F4))
m_F4pressed = false;
float modifier =0.05f;
if(DI->MouseButtonDown(2)){
m_pCamera->Pitch(DI->GetRelMousePos().y);
if(DI->KeyDown(DIK_LSHIFT)){
modifier =10;
modifier =0.30f;
if(DI->KeyDown(DIK_S)){
m_pCamera->Move(-1*modifier);
m_pCamera->Move(-1.0f*modifier);
if(DI->KeyDown(DIK_W)){
m_pCamera->Move(1*modifier);
m_pCamera->Move(1.0f*modifier);
if(DI->KeyDown(DIK_Q)){
if(DI->KeyDown(DIK_A)){
m_pCamera->Strafe(-1*modifier);
m_pCamera->Strafe(-1.0f*modifier);
if(DI->KeyDown(DIK_D)){
m_pCamera->Strafe(1*modifier);
m_pCamera->Strafe(1.0f*modifier);
m_pCamera->GetViewProjectionMatrix(m_ViewProj);
m_pCamera->GetInverseViewMatrix(m_ViewInverse);
//m_pCamera->GetInverseViewMatrix(m_ViewInverse);
m_pCamera->GetEye4(m_Eye4);
//m_pCamera->GetEye4(m_Eye4);
light = m_Light;
// void MatrixClass::DrawWithShader(Abstract3Dobject *obj)
// {
//
// ID3DXEffect* Effect;
// char alphamode = obj->GetAlphaMode();
// Effect = obj->GetEffect();
// //get handles to shader params
// m_hWorld = Effect->GetParameterByName(0, "g_World");
// m_hWorldViewProj = Effect->GetParameterByName(0, "g_WorldViewProj");
// m_hWoldInvTrans = Effect->GetParameterByName(0, "g_WorldInvTrans");
// m_hViewInv = Effect->GetParameterByName(0, "g_ViewInv");
// m_hMtrl = Effect->GetParameterByName(0, "g_Mtrl");
// m_hLight = Effect->GetParameterByName(0, "g_Light");
// m_hTex = Effect->GetParameterByName(0, "g_Tex");//texture
// m_hVecEye = Effect->GetParameterByName(0, "g_Eye");//texture
// if(obj->GetTexture())
// Effect->SetTexture(m_hTex,obj->GetTexture());
// HR(Effect->SetValue(m_hMtrl,obj->GetMtrl(),sizeof(D3DMATERIAL9)));
// //First calculate final world (including parent worlds transforms
// D3DXMATRIX* World = obj->GetWorldMatrix();
// HR(Effect->SetMatrix(m_hWorldViewProj,&(*World*m_ViewProj)));
// // D3DXMATRIX WorldInvTrans;
// // D3DXMatrixInverse(&WorldInvTrans, 0, World);
// // D3DXMatrixTranspose(&WorldInvTrans, &WorldInvTrans);
// // HR(Effect->SetMatrix(m_hWoldInvTrans,&WorldInvTrans));
// HR(Effect->SetMatrix(m_hViewInv,&m_ViewInverse));
// HR(Effect->SetVector(m_hVecEye,&m_Eye4));
// HR(Effect->SetMatrix(m_hWorld,World));
// HR(Effect->SetValue(m_hLight, &m_Light, sizeof(m_Light)));
// UINT numPasses = 0;
// HR(Effect->Begin(&numPasses, 0));
// for(UINT i=0;i<numPasses;++i)
// HR(Effect->BeginPass(i));
// obj->DrawScene();
// if(alphamode == 't'){
// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHATESTENABLE,true));
// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL));
// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHAREF,100));
// }
// if(alphamode == 'b'){
// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHABLENDENABLE,true));
148
// HR(XE->GetDevice()->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA));
149
// HR(XE->GetDevice()->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA));
150
151
152
// HR(Effect->EndPass());
153
154
// HR(Effect->End());
155
156
157
#include "Camera.h"
#include "Camera2.h"
#include "XineEngine.h"
MatrixClass();
~MatrixClass();
void CalculateAllMatrixes();
// void DrawWithShader(Abstract3Dobject *obj);
void GetViewProjectionmatrix(D3DXMATRIX& ViewProj);
void GetLight(DirLight& light);
void AddCamera(TargetCamera* T)
m_vCameras.push_back(T);
CCamera *m_pCamera;
// D3DXHANDLE m_hWorld;
vector<TargetCamera*> m_vCameras;
// D3DXHANDLE m_hWorldViewProj;
// D3DXHANDLE m_hWoldInvTrans;
// D3DXHANDLE m_hViewInv;
// D3DXHANDLE m_hVecEye;
// D3DXHANDLE m_hLight;
// D3DXHANDLE m_hMtrl;
// D3DXHANDLE m_hTex;
int m_CurrentCamera;
TargetCamera *m_pCamera;
bool m_F4pressed;
DirLight m_Light;
D3DXMATRIX m_ViewProj;
D3DXMATRIX m_ViewInverse;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
AddressU = WRAP;
AddressU = CLAMP;
AddressV = WRAP;
AddressV = CLAMP;
//AddressU = MIRROR;
//AddressV = MIRROR;
output.Tex=input.Tex;//Texture coordinaten kopiëren
output.Tex.x *= -1;
//output.Tex.x *= -1;
return output;
//--------------------------------------------------------------------------------------
m_pIndexBuffer->Release();
m_pVertexBuffer->Release();
for(int i=0;i<m_vSkyBoxTextures.size();++i)
for(UINT i=0;i<m_vSkyBoxTextures.size();++i)
m_vSkyBoxTextures.at(i)->Release();
void SkyBox::DrawScene()
HR(XE->GetDevice()->SetRenderState(D3DRS_CULLMODE,D3DCULL_CW));
HR(XE->GetDevice()->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(Verticeformat)));
HR(XE->GetDevice()->SetIndices(m_pIndexBuffer));
HR(XE->GetDevice()->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW));
void SkyBox::Draw()
int i=0;
//front
v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,0,1);
v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,1,1);
v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,0,0);
v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,1,0);
v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,1,0);
v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,0,0);
v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,1,1);
v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,0,1);
//back
v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,0,1);
v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,1,1);
v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,0,0);
v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,1,0);
v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,1,0);
v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,0,0);
v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,1,1);
v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,0,1);
//left
//right
//Top
v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,1,1);
v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,0,1);
v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,0,1);
v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,1,1);
//Bottom
v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,0,0);
v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,0,0);
v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,1,0);
v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,1,0);
for(int teller=0;teller<m_NumVertices;teller++)
161
HR(m_pIndexBuffer->Lock(0, 0, (void**)&k, 0));
162
163
// Front face.
164
k[0] = 0; k[1] = 1; k[2] = 2;
k[0] = 0; k[1] = 2; k[2] = 1;
165
k[3] = 0; k[4] = 2; k[5] = 3;
k[3] = 0; k[4] = 3; k[5] = 2;
166
167
// Back face.
168
k[6] = 4; k[7] = 5; k[8] = 6;
k[6] = 4; k[7] = 6; k[8] = 5;
169
k[9] = 4; k[10] = 6; k[11] = 7;
k[9] = 4; k[10] = 7; k[11] = 6;
170
171
// Left face.
172
k[12] = 8; k[13] = 9; k[14] = 10;
k[12] = 8; k[13] =10; k[14] = 9;
173
k[15] = 8; k[16] = 10; k[17] = 11;
k[15] = 8; k[16] = 11; k[17] = 10;
174
175
// Right face.
176
k[18] = 12; k[19] = 13; k[20] = 14;
k[18] = 12; k[19] = 14; k[20] = 13;
177
k[21] = 12; k[22] = 14; k[23] = 15;
k[21] = 12; k[22] = 15; k[23] = 14;
178
179
// Top face.
180
k[24] = 16; k[25] = 17; k[26] = 18;
k[24] = 16; k[25] = 18; k[26] = 17;
181
k[27] = 16; k[28] = 18; k[29] = 19;
k[27] = 16; k[28] = 19; k[29] = 18;
182
183
// Bottom face.
184
k[30] = 20; k[31] = 21; k[32] = 22;
k[30] = 20; k[31] = 22; k[32] = 21;
185
k[33] = 20; k[34] = 22; k[35] = 23;
k[33] = 20; k[34] = 23; k[35] = 22;
186
187
HR(m_pIndexBuffer->Unlock());
188
#include "OtherClasses.h"
#include "UtilClasses.h"
Brush::Brush():Abstract3Dobject(),m_NumVertices(0),m_NumIndices(0)
Brush::Brush():Abstract3Dobject(),m_NumVertices(0),m_NumIndices(0),m_Center(D3DXVECTOR3(0.0f,0.0f,0.0f)),m_Scale(0.1f)
DeviceReset();
SetMaterialColor(1,0,0,1);
Brush::~Brush()
DeviceLost();
void Brush::AddVerticeToPoly(int index,D3DXVECTOR3 Vertice)
int numberoffobjectstoadd = (index+1) - polys.size(); //size the vector
for(;numberoffobjectstoadd>0;--numberoffobjectstoadd) //size the vector
void Brush::BuildBuffersAndPhysX()
polys.push_back(new Poly()); //size the vector
polys.at(index)->AddVertice(Vertice); //add vertice
void Brush::debug()
for(UINT i=0;i<polys.size();++i)
m_Center+=polys.at(i)->CalculateCenter();
polys.at(i)->MakeReadyForConversion(); //sorts vertices
polys.at(i)->MakeReadyForConversion();
polys.at(i)->GetNumberOfVerticesAndIndices(m_NumVertices,m_NumIndices);
m_Center/=(float)polys.size();
polys.at(i)->TranslateTo(m_Center); //puts the object at 0,0,0
HR(XE->GetDevice()->CreateVertexBuffer(m_NumVertices * sizeof(VERTEXSTRUCT), D3DUSAGE_WRITEONLY, 0, D3DPOOL_MANAGED , &m_pVertexBuffer, 0));
if(VerticesInBuffer!=m_NumVertices)
VerticesInBuffer=VerticesInBuffer;
VerticesInBuffer=VerticesInBuffer;//error!
if(IndexesInBuffer!=m_NumIndices)
IndexesInBuffer=IndexesInBuffer;
IndexesInBuffer=IndexesInBuffer;//error!
D3DXVECTOR3 minBounds,maxBounds;
D3DXComputeBoundingBox((D3DXVECTOR3*)v,m_NumVertices, sizeof(VERTEXSTRUCT), &minBounds, &maxBounds);
HR(m_pVertexBuffer->Unlock());
Translate(m_Center.x,m_Center.y,m_Center.z);
Scale(m_Scale,m_Scale,m_Scale);
minBounds*=m_Scale;
maxBounds*=m_Scale;
NxActorDesc ActorDesc;
ActorDesc.body =0; //this thing doesnt move so no body
void Brush::BuildVertexBuffer()
NxBoxShapeDesc BoxShapeDesc2;
BoxShapeDesc2.dimensions=NxVec3(abs((minBounds.x-maxBounds.x))/2,abs((minBounds.y-maxBounds.y))/2,abs((minBounds.z-maxBounds.z))/2);
BoxShapeDesc2.mass = 1; //static, mass, don't know if we need this, just put it at 1 to be sure
ActorDesc.shapes.push_back(&BoxShapeDesc2);
NxMat34 mat;
mat.setColumnMajor44(m_World);
ActorDesc.globalPose = mat;
ActorDesc.density = 10.0f;
/*m_pActor = */PhysX::GetSingleton()->GetScene()->createActor(ActorDesc); //we don't need the pointer
void Brush::BuildIndexBuffer()
void Brush::AddPoly(Poly* p)
polys.push_back(p);
// for(int i=0;i<size;++i)
BuildBuffersAndPhysX();
// for(int j=(i+1);j<size;++j)
// for(int k=(j+1);k<size;++k)
// bool IsInsideMesh = false;
// D3DXVECTOR3 temp;
// if(!GetIntersection (polys[i], polys[j], polys[k], temp ))
// continue;
// for(int m = 0; m<size;++m)
// // Test if the point is outside the brush
// D3DXVECTOR3 Normal = polys[m]->m_Normal;
// float d = polys[m]->m_DistanceToOrigin;
// float testvalue = D3DXVec3Dot( &Normal, &temp ) - d;
// if ( testvalue > 0.1f )
// IsInsideMesh = false; // NOT INSIDE MESH
// if(!IsInsideMesh)
// break;
// IsInsideMesh = false;
// for(UINT i=0;i<polys.size();++i)
// if(polys.at(i)->DoesPointExists(temp))
// IsInsideMesh = true;
158
159
160
// if(IsInsideMesh)
// ++notfoundpoints;
// AddVerticeToPoly(i,temp);
// AddVerticeToPoly(j,temp);
// AddVerticeToPoly(k,temp);
// notfoundpoints=notfoundpoints;
debug();
bool Brush::GetIntersection ( const Poly* a, const Poly* b, const Poly* c, D3DXVECTOR3 &v )
189
190
191
192
D3DXVECTOR3 cross;
193
D3DXVec3Cross(&cross,&b->m_Normal,&c->m_Normal);
194
float denom = D3DXVec3Dot(&a->m_Normal,&cross);
195
196
if ( abs ( denom ) < 0.00000001f ) // chck if zero, using this for rounding errors
197
198
199
200
201
202
D3DXVec3Cross(&cross,&a->m_Normal,&b->m_Normal);
203
204
v=(*D3DXVec3Cross(&cross,&a->m_Normal,&b->m_Normal)*c->m_DistanceToOrigin + *D3DXVec3Cross(&cross,&b->m_Normal,&c->m_Normal)*a->m_DistanceToOrigin + *D3DXVec3Cross(&cross,&c->m_Normal,&a->m_Normal)*b->m_DistanceToOrigin) / denom;
205
206
return true;
207
208
209
void Brush::DeviceLost()
210
211
delete m_Shader;
227
228
void Brush::Draw()
229
ResetWorldMatrix();
230
231
232
233
234
235
//////////////////////////////////////////////////
236
//POLYCLASS
237
238
Poly::Poly(D3DXVECTOR3 p1, D3DXVECTOR3 p2, D3DXVECTOR3 p3):m_MaxDifference(0.7f),m_DistanceToOrigin(0)
Poly::Poly(D3DXVECTOR3 p1, D3DXVECTOR3 p2, D3DXVECTOR3 p3):m_MaxDifference(0.00001f),m_DistanceToOrigin(0),m_Center(D3DXVECTOR3(0,0,0))
239
240
m_vVertices.push_back(p1);
241
m_vVertices.push_back(p2);
246
D3DXVec3Normalize(&m_Normal,&-m_Normal);
247
248
m_DistanceToOrigin = D3DXVec3Dot(&m_Normal,&p3);
Poly::Poly():m_MaxDifference(0.7f)
Poly::~Poly()
void Poly::GetNumberOfVerticesAndIndices(int &n,int &k)
//////////////////////////////////////////////////////////////////////////
//index and vertice buffer code
n+=m_vVertices.size();
k+=(m_vVertices.size()-2)*3;
void Poly::PolyFix(Poly* p)
for(int i=2;i<m_vVertices.size();++i)
for(int j=0;j<2;++j)
D3DXVECTOR3 minus = p->m_vVertices[j] - m_vVertices[i];
if(IsKindaEqual(minus))
m_vVertices[i] = p->m_vVertices[j];
282
void Poly::CheckIfPointsAreOnThisPoly(Poly* P)
283
284
if(IsKindaEqual(m_Normal+P->m_Normal))
285
286
for(int j=0;j<3;++j)
287
288
D3DXVECTOR3 temp = P->m_vVertices[j];
289
290
float testvalue = D3DXVec3Dot( &m_Normal, &temp ) - m_DistanceToOrigin;
291
if ( testvalue ==0 /*< 0.05f && testvalue > -0.05f*/ )
292
293
AddVertice(temp);
294
295
296
297
298
if(m_vVertices.size()>4)
int sdfsdfsdf =1;
bool Poly::DoesPointExists(D3DXVECTOR3& point)
//search for the point in the first 3 vertices, these are ABSOLUTELY correct(directly from the file)
D3DXVECTOR3 minus = m_vVertices[j] - point;
point = m_vVertices[j];
void Poly::AddVertice(D3DXVECTOR3 vertice)
if(!DoesVerticeExists(vertice))
m_vVertices.push_back(vertice);
325
326
void Poly::AddVerticesToBuffer(VERTEXSTRUCT* v,WORD* k,int &VerticesInBuffer,int &IndicesInBuffer)
327
328
int firstvertice = VerticesInBuffer;
344
345
346
347
bool Poly::DoesVerticeExists(D3DXVECTOR3 d3dv)
348
349
if (m_vVertices.size()<1)
350
212
213
351
214
215
216
217
//make this poly ready for use code
218
219
void Poly::TranslateTo(D3DXVECTOR3& T)
220
352
for(UINT i=0;i<m_vVertices.size();++i)
221
353
222
354
D3DXVECTOR3 minus = m_vVertices.at(i) -d3dv;
223
m_vVertices.at(i)-=T;
355
356
357
224
358
359
225
360
226
361
bool Poly::IsKindaEqual(D3DXVECTOR3 minus)
D3DXVECTOR3& Poly::CalculateCenter()
362
363
D3DXVECTOR3 upperzero = D3DXVECTOR3(m_MaxDifference,m_MaxDifference,m_MaxDifference);
//must call this before calling MakeReadyForConversion
364
D3DXVECTOR3 lowerzero = D3DXVECTOR3(-m_MaxDifference,-m_MaxDifference,-m_MaxDifference);
//also returns center of this poly for calculating center of this brush
365
for(int i=0;i<m_vVertices.size();++i)
366
if(minus.x < upperzero.x && minus.y < upperzero.y && minus.z < upperzero.z && minus.x > lowerzero.x && minus.y > lowerzero.y && minus.z > lowerzero.z)
367
m_Center+= m_vVertices.at(i);
368
369
m_Center /= (float)m_vVertices.size();
return m_Center;
370
371
372
void Poly::MakeReadyForConversion()
373
374
//sorts vertices
375
m_Center = D3DXVECTOR3(0,0,0);
376
int size = m_vVertices.size();
377
378
for(int i=0;i<size;++i)
379
380
381
382
m_Center /= (float)size;
383
242
384
243
for(int j=0;j<(m_vVertices.size()-1);++j)
385
for(int j=0;j<(size-1);++j)
386
244
387
swap(m_vVertices[j+1],m_vVertices[FindNextVertice(j)]);
245
388
389
390
391
392
393
float Poly::GetAngleBetweenPoints(D3DXVECTOR3& p1, D3DXVECTOR3& p2)
394
//part of sorting
395
D3DXVECTOR3 norm1;
396
D3DXVECTOR3 norm2;
397
405
406
407
int Poly::FindNextVertice(int VerticeNow)
408
409
float previousangle = 0;
int smallest = VerticeNow;
for(int i=(VerticeNow+1);i<m_vVertices.size();++i)
for(UINT i=(VerticeNow+1);i<m_vVertices.size();++i)
416
417
418
return smallest;
///////////// end of polyclass
//add vertice code
if(!DoesVerticeExists(vertice))//could happen in some rare cases
//checks if points of the other poly are on this poly, and add them is they lie on this poly
329
330
if(m_Normal == P->m_Normal)
331
332
333
for(int i=0;i<3;++i)
334
335
D3DXVECTOR3 temp = P->m_vVertices[i];
336
337
338
339
if ( testvalue < 1.8f && testvalue > -1.8f )
340
341
342
343
converterstream >> tempvector.x;
break;
case 1:
converterstream >> tempvector.z;
converterstream >> tempvector.z;//to r handed
case 2:
converterstream >> tempvector.y;
converterstream >> tempvector.y;//to r handed
++found;
void StartParsingFile(tstring filename);
void ParseSolid(tifstream& myfile);
Poly* ParsePlane(tstring PlaneString);
//bool GetIntersection ( const plane &a, const plane &b, const plane &c, D3DXVECTOR3 &v );
bool find(tstring WhatTofind);
tstring m_Line;
#include "Game.h"
#include "MatrixClass.h"
#include "PhysX.h"
XineEngine* XineEngine::SINGLETONPOINTER = 0;
delete DI;
delete PX;
int XineEngine::Run(HINSTANCE hInstance, int cmdShow)
//m_3D9Device->SetCursorProperties(GetSystemMetrics(SM_CXSCREEN)/2,GetSystemMetrics(SM_CYSCREEN),)
PX->Init();
m_pGame = new Game();
void XineEngine::Resize(RECT R)
//m_pPhysX->FetchResults();
PX->FetchResults();
m_pGame->UpdateScene(dt);
//m_pPhysX->Simulate(dt);
PX->Simulate(dt);
DrawScene();
RelativePath=".\OtherClasses.h"RelativePath=".\UtilClasses.cpp"RelativePath=".\UtilClasses.cpp"RelativePath=".\UtilClasses.h"<FileConfigurationName="Debug|Win32"><ToolName="VCCLCompilerTool"/></FileConfiguration>{{virtual void DrawScene();virtual void DeviceLost();virtual void DeviceReset();virtual void Draw();private:protected:// -------------------------// Disabling default copy constructor and default assignment operator.// If you get a linker error from one of these functions, your class is internally trying to use them. This is// an error in your class, these declarations are deliberately made without implementation because they should never be used.// -------------------------BasicShape(const BasicShape& t);BasicShape& operator=(const BasicShape& t);{{{{void GetEye4(D3DXVECTOR4& Eye4){if (m_bNeedUpdated) Update();Eye4.x = m_vectPosition.x;Eye4.y = m_vectPosition.y;Eye4.z = m_vectPosition.z;}void GetInverseViewMatrix(D3DXMATRIX& ViewInverse){if (m_bNeedUpdated) Update();D3DXMatrixInverse(&ViewInverse, 0, &m_View);}void SetSpeed(float fSpeed) { m_fSpeed = max(0.0f,fSpeed); }m_pDIinterface(0),m_pKeyboard(0),m_pMouse(0),AbsMousePos(0,0,0),RelMousePos(0,0,0),m_Sensivity(0.002f),m_KeyboardAquired(true),m_MouseAquired(true){{HR(m_pKeyboard->Acquire());if( FAILED(m_pKeyboard->Acquire())){m_KeyboardAquired= false;}HR(m_pMouse->Acquire());if( FAILED(m_pMouse->Acquire()));{//m_MouseAquired= false;}void DirectInput::InitAbsMouse(){void DirectInput::InitAbsMouse(){{{m_KeyboardAquired = true;m_pKeyboard->Acquire();if( FAILED(m_pKeyboard->Acquire())){m_KeyboardAquired= false;}{{m_MouseAquired =true;m_pMouse->Acquire();FAILED(m_pMouse->Acquire());{//m_MouseAquired= false;}{{return (m_KeyboardState[key] & 0x80) != 0;if(m_KeyboardAquired)return (m_KeyboardState[key] & 0x80) != 0;return false;{{return (m_MouseState.rgbButtons[button] & 0x80) != 0;if(m_MouseAquired)return (m_MouseState.rgbButtons[button] & 0x80) != 0;return false;{{{{//mrot+=D3DX_PI/2*dt;{{{{#define PS ProShaderClass::GetSingleton()#define PX PhysX::GetSingleton()struct MOUSE {struct MOUSE {MatrixClass::MatrixClass():m_pCamera(0),m_Eye4(0,0,0,0),m_CurrentCamera(0),m_F4pressed(false){{m_pCamera = new CCamera(D3DXVECTOR3(0, 0.0f,6.0f));TargetCamera* tempcamera;tempcamera= new TargetCamera();tempcamera->LookAt(D3DXVECTOR3(0, 5,7),D3DXVECTOR3(0, 2.0f,0.0f),D3DXVECTOR3(0,1,0));m_vCameras.push_back(tempcamera);m_pCamera->SetLookAt(D3DXVECTOR3(0, 5,7),D3DXVECTOR3(0, 2.0f,0.0f),D3DXVECTOR3(0, 1,0));tempcamera = new TargetCamera();tempcamera->LookAt(D3DXVECTOR3(10.0f, 5.0f,7.0f),D3DXVECTOR3(0.0f, 2.0f,0.0f),D3DXVECTOR3(0.0f,1.0f,0.0f));m_vCameras.push_back(tempcamera);// D3DXMATRIX comp1;// D3DXMatrixLookAtLH(&comp1 , &D3DXVECTOR3(0, 5,7),&D3DXVECTOR3(0, 2.0f,0.0f), &D3DXVECTOR3(0, 1,0));{{delete m_pCamera;for(UINT i=0;i<m_vCameras.size();++i){delete m_vCameras.at(i);}{{int modifier =1;if(DI->KeyDown(DIK_F4) && !m_F4pressed){if((m_CurrentCamera+1)<m_vCameras.size()){++m_CurrentCamera;}else{m_CurrentCamera = 0;}m_pCamera = m_vCameras[m_CurrentCamera];if(DI->MouseButtonDown(2)){if(DI->MouseButtonDown(2)){if(DI->KeyDown(DIK_LSHIFT)){if(DI->KeyDown(DIK_LSHIFT)){modifier =10;modifier =0.30f;if(DI->KeyDown(DIK_S)){if(DI->KeyDown(DIK_S)){m_pCamera->Move(-1.0f*modifier);if(DI->KeyDown(DIK_W)){if(DI->KeyDown(DIK_W)){m_pCamera->Move(1.0f*modifier);if(DI->KeyDown(DIK_Q)){if(DI->KeyDown(DIK_Q)){m_pCamera->Move(1.0f*modifier);if(DI->KeyDown(DIK_A)){if(DI->KeyDown(DIK_A)){m_pCamera->Strafe(-1.0f*modifier);if(DI->KeyDown(DIK_D)){if(DI->KeyDown(DIK_D)){m_pCamera->Strafe(1.0f*modifier);//m_pCamera->GetInverseViewMatrix(m_ViewInverse);//m_pCamera->GetEye4(m_Eye4);// void MatrixClass::DrawWithShader(Abstract3Dobject *obj)// {//// ID3DXEffect* Effect;// char alphamode = obj->GetAlphaMode();// Effect = obj->GetEffect();//// //get handles to shader params// m_hWorld = Effect->GetParameterByName(0, "g_World");// m_hWorldViewProj = Effect->GetParameterByName(0, "g_WorldViewProj");// m_hWoldInvTrans = Effect->GetParameterByName(0, "g_WorldInvTrans");// m_hViewInv = Effect->GetParameterByName(0, "g_ViewInv");// m_hMtrl = Effect->GetParameterByName(0, "g_Mtrl");// m_hLight = Effect->GetParameterByName(0, "g_Light");// m_hTex = Effect->GetParameterByName(0, "g_Tex");//texture// m_hVecEye = Effect->GetParameterByName(0, "g_Eye");//texture//// if(obj->GetTexture())// Effect->SetTexture(m_hTex,obj->GetTexture());//// HR(Effect->SetValue(m_hMtrl,obj->GetMtrl(),sizeof(D3DMATERIAL9)));////// //First calculate final world (including parent worlds transforms////// D3DXMATRIX* World = obj->GetWorldMatrix();// HR(Effect->SetMatrix(m_hWorldViewProj,&(*World*m_ViewProj)));//// // D3DXMATRIX WorldInvTrans;// // D3DXMatrixInverse(&WorldInvTrans, 0, World);// // D3DXMatrixTranspose(&WorldInvTrans, &WorldInvTrans);// // HR(Effect->SetMatrix(m_hWoldInvTrans,&WorldInvTrans));//////// HR(Effect->SetMatrix(m_hViewInv,&m_ViewInverse));// HR(Effect->SetVector(m_hVecEye,&m_Eye4));// HR(Effect->SetMatrix(m_hWorld,World));////// HR(Effect->SetValue(m_hLight, &m_Light, sizeof(m_Light)));//// UINT numPasses = 0;// HR(Effect->Begin(&numPasses, 0));// for(UINT i=0;i<numPasses;++i)// {// HR(Effect->BeginPass(i));//// obj->DrawScene();//// if(alphamode == 't'){// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHATESTENABLE,true));// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL));// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHAREF,100));// }//// if(alphamode == 'b'){// HR(XE->GetDevice()->SetRenderState(D3DRS_ALPHABLENDENABLE,true));// HR(XE->GetDevice()->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA));// HR(XE->GetDevice()->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA));// }//// HR(Effect->EndPass());// }// HR(Effect->End());////// }#include "Camera2.h"// void DrawWithShader(Abstract3Dobject *obj);{CCamera *m_pCamera;// D3DXHANDLE m_hWorld;vector<TargetCamera*> m_vCameras;// D3DXHANDLE m_hWorldViewProj;// D3DXHANDLE m_hWoldInvTrans;// D3DXHANDLE m_hViewInv;// D3DXHANDLE m_hVecEye;// D3DXHANDLE m_hLight;// D3DXHANDLE m_hMtrl;// D3DXHANDLE m_hTex;AddressU = WRAP;AddressU = CLAMP;AddressV = WRAP;AddressV = CLAMP;//output.Tex.x *= -1;for(int i=0;i<m_vSkyBoxTextures.size();++i)for(UINT i=0;i<m_vSkyBoxTextures.size();++i){{{{HR(XE->GetDevice()->SetRenderState(D3DRS_CULLMODE,D3DCULL_CW));HR(XE->GetDevice()->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW));v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,0,1);v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,1,1);v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,0,0);v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,1,0);v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,1,0);v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,0,0);v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,1,1);v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,0,1);v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,0,1);v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,1,1);v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,0,0);v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,1,0);v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,1,0);v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,0,0);v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,1,1);v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,0,1);v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,0,1);v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,1,1);v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,0,0);v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,1,0);v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,1,0);v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,0,0);v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,1,1);v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,0,1);v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,0,1);v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,1,1);v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,0,0);v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,1,0);v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,1,0);v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,0,0);v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,1,1);v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,0,1);v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,0,0);v[i++] = Verticeformat(-1.0f, 1.0f, -1.0f,1,0);v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,1,0);v[i++] = Verticeformat(-1.0f, 1.0f, 1.0f,0,0);v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,1,1);v[i++] = Verticeformat( 1.0f, 1.0f, 1.0f,0,1);v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,0,1);v[i++] = Verticeformat( 1.0f, 1.0f, -1.0f,1,1);v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,0,1);v[i++] = Verticeformat(-1.0f, -1.0f, 1.0f,0,0);v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,0,0);v[i++] = Verticeformat(-1.0f, -1.0f, -1.0f,0,1);v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,1,0);v[i++] = Verticeformat( 1.0f, -1.0f, -1.0f,1,1);v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,1,1);v[i++] = Verticeformat( 1.0f, -1.0f, 1.0f,1,0);{{k[0] = 0; k[1] = 1; k[2] = 2;k[0] = 0; k[1] = 2; k[2] = 1;k[3] = 0; k[4] = 2; k[5] = 3;k[3] = 0; k[4] = 3; k[5] = 2;k[6] = 4; k[7] = 5; k[8] = 6;k[6] = 4; k[7] = 6; k[8] = 5;k[9] = 4; k[10] = 6; k[11] = 7;k[9] = 4; k[10] = 7; k[11] = 6;k[12] = 8; k[13] = 9; k[14] = 10;k[12] = 8; k[13] =10; k[14] = 9;k[15] = 8; k[16] = 10; k[17] = 11;k[15] = 8; k[16] = 11; k[17] = 10;k[18] = 12; k[19] = 13; k[20] = 14;k[18] = 12; k[19] = 14; k[20] = 13;k[21] = 12; k[22] = 14; k[23] = 15;k[21] = 12; k[22] = 15; k[23] = 14;k[24] = 16; k[25] = 17; k[26] = 18;k[24] = 16; k[25] = 18; k[26] = 17;k[27] = 16; k[28] = 18; k[29] = 19;k[27] = 16; k[28] = 19; k[29] = 18;k[30] = 20; k[31] = 21; k[32] = 22;k[30] = 20; k[31] = 22; k[32] = 21;k[33] = 20; k[34] = 22; k[35] = 23;k[33] = 20; k[34] = 23; k[35] = 22;#include "OtherClasses.h"#include "UtilClasses.h"Brush::Brush():Abstract3Dobject(),m_NumVertices(0),m_NumIndices(0)Brush::Brush():Abstract3Dobject(),m_NumVertices(0),m_NumIndices(0),m_Center(D3DXVECTOR3(0.0f,0.0f,0.0f)),m_Scale(0.1f){{void Brush::AddVerticeToPoly(int index,D3DXVECTOR3 Vertice){int numberoffobjectstoadd = (index+1) - polys.size(); //size the vectorfor(;numberoffobjectstoadd>0;--numberoffobjectstoadd) //size the vectorvoid Brush::BuildBuffersAndPhysX()polys.push_back(new Poly()); //size the vectorpolys.at(index)->AddVertice(Vertice); //add vertice}void Brush::debug(){{{{m_Center+=polys.at(i)->CalculateCenter();polys.at(i)->MakeReadyForConversion(); //sorts verticespolys.at(i)->MakeReadyForConversion();m_Center/=(float)polys.size();for(UINT i=0;i<polys.size();++i){polys.at(i)->TranslateTo(m_Center); //puts the object at 0,0,0}VerticesInBuffer=VerticesInBuffer;//error!IndexesInBuffer=IndexesInBuffer;//error!Translate(m_Center.x,m_Center.y,m_Center.z);Scale(m_Scale,m_Scale,m_Scale);}minBounds*=m_Scale;maxBounds*=m_Scale;NxActorDesc ActorDesc;ActorDesc.body =0; //this thing doesnt move so no bodyvoid Brush::BuildVertexBuffer()NxBoxShapeDesc BoxShapeDesc2;{BoxShapeDesc2.dimensions=NxVec3(abs((minBounds.x-maxBounds.x))/2,abs((minBounds.y-maxBounds.y))/2,abs((minBounds.z-maxBounds.z))/2);NxMat34 mat;mat.setColumnMajor44(m_World);ActorDesc.globalPose = mat;ActorDesc.density = 10.0f;/*m_pActor = */PhysX::GetSingleton()->GetScene()->createActor(ActorDesc); //we don't need the pointer}void Brush::BuildIndexBuffer(){{{// for(int i=0;i<size;++i)BuildBuffersAndPhysX();// {// for(int j=(i+1);j<size;++j)// {// for(int k=(j+1);k<size;++k)// {////// bool IsInsideMesh = false;//// D3DXVECTOR3 temp;// if(!GetIntersection (polys[i], polys[j], polys[k], temp ))// continue;////// for(int m = 0; m<size;++m)// {//// // Test if the point is outside the brush// D3DXVECTOR3 Normal = polys[m]->m_Normal;// float d = polys[m]->m_DistanceToOrigin;//// float testvalue = D3DXVec3Dot( &Normal, &temp ) - d;// if ( testvalue > 0.1f )// {// IsInsideMesh = false; // NOT INSIDE MESH//// }//// if(!IsInsideMesh)// break;// }//////// IsInsideMesh = false;//// for(UINT i=0;i<polys.size();++i)// {// if(polys.at(i)->DoesPointExists(temp))// {// IsInsideMesh = true;// }//// if(IsInsideMesh)// break;// }//// if(!IsInsideMesh)// {// ++notfoundpoints;// continue;// }//// AddVerticeToPoly(i,temp);// AddVerticeToPoly(j,temp);// AddVerticeToPoly(k,temp);////// }// }// }// notfoundpoints=notfoundpoints;debug();bool Brush::GetIntersection ( const Poly* a, const Poly* b, const Poly* c, D3DXVECTOR3 &v ){D3DXVECTOR3 cross;D3DXVec3Cross(&cross,&b->m_Normal,&c->m_Normal);float denom = D3DXVec3Dot(&a->m_Normal,&cross);if ( abs ( denom ) < 0.00000001f ) // chck if zero, using this for rounding errors{return false;}D3DXVec3Cross(&cross,&a->m_Normal,&b->m_Normal);v=(*D3DXVec3Cross(&cross,&a->m_Normal,&b->m_Normal)*c->m_DistanceToOrigin + *D3DXVec3Cross(&cross,&b->m_Normal,&c->m_Normal)*a->m_DistanceToOrigin + *D3DXVec3Cross(&cross,&c->m_Normal,&a->m_Normal)*b->m_DistanceToOrigin) / denom;return true;}{{{{Poly::Poly(D3DXVECTOR3 p1, D3DXVECTOR3 p2, D3DXVECTOR3 p3):m_MaxDifference(0.7f),m_DistanceToOrigin(0)Poly::Poly(D3DXVECTOR3 p1, D3DXVECTOR3 p2, D3DXVECTOR3 p3):m_MaxDifference(0.00001f),m_DistanceToOrigin(0),m_Center(D3DXVECTOR3(0,0,0)){{}Poly::Poly():m_MaxDifference(0.7f){void Poly::GetNumberOfVerticesAndIndices(int &n,int &k)//////////////////////////////////////////////////////////////////////////{//index and vertice buffer coden+=m_vVertices.size();k+=(m_vVertices.size()-2)*3;}void Poly::PolyFix(Poly* p){for(int i=2;i<m_vVertices.size();++i){for(int j=0;j<2;++j){D3DXVECTOR3 minus = p->m_vVertices[j] - m_vVertices[i];if(IsKindaEqual(minus)){m_vVertices[i] = p->m_vVertices[j];}}}}void Poly::CheckIfPointsAreOnThisPoly(Poly* P){if(IsKindaEqual(m_Normal+P->m_Normal))return;for(int j=0;j<3;++j){D3DXVECTOR3 temp = P->m_vVertices[j];float testvalue = D3DXVec3Dot( &m_Normal, &temp ) - m_DistanceToOrigin;if ( testvalue ==0 /*< 0.05f && testvalue > -0.05f*/ ){AddVertice(temp);}}if(m_vVertices.size()>4)int sdfsdfsdf =1;}bool Poly::DoesPointExists(D3DXVECTOR3& point){//search for the point in the first 3 vertices, these are ABSOLUTELY correct(directly from the file)for(int j=0;j<3;++j){D3DXVECTOR3 minus = m_vVertices[j] - point;if(IsKindaEqual(minus)){point = m_vVertices[j];return true;}}return false;}void Poly::AddVertice(D3DXVECTOR3 vertice){if(!DoesVerticeExists(vertice))m_vVertices.push_back(vertice);}{{bool Poly::DoesVerticeExists(D3DXVECTOR3 d3dv)void Poly::GetNumberOfVerticesAndIndices(int &n,int &k){{if (m_vVertices.size()<1)n+=m_vVertices.size();return false;k+=(m_vVertices.size()-2)*3;}{{{D3DXVECTOR3 minus = m_vVertices.at(i) -d3dv;m_vVertices.at(i)-=T;if(IsKindaEqual(minus))return true;return false;bool Poly::IsKindaEqual(D3DXVECTOR3 minus)D3DXVECTOR3& Poly::CalculateCenter(){{D3DXVECTOR3 upperzero = D3DXVECTOR3(m_MaxDifference,m_MaxDifference,m_MaxDifference);//must call this before calling MakeReadyForConversionD3DXVECTOR3 lowerzero = D3DXVECTOR3(-m_MaxDifference,-m_MaxDifference,-m_MaxDifference);//also returns center of this poly for calculating center of this brushfor(int i=0;i<m_vVertices.size();++i)if(minus.x < upperzero.x && minus.y < upperzero.y && minus.z < upperzero.z && minus.x > lowerzero.x && minus.y > lowerzero.y && minus.z > lowerzero.z){return true;m_Center+= m_vVertices.at(i);}return false;m_Center /= (float)m_vVertices.size();return m_Center;{{//sorts verticesm_Center = D3DXVECTOR3(0,0,0);int size = m_vVertices.size();for(int i=0;i<size;++i){m_Center+= m_vVertices.at(i);}m_Center /= (float)size;for(int j=0;j<(m_vVertices.size()-1);++j)for(int j=0;j<(size-1);++j){{{{{{//part of sortingfor(int i=(VerticeNow+1);i<m_vVertices.size();++i)for(UINT i=(VerticeNow+1);i<m_vVertices.size();++i){{/////////////////////////////////////////////////////////////// end of polyclass//////////////////////////////////////////////////{{{{{{{converterstream >> tempvector.z;//to r handedconverterstream >> tempvector.y;//to r handed#include "OtherClasses.h"#include "UtilClasses.h"//bool GetIntersection ( const plane &a, const plane &b, const plane &c, D3DXVECTOR3 &v );{{//m_pPhysX->FetchResults();PX->FetchResults();//m_pPhysX->Simulate(dt);PX->Simulate(dt);