/* * Copyright (c) 2008-2017, NVIDIA CORPORATION. All rights reserved. * * NVIDIA CORPORATION and its licensors retain all intellectual property * and proprietary rights in and to this software, related documentation * and any modifications thereto. Any use, reproduction, disclosure or * distribution of this software and related documentation without an express * license agreement from NVIDIA CORPORATION is strictly prohibited. */ #pragma once #include #include #include #include "NvClothExt/ClothFabricCooker.h" #include #include "Mesh.h" struct ClothMeshData { struct Triangle { Triangle(){} Triangle(uint32_t _a, uint32_t _b, uint32_t _c) : a(_a), b(_b), c(_c){} uint32_t a, b, c; Triangle operator+(uint32_t offset)const { return Triangle(a + offset, b + offset, c + offset); } }; struct Quad { Quad(){} Quad(uint32_t _a, uint32_t _b, uint32_t _c, uint32_t _d) : a(_a), b(_b), c(_c), d(_d){} uint32_t a, b, c, d; Quad operator+(uint32_t offset)const { return Quad(a + offset, b + offset, c + offset, d + offset); } }; std::vector mVertices; std::vector mUvs; std::vector mTriangles; std::vector mQuads; std::vector mInvMasses; SimpleMesh mMesh; void Clear(); void GeneratePlaneCloth(float width, float height, int segmentsX, int segmentsY, bool createQuads = false, physx::PxMat44 transform = physx::PxIdentity, bool alternatingDiagonals = true, int zigzag = 0); void AttachClothPlaneByAngles(int segmentsX, int segmentsY, bool attachByWidth = true); void AttachClothPlaneBySide(int segmentsX, int segmentsY, bool attachByWidth = true); void SetInvMasses(float invMass); void SetInvMassesFromDensity(float density); // Todo nv::cloth::ClothMeshDesc GetClothMeshDesc(); SimpleMesh GetRenderMesh(); void Merge(const ClothMeshData& other); };