File: constraints.h

package info (click to toggle)
embree 3.13.5%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 27,924 kB
  • sloc: cpp: 180,815; xml: 3,877; ansic: 2,957; python: 1,466; sh: 502; makefile: 229; csh: 42
file content (71 lines) | stat: -rw-r--r-- 1,729 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2009-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <stddef.h>
#include "../common/math/vec.h"

namespace embree { namespace collide2 {

using vec_t = Vec3fa;

struct ClothModel;

class Constraint {
public:

    Constraint (size_t const numConstainedBodies) 
    : numConstrainedBodies_ (numConstainedBodies)
    {
        bodyIDs_ = new size_t[numConstrainedBodies_];
    }

    virtual ~Constraint () { delete[] bodyIDs_; }

    virtual void solvePositionConstraint (ClothModel & model, float timeStep, size_t iter) = 0;

private:
    Constraint (const Constraint& other) DELETED; // do not implement
    Constraint& operator= (const Constraint& other) DELETED; // do not implement

protected:
    size_t  numConstrainedBodies_ = 0;
    size_t* bodyIDs_ = nullptr;
};

class DistanceConstraint : public Constraint {
public:

    DistanceConstraint ()
    :
        Constraint (2)
    {}

    virtual void initConstraint             (ClothModel const & model, size_t p0ID, size_t p1ID);
    virtual void solvePositionConstraint    (ClothModel & model, float timeStep, size_t iter);

protected:
    float rl_ {0.f};
    float lambda_old_0_ {0.f};
    float lambda_old_1_ {0.f};
};

class CollisionConstraint : public Constraint {
  ALIGNED_CLASS_(16);
public:

    CollisionConstraint ()
      : Constraint (1) {}

    virtual void initConstraint             (size_t qID, const vec_t& x0, const vec_t& n, float d);
    virtual void solvePositionConstraint    (ClothModel & model, float timeStep, size_t iter);

protected:
    vec_t x0_   = vec_t(0.f, 0.f, 0.f);
    vec_t n_    = vec_t(0.f, 0.f, 0.f);
    float d_    = 1.e5f;
};

} // namespace collide2
} // namespace embree