Commit 91e2e1ec404c6a308d14e4ba85fdeae0e22ba2ea
1 parent
1657f19c
went to a better way of using the dynamic network
Showing
1 changed file
with
79 additions
and
70 deletions
Show diff stats
stim/gl/gl_spider.h
1 | -#ifndef STIM_GL_SPIDER_H | |
1 | + #ifndef STIM_GL_SPIDER_H | |
2 | 2 | #define STIM_GL_SPIDER_H |
3 | 3 | |
4 | 4 | //#include <GL/glew.h> |
... | ... | @@ -138,7 +138,9 @@ class gl_spider // : public virtual gl_texture<T> |
138 | 138 | stim::cuda::cuda_texture t_pos; //cuda_texture object used as an interface between OpenGL and cuda for position vectors. |
139 | 139 | stim::cuda::cuda_texture t_mag; //cuda_texture object used as an interface between OpenGL and cuda for size vectors. |
140 | 140 | stim::cuda::cuda_texture t_len; //cuda_texture object used as an interface between OpenGL and cuda for size vectors. |
141 | - | |
141 | + | |
142 | + int last_fiber; //variable that tracks the last fiber hit during tracing. -1 if no fiber was hit. | |
143 | + | |
142 | 144 | |
143 | 145 | #ifdef DEBUG |
144 | 146 | stringstream name; |
... | ... | @@ -1145,8 +1147,8 @@ class gl_spider // : public virtual gl_texture<T> |
1145 | 1147 | out[3] = temp[2]; |
1146 | 1148 | } |
1147 | 1149 | #ifdef DEBUG |
1148 | - std::cout << "out is " << out << std::endl; | |
1149 | - std::cout << "when rotating from " << from << " to " << dir << std::endl; | |
1150 | +// std::cout << "out is " << out << std::endl; | |
1151 | +// std::cout << "when rotating from " << from << " to " << dir << std::endl; | |
1150 | 1152 | #endif |
1151 | 1153 | return out; |
1152 | 1154 | } |
... | ... | @@ -1316,20 +1318,20 @@ class gl_spider // : public virtual gl_texture<T> |
1316 | 1318 | void |
1317 | 1319 | saveNetwork(std::string name) |
1318 | 1320 | { |
1319 | -/* stim::glObj<float> sk; | |
1321 | + stim::glObj<float> sk1; | |
1320 | 1322 | for(int i = 0; i < nt.sizeE(); i++) |
1321 | 1323 | { |
1322 | - std::vector<stim::vec< float > > cm = nt.getEdgeCenterLineMag(i); | |
1324 | + std::vector<float> cm = nt.getEdgeCenterLineMag(i); | |
1323 | 1325 | std::vector<stim::vec3< float > > ce = nt.getEdgeCenterLine(i); |
1324 | 1326 | sk.Begin(stim::OBJ_LINE); |
1325 | 1327 | for(int j = 0; j < ce.size(); j++) |
1326 | 1328 | { |
1327 | - sk.TexCoord(cm[j][0]); | |
1328 | - sk.Vertex(ce[j][0], ce[j][1], ce[j][2]); | |
1329 | + sk1.TexCoord(cm[j]); | |
1330 | + sk1.Vertex(ce[j][0], ce[j][1], ce[j][2]); | |
1329 | 1331 | } |
1330 | - sk.End(); | |
1332 | + sk1.End(); | |
1331 | 1333 | } |
1332 | -*/ sk.save(name); | |
1334 | + sk1.save(name); | |
1333 | 1335 | } |
1334 | 1336 | |
1335 | 1337 | ///Depreciated, but might be reused later() |
... | ... | @@ -1517,9 +1519,6 @@ class gl_spider // : public virtual gl_texture<T> |
1517 | 1519 | while(!Empty()) |
1518 | 1520 | { |
1519 | 1521 | //clear the currently traced line and start a new one. |
1520 | - cL.clear(); | |
1521 | - cM.clear(); | |
1522 | - cD.clear(); | |
1523 | 1522 | curSeed = seeds.top(); |
1524 | 1523 | curSeedVec = seedsvecs.top(); |
1525 | 1524 | curSeedMag = seedsmags.top(); |
... | ... | @@ -1539,9 +1538,9 @@ class gl_spider // : public virtual gl_texture<T> |
1539 | 1538 | // findOptimalDirection(); |
1540 | 1539 | // Unbind(); |
1541 | 1540 | //THIS IS EXPERIMENTAL |
1542 | - Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels); | |
1543 | - findOptimalRadius(); | |
1544 | - Unbind(); | |
1541 | +// Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels); | |
1542 | +// findOptimalRadius(); | |
1543 | +// Unbind(); | |
1545 | 1544 | //THIS IS EXPERIMENTAL |
1546 | 1545 | |
1547 | 1546 | // cL.push_back(curSeed); |
... | ... | @@ -1593,17 +1592,17 @@ class gl_spider // : public virtual gl_texture<T> |
1593 | 1592 | ds[0], ds[1], ds[2], |
1594 | 1593 | ups[0], ups[1], ups[2]); |
1595 | 1594 | ///Set the look at distance |
1596 | - sk.Render(); ///Render the network | |
1597 | -// nt.Render(); | |
1595 | +// sk.Render(); ///Render the network | |
1596 | + nt.Render(); | |
1598 | 1597 | |
1599 | 1598 | CHECK_OPENGL_ERROR |
1600 | 1599 | |
1601 | 1600 | |
1602 | - glLoadName((int) sk.numL()); ///Load all the names | |
1603 | -// glLoadName(nt.sizeE()); | |
1601 | +// glLoadName((int) sk.numL()); ///Load all the names | |
1602 | + glLoadName(nt.sizeE()); | |
1604 | 1603 | |
1605 | - sk.RenderLine(cL); ///Render the current line. | |
1606 | -// nt.RenderLine(cL); | |
1604 | +// sk.RenderLine(cL); ///Render the current line. | |
1605 | + nt.RenderLine(cL); | |
1607 | 1606 | |
1608 | 1607 | // glPopName(); |
1609 | 1608 | glFlush(); ///Flush the buffer |
... | ... | @@ -1654,55 +1653,51 @@ class gl_spider // : public virtual gl_texture<T> |
1654 | 1653 | cM.clear(); |
1655 | 1654 | } |
1656 | 1655 | |
1657 | -/* | |
1656 | + | |
1658 | 1657 | void |
1659 | - addToNetwork(pair<stim::fiber<float>, int> in, stim::vec3<float> spos, | |
1660 | - stim::vec<float> smag, stim::vec3<float> sdir) | |
1658 | + addToNetwork(std::vector<stim::vec3<float> > L, std::vector<float > M, stim::vec3<float> spos, stim::vec3<float> sdir, float smag) | |
1661 | 1659 | { |
1662 | - #ifdef TIMING | |
1663 | - double s = std::clock(); | |
1664 | - #endif | |
1665 | - | |
1666 | - std::vector<stim::vec3<float> > ce = in.first.centerline(); | |
1667 | - std::vector<stim::vec<float> > cm = in.first.centerlinemag(); | |
1668 | 1660 | //if the fiber is longer than 2 steps (the number it takes to diverge) |
1669 | - if(ce.size() > 3) | |
1661 | + if(L.size() > 3) | |
1670 | 1662 | { |
1671 | 1663 | //if we did not hit a fiber |
1672 | - if(in.second == -1) | |
1664 | + if(last_fiber == -1) | |
1673 | 1665 | { |
1674 | - spos[0] = spos[0]-sdir[0]*smag[0]/2.; | |
1675 | - spos[1] = spos[1]-sdir[1]*smag[0]/2.; | |
1676 | - spos[2] = spos[2]-sdir[2]*smag[0]/2.; | |
1677 | - int h = selectObject(spos, -sdir, smag[0]); | |
1666 | + spos[0] = spos[0]-sdir[0]*smag; | |
1667 | + spos[1] = spos[1]-sdir[1]*smag; | |
1668 | + spos[2] = spos[2]-sdir[2]*smag; | |
1669 | + int h = selectObject(spos, -sdir, smag); | |
1678 | 1670 | //did we start with a fiber? |
1679 | 1671 | if(h != -1 && h < nt.sizeE()) |
1680 | - nt.addEdge(ce, cm, h, -1); | |
1672 | + nt.addEdge(L, M, h, -1); | |
1681 | 1673 | else |
1682 | - nt.addEdge(ce, cm, -1, -1); | |
1674 | + nt.addEdge(L, M, -1, -1); | |
1683 | 1675 | } |
1684 | 1676 | //if we hit a fiber? |
1685 | - else if(in.second != -1) | |
1677 | + else if(last_fiber != -1) | |
1686 | 1678 | { |
1687 | - nt.addEdge(ce,cm,-1, in.second); | |
1688 | - spos[0] = spos[0]-sdir[0]*smag[0]/2.; | |
1689 | - spos[1] = spos[1]-sdir[1]*smag[0]/2.; | |
1690 | - spos[2] = spos[2]-sdir[2]*smag[0]/2.; | |
1691 | - int h = selectObject(spos, -sdir, smag[0]); | |
1679 | + nt.addEdge(L, M, -1, last_fiber); | |
1680 | + spos[0] = spos[0]-sdir[0]*smag; | |
1681 | + spos[1] = spos[1]-sdir[1]*smag; | |
1682 | + spos[2] = spos[2]-sdir[2]*smag; | |
1683 | + int h = selectObject(spos, -sdir, smag); | |
1692 | 1684 | //did start with a fiber? |
1693 | 1685 | if(h != -1 && h < nt.sizeE()){ |
1694 | 1686 | // std::cout << "got here double" << smag.str() << std::endl; |
1695 | - nt.addEdge(ce,cm, h, in.second); | |
1696 | - } else { nt.addEdge(ce,cm, -1, -1);} | |
1687 | + nt.addEdge(L, M, h, last_fiber); | |
1688 | + } | |
1689 | + else | |
1690 | + { | |
1691 | + nt.addEdge(L, M, -1, -1); | |
1692 | + } | |
1697 | 1693 | } |
1698 | 1694 | } |
1699 | 1695 | |
1700 | - #ifdef TIMING | |
1701 | - double nt = (std::clock() - s) / (double) CLOCKS_PER_SEC; | |
1702 | - network_time += nt * 1000.0; | |
1696 | + #ifdef DEBUG | |
1697 | + iter++; | |
1703 | 1698 | #endif |
1704 | 1699 | } |
1705 | -*/ | |
1700 | +/* | |
1706 | 1701 | void |
1707 | 1702 | addToNetwork(std::vector<stim::vec3<float> > L, std::vector<float > M) |
1708 | 1703 | { |
... | ... | @@ -1722,7 +1717,7 @@ class gl_spider // : public virtual gl_texture<T> |
1722 | 1717 | #endif |
1723 | 1718 | } |
1724 | 1719 | } |
1725 | - | |
1720 | +*/ | |
1726 | 1721 | |
1727 | 1722 | void |
1728 | 1723 | printSizes() |
... | ... | @@ -1735,22 +1730,31 @@ class gl_spider // : public virtual gl_texture<T> |
1735 | 1730 | traceLine(stim::vec3<float> pos, float mag, int min_cost) |
1736 | 1731 | { |
1737 | 1732 | //starting (seed) position and magnitude. |
1733 | + last_fiber = -1; | |
1734 | + cL.clear(); | |
1735 | + cM.clear(); | |
1736 | + cD.clear(); | |
1737 | + | |
1738 | 1738 | stim::vec3<float> spos = getPosition(); |
1739 | + stim::vec3<float> sdir = getDirection(); | |
1739 | 1740 | float smag = getMagnitude(); |
1740 | - stim::vec3<float> sdir = getDirection(); | |
1741 | 1741 | |
1742 | -// Bind(); | |
1743 | -// sk.Begin(stim::OBJ_LINE); | |
1742 | + setPosition(pos); | |
1743 | + setMagnitude(mag); | |
1744 | 1744 | |
1745 | + cL.push_back(p); | |
1746 | + cD.push_back(d); | |
1747 | + cM.push_back(m); | |
1748 | +// stim::vec3<float> spos = getPosition(); | |
1749 | +// float smag = getMagnitude(); | |
1750 | +// stim::vec3<float> sdir = getDirection(); | |
1745 | 1751 | |
1746 | - sk.createFromSelf(GL_SELECT); | |
1747 | -// nt.createFromSelf(GL_SELECT); | |
1752 | +// Bind(); | |
1753 | +// sk.Begin(stim::OBJ_LINE); | |
1748 | 1754 | |
1749 | - cL.push_back(pos); | |
1750 | - cM.push_back(mag); | |
1751 | 1755 | |
1752 | -// setPosition(pos); | |
1753 | -// setMagnitude(mag); | |
1756 | + //sk.createFromSelf(GL_SELECT); | |
1757 | + nt.createFromSelf(GL_SELECT); | |
1754 | 1758 | int h; |
1755 | 1759 | bool started = false; |
1756 | 1760 | bool running = true; |
... | ... | @@ -1761,7 +1765,7 @@ class gl_spider // : public virtual gl_texture<T> |
1761 | 1765 | if (cost > min_cost){ |
1762 | 1766 | running = false; |
1763 | 1767 | branchDetection2(); |
1764 | - addToNetwork(cL, cM); | |
1768 | + addToNetwork(cL, cM, spos, sdir, smag); | |
1765 | 1769 | #ifdef DEBUG |
1766 | 1770 | std::cerr << "the cost of " << cost << " > " << min_cost << std::endl; |
1767 | 1771 | #endif |
... | ... | @@ -1769,13 +1773,14 @@ class gl_spider // : public virtual gl_texture<T> |
1769 | 1773 | } else { |
1770 | 1774 | //Have we found the edge of the map? |
1771 | 1775 | pos = getPosition(); |
1772 | - if(pos[0] > size[0] || pos[1] > size[1] | |
1773 | - || pos[2] > size[2] || pos[0] < 0 | |
1774 | - || pos[1] < 0 || pos[2] < 0) | |
1776 | + if(p[0] > size[0] || p[1] > size[1] | |
1777 | + || p[2] > size[2] || p[0] < 0 | |
1778 | + || p[1] < 0 || p[2] < 0) | |
1775 | 1779 | { |
1776 | 1780 | running = false; |
1777 | 1781 | branchDetection2(); |
1778 | - addToNetwork(cL, cM); | |
1782 | + // addToNetwork(cL, cM); | |
1783 | + addToNetwork(cL, cM, spos, sdir, smag); | |
1779 | 1784 | #ifdef DEBUG |
1780 | 1785 | std::cerr << "I hit and edge" << std::endl; |
1781 | 1786 | #endif |
... | ... | @@ -1790,10 +1795,11 @@ class gl_spider // : public virtual gl_texture<T> |
1790 | 1795 | } |
1791 | 1796 | //Has the template size gotten unreasonable? |
1792 | 1797 | mag = getMagnitude(); |
1793 | - if(mag > 75 || mag < 1){ | |
1798 | + if(m > 75 || m < 1){ | |
1794 | 1799 | running = false; |
1795 | 1800 | branchDetection2(); |
1796 | - addToNetwork(cL, cM); | |
1801 | + // addToNetwork(cL, cM); | |
1802 | + addToNetwork(cL, cM, spos, sdir, smag); | |
1797 | 1803 | #ifdef DEBUG |
1798 | 1804 | std::cerr << "The templates are too big" << std::endl; |
1799 | 1805 | #endif |
... | ... | @@ -1807,13 +1813,16 @@ class gl_spider // : public virtual gl_texture<T> |
1807 | 1813 | #ifdef DEBUG |
1808 | 1814 | std::cerr << "I hit the fiber " << h << std::endl; |
1809 | 1815 | #endif |
1816 | + last_fiber = h; | |
1810 | 1817 | running = false; |
1811 | 1818 | branchDetection2(); |
1812 | - addToNetwork(cL, cM); | |
1819 | + // addToNetwork(cL, cM); | |
1820 | + addToNetwork(cL, cM, spos, sdir, smag); | |
1813 | 1821 | break; |
1814 | 1822 | } |
1815 | 1823 | else { |
1816 | - cL.push_back(stim::vec3<float>(p[0], p[1],p[2])); | |
1824 | + cL.push_back(p); | |
1825 | + cD.push_back(d); | |
1817 | 1826 | cM.push_back(m); |
1818 | 1827 | // Unbind(); |
1819 | 1828 | CHECK_OPENGL_ERROR | ... | ... |