예제 #1
0
    // Use this for initialization
    void Start()
    {
        if (vertBuffer == null)
        {
            vertBuffer = gameObject.GetComponent <VertBuffer>();
        }
        if (triBuffer == null)
        {
            triBuffer = gameObject.GetComponent <TriangleBuffer>();
        }

        print(distBetweenHairs);
        transformValues = new float[16];

        fullVertCount = totalHairs * numVertsPerHair;

        material = new Material(material);

        numGroups = (fullVertCount + (numThreads - 1)) / numThreads;

        outBuffer = new ComputeBuffer(numThreads, 4 * sizeof(float));
        outFloats = new float[numThreads * 4];

        finalBuffer = new ComputeBuffer(1, 4 * sizeof(float));
        finalFloats = new float[4];


        _kernelCollision  = collisionShader.FindKernel("CSMain");
        _kernelConstraint = constraintShader.FindKernel("CSMain");

        CreateBuffers();

        Reset();
    }
예제 #2
0
    void SetUp()
    {
        tri  = GetComponent <TriangleBuffer>();
        vert = GetComponent <VertBuffer>();

        values = new float[dimensions * dimensions * dimensions * 8];

        for (int i = 0; i < dimensions * dimensions * dimensions; i++)
        {
            values[i * 8 + 0] = 1000;
            values[i * 8 + 1] = 1000;
            values[i * 8 + 2] = 1000;
            values[i * 8 + 3] = 1000;
            values[i * 8 + 4] = 1000;
            values[i * 8 + 5] = 1000;
            values[i * 8 + 6] = 1000;
            values[i * 8 + 7] = 1000;
        }

        vertCount    = dimensions * dimensions * dimensions;
        numGroups    = (vertCount + (numThreads - 1)) / numThreads;
        k_depth      = calcShader.FindKernel("GetDepth");
        k_normal     = calcShader.FindKernel("GetNormal");
        k_finalDepth = calcShader.FindKernel("GetFinalDist");

        calculated        = false;
        normalsCalculated = false;
    }
예제 #3
0
파일: Cloner.cs 프로젝트: rodrigomas/3D
    // Use this for initialization
    void Start()
    {
        if (vertBuffer == null)
        {
            vertBuffer = gameObject.GetComponent <VertBuffer>();
        }
        if (triBuffer == null)
        {
            triBuffer = gameObject.GetComponent <TriangleBuffer>();
        }

        if (cloneVertBuffer == null)
        {
            cloneVertBuffer = toClone.GetComponent <VertBuffer>();
        }
        if (cloneTriBuffer == null)
        {
            cloneTriBuffer = toClone.GetComponent <TriangleBuffer>();
        }

        material = new Material(material);

        numGroups = (numberMeshes + (numThreads - 1)) / numThreads;

        _kernel = physics.FindKernel("CSMain");

        CreateBuffers();
    }
예제 #4
0
    // Use this for initialization
    void Start()
    {
        if (vertBuffer == null)
        {
            vertBuffer = gameObject.GetComponent <VertBuffer>();
        }
        if (triBuffer == null)
        {
            triBuffer = gameObject.GetComponent <TriangleBuffer>();
        }

        print(distBetweenHairs);

        fullVertCount = totalHairs * numVertsPerHair;

        material = new Material(material);

        numGroups = (fullVertCount + (numThreads - 1)) / numThreads;

        _kernelCollision  = collisionShader.FindKernel("CSMain");
        _kernelConstraint = constraintShader.FindKernel("CSMain");

        CreateBuffers();

        Reset();
    }
예제 #5
0
 protected override void DisposeBuffers()
 {
     if (!KeepBuffersAlive)
     {
         VertBuffer?.Dispose();
         IndexBuffer?.Dispose();
     }
 }
예제 #6
0
    // Use this for initialization
    public override void BeforeCreateBuffer()
    {
        structSize = 1 + 16 + 2 + 3 + 3 + 3;

        if (vertBuffer == null)
        {
            vertBuffer = gameObject.GetComponent <VertBuffer>();
        }
        if (triBuffer == null)
        {
            triBuffer = gameObject.GetComponent <TriangleBuffer>();
        }

        if (cloneVertBuffer == null)
        {
            cloneVertBuffer = toClone.GetComponent <VertBuffer>();
        }
        if (cloneTriBuffer == null)
        {
            cloneTriBuffer = toClone.GetComponent <TriangleBuffer>();
        }
    }
예제 #7
0
 protected override void DisposeBuffers()
 {
     VertBuffer?.Dispose();
     IndexBuffer?.Dispose();
 }
예제 #8
0
    public static Point getVertInfo(int seed, float randomVal, float[] triAreas, int[] triValues, VertBuffer vertBuffer)
    {
        int tri0 = 3 * HelperFunctions.getTri(randomVal, triAreas);
        int tri1 = tri0 + 1;
        int tri2 = tri0 + 2;

        tri0 = triValues[tri0];
        tri1 = triValues[tri1];
        tri2 = triValues[tri2];

        Vector3 pos = HelperFunctions.GetRandomPointInTriangle(seed, vertBuffer.vertices[tri0], vertBuffer.vertices[tri1], vertBuffer.vertices[tri2]);

        float a0     = HelperFunctions.AreaOfTriangle(pos, vertBuffer.vertices[tri1], vertBuffer.vertices[tri2]);
        float a1     = HelperFunctions.AreaOfTriangle(pos, vertBuffer.vertices[tri0], vertBuffer.vertices[tri2]);
        float a2     = HelperFunctions.AreaOfTriangle(pos, vertBuffer.vertices[tri0], vertBuffer.vertices[tri1]);
        float aTotal = a0 + a1 + a2;

        float p0 = a0 / aTotal;
        float p1 = a1 / aTotal;
        float p2 = a2 / aTotal;



        Vector3 nor = vertBuffer.normals[tri0] * p0 + vertBuffer.normals[tri1] * p1 + vertBuffer.normals[tri2] * p2;

        nor = nor.normalized;
//          Vector3 color   = tri0.color  * p0 + tri1.color  * p1 + tri2.color  * p2;

        Vector2 uv = vertBuffer.uvs[tri0] * p0 + vertBuffer.uvs[tri1] * p1 + vertBuffer.uvs[tri2] * p2;


        Point p = new Point();

        p.uv         = uv;
        p.nor        = nor;
        p.triWeights = new Vector3(p0, p1, p2);
        p.triIDs     = new Vector3(tri0, tri1, tri2);

        return(p);
    }