Commit: b95794d3c5e76b5b7044183c6c536febe8cd3c23
Author: Lukas Tönne
Date:   Sun Aug 24 13:34:50 2014 +0200
Branches: hair_system
https://developer.blender.org/rBb95794d3c5e76b5b7044183c6c536febe8cd3c23

Added a basic volume data structure for hair simulation.

Using volumetric description of certain hair simulation quantities
allows very efficient calculation of otherwise costly effects, such as
hair-hair collisions (at the price of reduced accuracy).

===================================================================

M       source/blender/hair/CMakeLists.txt
A       source/blender/hair/intern/HAIR_volume.cpp
A       source/blender/hair/intern/HAIR_volume.h

===================================================================

diff --git a/source/blender/hair/CMakeLists.txt 
b/source/blender/hair/CMakeLists.txt
index 121c860..cc3784f 100644
--- a/source/blender/hair/CMakeLists.txt
+++ b/source/blender/hair/CMakeLists.txt
@@ -57,6 +57,8 @@ set(SRC
        intern/HAIR_collision.cpp
        intern/HAIR_types.h
        intern/HAIR_types.cpp
+       intern/HAIR_volume.h
+       intern/HAIR_volume.cpp
 intern/HAIR_util_hash.h
 )
 
diff --git a/source/blender/hair/intern/HAIR_volume.cpp 
b/source/blender/hair/intern/HAIR_volume.cpp
new file mode 100644
index 0000000..dcf8974
--- /dev/null
+++ b/source/blender/hair/intern/HAIR_volume.cpp
@@ -0,0 +1,42 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation,
+ *                 Lukas Toenne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "HAIR_volume.h"
+
+HAIR_NAMESPACE_BEGIN
+
+Volume::Volume()
+{
+}
+
+void Volume::resize(int x, int y, int z)
+{
+       int totsize = x * y * z;
+       
+       randomstuff.resize(totsize);
+}
+
+HAIR_NAMESPACE_END
diff --git a/source/blender/hair/intern/HAIR_volume.h 
b/source/blender/hair/intern/HAIR_volume.h
new file mode 100644
index 0000000..ec3fd71
--- /dev/null
+++ b/source/blender/hair/intern/HAIR_volume.h
@@ -0,0 +1,102 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation,
+ *                 Lukas Toenne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __HAIR_VOLUME_H__
+#define __HAIR_VOLUME_H__
+
+#include <vector>
+
+#include "MEM_guardedalloc.h"
+
+#include "HAIR_types.h"
+
+HAIR_NAMESPACE_BEGIN
+
+template <typename T>
+struct VolumeAttribute {
+       VolumeAttribute()
+       {
+               m_data = NULL;
+               m_size = 0;
+       }
+       
+       VolumeAttribute(int size)
+       {
+               alloc(size);
+       }
+
+       ~VolumeAttribute()
+       {
+               free();
+       }
+       
+       T *data() { return m_data; }
+       const T *data() const { return m_data; }
+       
+       int size() const { return m_size; }
+       
+       void resize(int size)
+       {
+               free();
+               alloc(size);
+       }
+       
+protected:
+       void alloc(int size)
+       {
+               m_data = (T*)MEM_mallocN(sizeof(T) * size, "Hair Volume 
Attribute");
+               m_size = size;
+       }
+       
+       void free()
+       {
+               if (m_data)
+                       MEM_freeN(m_data);
+       }
+       
+private:
+       T *m_data;
+       int m_size;
+};
+
+typedef VolumeAttribute<float> VolumeAttributeFloat;
+typedef VolumeAttribute<int> VolumeAttributeInt;
+typedef VolumeAttribute<float3> VolumeAttributeFloat3;
+
+struct Volume {
+       Volume();
+       
+       void resize(int x, int y, int z);
+       
+       VolumeAttributeFloat randomstuff;
+       
+private:
+       int size_x, size_y, size_z;
+};
+
+HAIR_NAMESPACE_END
+
+#endif

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to