- Main Page
- Namespaces
- Classes
- Files
- Related Pages

# Todo List

Class Boxtree
  - Die verschiedenen MaxNVertices konsolidieren.

Class col::BoxtreePrecomp
  - Es ist nicht egal, in welches Koord.system transformiert wird! Man sollte das abhaengig von der Anzahl der Polygone machen.
  - Evtl. kann man m_b auch einsparen.

Class col::Callback
  - Option vorsehen, so dass callbacks auch aufgerufen werden, wenn keines der beiden Objekte sich bewegt hat.
  - Maybe we need an additional class of Callbacks, which can be re-used for several object pairs; this would just mean, that obj1/obj2 would be overwritten by the coll.det. module for every callback actually performed.

Member col::Callback::Callback (osg::NodePtr obj1, osg::NodePtr obj2, bool always=false, bool all_polygons_in=false, LevelOfDetectionE level_of_detection=LEVEL_EXACT)
  always flag verarbeiten.

Class ColConvexHull
  - QHull durch CGAL ersetzen
  - Den `osg::GeometryPtr` durch einen osg::GeometryConstPtr ersetzen, wenn OSG das anbietet.
  - in qhull den longjmp in qh_errexit (oder so aehnlich) durch exceptions ersetzen.
  - Den qhull code in einen eigenen Namespace.

Member col::CollisionPipeline::CollisionPipeline (const osg::Char8 *thread_name=NULL, unsigned int thread_id=0)
  - Das `useHulls` Feature vereinfachen; es gibt zu viele Stellen, wo man dieses beeinflussen kann.
  - Auch das verbose Zeugs sollte man vielleicht aufraeumen. Vielleicht einfach durch separate Fkten machen.

Member col::CollisionPipeline::check (unsigned int *num_moved=NULL)
  Static Variablen als Instanzvariablen der ColPipeline machen, wenn diese Funktionen hier in die Klasse ColPipeline gewandert sind. (S. Kommentar ganz oben.)

Member col::CollisionPipeline::runConcurrently (char *thread_name=NULL)
  Eigener Aspect. Sync mit anderen Threads. Gesynct werden muss eigtl. nur, wenn sich etwas an den Punkten oder Polygonen geaendert hat. Was ist, wenn Objekte geloescht wurden?

Class col::ColObj
  Was man noch tun muss ..

Member col::ColObj::ColObj (osg::GeometryPtr &geom, osg::NodePtr &node, bool flexible, bool stationary, bool compute_hull, AlgoE algo, Grid *grid, bool show_hull=false, char *name=NULL)
  Parameter m_geom ist ueberfluessig.

Class col::ColPair
  Was man noch tun muss ..

Class col::Data
  - Aus intersect_fun einen Funktor machen.
  - Interne Daten vielleicht in eine Unterklasse ziehen.

Member col::Data::Data (const osg::NodePtr &node1, const osg::NodePtr &node2)
  - Ist es ok, die Fkt getPoints() zu verwenden, wenn sich die Punkte waehrend der Koll.erkennung veraendern (durch OSG)?

Class col::Dop

Member col::Dop::Dop (const Pnt3f &pnt)
  Use OSG's dotprod(vec,pnt) when available.

Class col::DopNode
  Kann nur Dreiecke handeln! (siehe nvertices im header file!)

Member col::DopNode::check_down (const DopNodeList &other, Data *data, const DopTransform &dt) const
  - const machen
  - Check, ob pairwise processing hier in SW etwas bringt
  - DopNode sollte 2 Dop's enthalten (wie der Algo es eben braucht)
  - mit Intel compiler nochmal checken, ob transform2 nicht doch etwas bringt. Dito mit overlap2.
  - Verbesserungen aus VRST-Paper einbauen
  - In den arrays child_other koennte man den 2ten Zeiger einsparen, da immer other[i] und other[i]+1 betrachtet werden muessen. Dann waeren die Listen nur halb so gross.

Member col::DopNode::check_stay (const DopNodeList &other, Data *data, const Dop &e, const DopTransform &dt) const
  : Per overload deklarieren.

Class DopTree
  - Creation of DOP trees is very slow!
  - Resolve all the TODO's in the code.
  - Check if SECOND_ITERATION_FOR_DIAMETER really helps.
  - Keine virtual methods (dtor)! (wg. Speicherplatz fuer vtable)
  - DOP tree in 1 grosses Array speichern!
  - Does performance increase, if all local variables are doubles?
  - Zwei verschiedene DopNode's? eine Klasse fuer innere Knoten, eine fuer Blaetter; wg. Speicher fuer pgon, der in inneren Knoten nicht gebraucht wird! Evtl. kann man das auch durch union { d; pgon } machen.
  - Instanzvariable index braucht man nicht, da das in child[1] gespeichert werden kann; Instanzvariable nvertices braucht man nicht, wenn man festlegt, dass sowieso nur 3- oder 4-ecke gespeichert werden koennen, und man pgon[3] fuer 3-ecke einfach auf MAX_UINT setzt.
  - Klasse DopTree in Klasse DopNode mergen (oder umgekehrt).
  - Verschiedene Farben bei DOP-Tree-Visualisierung.
  - Code den Naming-Konventionen anpassen! (besonders m_var und M_Var)

Member col::ElemBox::set (const osg::FaceIterator &fi, const osg::MFPnt3f *points)
  Warum werden bei GL_QUAD_STRIP die letzten beiden Vertices immer geswappt??

Class col::ElemDop

Member col::ElemDop::sortindex

Member col::ElemDop::operator< (const ElemDop &other) const
  Sort mit ordentlichem BinaryPredicate machen! (dann ist das auch thread-safe)

Member col::Matrix::addObj (ColObj *obj)
  Was noch getan werden muss

Member col::Matrix::addCallback (Callback *callback, vector< ColObj > *colobjs)

Member col::Matrix::callCallbacks (const ColPair &pair) const
  Was noch getan werden muss

Class col::MatrixCell
  Flag all_poygons auswerten.

Member col::MatrixCell::check (bool use_hulls)
  - Check whether or not only a bbox check is wanted. This would be a flag stored with each Callback, and a counter stored with the MatrixCell.
  - Matrix-Inversion in ColObj::hasMoved() machen.
  - Nochmal ueberpruefen, warum die berechnete Matrix m12 so stimmt; eigtl. haette ich jetzt doch eine umgekehrte Multiplikation erwartet.
  - use_hulls in jeder MatrixCell speichern. Dann braucht man nicht das Flag global fuer alle MatrixCell's in Collision.cpp sich zu merken.

Class col::NanoTimer
  - Try to estimate the overhead of a function call to start() or elapsed().
  - Use PAPI (http://icl.cs.utk.edu/projects/papi/) or the "high resolution timers project" (http://high-res-timers.sourceforge.net/) when they become widely available (without kernel patches).

Class Request

Member col::Request::process (bool show_hulls, AlgoE algo, Matrix *colmatrix, std::vector< ColObj > *colobjs, std::vector< Callback * > cycle_callbacks, bool useHulls, Grid *grid)
  - Some types not yet implementated.
  - process()const machen, wenn OSG erlaubt
  - `show_hulls` anders (z.B. als define) implementieren

Class col::Topology
  - Mehr Iterierungsfunktionen.

Member col::Topology::createRelations (void)
  Calc sizes of vectors first, so that we can do a resize() for each vector before filling it, in order to reduce memory fragmentation.

Class VisDebug
  All the functions from Y/visdebug.c

File ColIntersect.cpp
  - Return intersection point.

IntersectPolygons: additional parameter for poly2's normal if available.

- Make comments consistent.
- Check comments.

Member col::intersectCoplanarEdges (const Pnt3f &v0V, const Pnt3f &v1V, const Pnt3f &u0V, const Pnt3f &u1V, unsigned int x, unsigned int y)
  Optimierung: Faktorisieren, um erste zwei Berechungen nicht mehrfach mit gleichen Parametern durchzufuehren!!!

Member col::intersectEdgePolygon (const Pnt3f &v1, const Pnt3f &v2, const Pnt3f *poly, unsigned int plSize, const Vec3f &normalV, unsigned int x, unsigned int y)
  Schleife ueber intersectCoplanarEdges kann optimiert werden!

Member col::intersectPolygons (const Pnt3f *poly1, int plSize1, const Pnt3f *poly2, int plSize2, const unsigned int *index1, const unsigned int *index2, const osg::Matrix *cxform)
  Da ein Viereck planar ist, braucht man eigentlich die Unterscheidung zwischen Quadrangle und Quadstrip doch nicht machen, oder?

File Collision.cpp
  - Neg. callbacks implementieren.
  - osg::Log benutzen statt stderr? (ist nicht thread-safe..)
  - If there is something in the Requests queue, do a sync, before processing the queue.
  - Instanzvariablen tatsaechlich (gemaess Guidelines) mit _ benennen.
  - Threadfaehigkeit neu eingebaut, ausgiebig test (tobias)

Member col::PolyIntersectT (Data *data)
  Als Funktor machen!

File ColObj.cpp
  - Flags m_stationary and m_flexible (siehe ctor) auswerten.
  - Die Instanzvariable m_name im ColObj zu String machen.
  - Internetadresse in Kommentaren anpassen

Member col::pseudo_random (void)
  - Check that the seed is not the unique "bad" number as explained in http://home.t-online.de/home/mok-kong.shen/ .
  - a should be a primitive root of c (see URL above).
  - Groesseres c suchen.

Member col::axisToMat (const Vec3f &a, float d)
  d = -d; kann man wahrscheinlich wieder rauswerfen, wenn man unten die Transposition auch entfernt.

Member col::sortVerticesCounterClockwise (const vector< Pnt3f > &vertex, const Vec3f &normal, TopoFace &face)
  Use "Lamda Library" (Boost).

Member col::geomFromPoints (const Pnt3f vertex[], unsigned int nvertices, unsigned int face[], const unsigned int face_nv[], unsigned int nfaces, int gl_type, bool skip_redundant, const Vec3f normals[])
  - immer noch wird die Variable NumOri gebraucht..

Member col::sleep (unsigned int microseconds)
  - Funktion suchen, die Mikrosekunden kann.

Member col::lockToProcessor (unsigned int processor)
  Implement for Windows.

Member col::isectEdgePolygon (const Pnt3f &v1, const Pnt3f &v2, const Pnt3f *poly, unsigned int plSize, const Vec3f &normalV, unsigned int x, unsigned int y, bool *isect, bool *oneside)
  Schleife ueber intersectCoplanarEdges koennte optimiert werden.

Member col::pointInPolygon (const Pnt3f &pt, const Pnt3f *poly, unsigned int plSize, unsigned int x, unsigned int y)
  Fuer Dreiecke und Vierecke optimieren!