108 lines
3.8 KiB
C++
108 lines
3.8 KiB
C++
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions
|
|
// are met:
|
|
// * Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
// * Redistributions in binary form must reproduce the above copyright
|
|
// notice, this list of conditions and the following disclaimer in the
|
|
// documentation and/or other materials provided with the distribution.
|
|
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
|
// contributors may be used to endorse or promote products derived
|
|
// from this software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
|
|
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
//
|
|
// Copyright (c) 2018 NVIDIA Corporation. All rights reserved.
|
|
|
|
#ifndef SIM_SCENE
|
|
#define SIM_SCENE
|
|
|
|
#include "Shader.h"
|
|
#include "PxPhysics.h"
|
|
#include "PxCooking.h"
|
|
#include "PxSimulationEventCallback.h"
|
|
#include <PsArray.h>
|
|
#include "ConvexRenderer.h"
|
|
|
|
#include "SimSceneBase.h"
|
|
|
|
using namespace physx::fracture;
|
|
|
|
class TerrainMesh;
|
|
struct ParticlesDesc;
|
|
class Particles;
|
|
class RegularCell3D;
|
|
class Actor;
|
|
|
|
class SimScene : public base::SimScene
|
|
{
|
|
public:
|
|
static SimScene* createSimScene(PxPhysics *pxPhysics, PxCooking *pxCooking, bool isGrbScene, float minConvexSize, PxMaterial* defaultMat, const char *resourcePath);
|
|
protected:
|
|
SimScene(PxPhysics *pxPhysics, PxCooking *pxCooking, bool isGrbScene, float minConvexSize, PxMaterial* defaultMat, const char *resourcePath);
|
|
public:
|
|
virtual ~SimScene();
|
|
|
|
virtual void createSingletons();
|
|
|
|
virtual base::Actor* createActor();
|
|
virtual base::Convex* createConvex();
|
|
virtual base::Compound* createCompound(PxReal contactOffset = 0.005f, PxReal restOffset = -0.001f);
|
|
|
|
virtual void clear();
|
|
|
|
virtual void profileBegin(const char* name);
|
|
virtual void profileEnd(const char* name);
|
|
|
|
bool addXml(const std::string &path, const std::string &filename, bool ignoreVisualMesh, float scale, const PxTransform &trans,
|
|
Shader* defaultShader, const ShaderMaterial &defaultMat);
|
|
|
|
void postSim(float dt, RegularCell3D* fluidSim);
|
|
|
|
//Particles* getParticles() { return mParticles; }
|
|
|
|
ConvexRenderer &getConvexRenderer() { return mConvexRenderer; }
|
|
|
|
void draw(bool useShader);
|
|
void setShaderMaterial(Shader* shader, const ShaderMaterial& mat) {this->mShader = shader; this->mShaderMat = mat;}
|
|
void setFractureForceThreshold(float threshold) { mFractureForceThreshold = threshold; }
|
|
void createRenderBuffers();
|
|
void dumpSceneGeometry();
|
|
|
|
void loadAndCreateTextureArrays();
|
|
|
|
std::vector<std::string> diffuseTexNames;
|
|
std::vector<std::string> bumpTexNames;
|
|
std::vector<std::string> specularTexNames;
|
|
std::vector<std::string> emissiveReflectSpecPowerTexNames;
|
|
|
|
protected:
|
|
|
|
virtual void create3dTexture();
|
|
virtual void updateConvexesTex();
|
|
|
|
GLuint diffuseTexArray, bumpTexArray, specularTexArray, emissiveReflectSpecPowerTexArray;
|
|
|
|
GLuint loadTextureArray(std::vector<std::string>& names);
|
|
|
|
//Particles *mParticles;
|
|
|
|
ConvexRenderer mConvexRenderer;
|
|
|
|
Shader* mShader;
|
|
ShaderMaterial mShaderMat;
|
|
};
|
|
|
|
#endif
|