diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /KaplaDemo/samples/sampleViewer3/SampleViewerScene.h | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'KaplaDemo/samples/sampleViewer3/SampleViewerScene.h')
| -rw-r--r-- | KaplaDemo/samples/sampleViewer3/SampleViewerScene.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/KaplaDemo/samples/sampleViewer3/SampleViewerScene.h b/KaplaDemo/samples/sampleViewer3/SampleViewerScene.h new file mode 100644 index 00000000..b6653f1e --- /dev/null +++ b/KaplaDemo/samples/sampleViewer3/SampleViewerScene.h @@ -0,0 +1,125 @@ +#ifndef SAMPLE_VIEWER_SCENE_H +#define SAMPLE_VIEWER_SCENE_H + +#include "foundation/PxVec3.h" +#include "foundation/PxTransform.h" +#include "PxPhysics.h" +#include "PxCooking.h" + +using namespace physx; + +#include <vector> +#include <string> + +class OptixRenderer; + +#ifdef USE_OPTIX +#include "OptixRenderer.h" +#endif + +class Shader; +class ShaderShadow; + +// --------------------------------------------------------------------- +class SampleViewerScene +{ +public: + SampleViewerScene(PxPhysics* pxPhysics, PxCooking *pxCooking, bool isGrb, + Shader *defaultShader, const char *resourcePath, float slowMotionFactor); + virtual ~SampleViewerScene(); + + // virtual interface + + virtual void preSim(float dt) {}; + virtual void postSim(float dt) {}; + virtual void duringSim(float dt) {}; + virtual void syncAsynchronousWork() {}; + + virtual void handleMouseButton(int button, int state, int x, int y) {}; + virtual void handleMouseMotion(int x, int y) {}; + + virtual void handleKeyDown(unsigned char key, int x, int y) {}; + virtual void handleKeyUp(unsigned char key, int x, int y) {}; + virtual void handleSpecialKey(unsigned char key, int x, int y) {}; + + virtual void handleGamepadButton(int button, bool state) {}; + virtual void handleGamepadAxis(int axis, float x) {}; + virtual void handleGamepadTrigger(int trigger, float x) {}; + + virtual void render(bool useShader); + virtual void printPerfInfo() {} + + virtual void setSlowMotionFactor(float factor) { mSlowMotionFactor = factor; } + virtual std::string getWeaponName() { return ""; }; + virtual void customizeSceneDesc(PxSceneDesc& desc) {} + + virtual void onInit(PxScene* pxScene){ mPxScene = pxScene; } + + virtual void setScene(PxScene* pxScene) { mPxScene = pxScene; } + + // common code + + void setCamera(const PxVec3 &pos, const PxVec3 &dir, const PxVec3 &up, float fov ) { + mCameraPos = pos; mCameraDir = dir; mCameraUp = up; mCameraFov = fov; + } + + virtual void getCamera(PxVec3& pos, PxVec3& dir){} + virtual bool isCameraDisable() { return mCameraDisable; } + + virtual void getInitialCamera(PxVec3& pos, PxVec3& dir) { pos = PxVec3(0.f, 25.f, 30.f); dir = PxVec3(0.f, -0.3f, -1.f).getNormalized(); } + + void getMouseRay(int xi, int yi, PxVec3 &orig, PxVec3 &dir); + std::vector<ShaderShadow*>& getShaders() { return mShaders; } + + enum RenderType { + rtOPENGL, + rtOPTIX, + rtNUM, + }; + static void setRenderType(RenderType renderType) { mRenderType = renderType; } + static void toggleRenderType() { setRenderType((RenderType)(((int)mRenderType+1)%rtNUM)); } + static RenderType getRenderType() { return mRenderType; } + static OptixRenderer* getOptixRenderer() { return mOptixRenderer; } + + // Set option string for renderers. + static void setRendererOptions( const char* ); + static const char* getRendererOptions() {return mRendererOptions.c_str();} + + // Call this before exit(). + static void cleanupStaticResources(); + static void setBenchmark( bool on ) { mBenchmark = on; } + static bool isBenchmark() { return mBenchmark; } + + virtual bool isSceneKapla() {return false;} + + + PxPhysics& getPhysics() { return *mPxPhysics; } + PxCooking& getCooking() { return *mPxCooking; } + PxScene& getScene() { return *mPxScene; } + + +protected: + void setMaterial(float restitution = 0.2f, float staticFriction = 0.2f, float dynamicFriction = 0.2f); + + PxPhysics *mPxPhysics; + PxCooking *mPxCooking; + PxScene *mPxScene; + + PxMaterial *mDefaultMaterial; + + PxVec3 mCameraPos, mCameraDir, mCameraUp; + float mCameraFov; + std::vector<ShaderShadow*> mShaders; + Shader *mDefaultShader; + const char *mResourcePath; + float mSlowMotionFactor; + + static RenderType mRenderType; + static OptixRenderer *mOptixRenderer; + static bool mBenchmark; + static std::string mRendererOptions; + + bool mCameraDisable; +}; + +#endif // SAMPLE_VIEWER_SCENE_H |