| 109 | } |
| 110 | |
| 111 | public <T> void build3d(List<T> d, Function<T, Vec3> t) { |
| 112 | free(); |
| 113 | |
| 114 | FloatBuffer f = (allocated == null || allocated.capacity() != d.size() * 3) ? ByteBuffer.allocateDirect( |
| 115 | 4 * d.size() * 3) |
| 116 | .order(ByteOrder.nativeOrder()) |
| 117 | .asFloatBuffer() : allocated; |
| 118 | for (T dd : d) { |
| 119 | Vec3 v = t.apply(dd); |
| 120 | f.put((float) v.x).put((float) v.y).put((float) v.z); |
| 121 | } |
| 122 | f.rewind(); |
| 123 | cloud = build3(f, d.size()); |
| 124 | allocated = f; |
| 125 | is2d = false; |
| 126 | } |
| 127 | |
| 128 | public <T> void build128d(List<T> d, Function<T, float[]> t) { |
| 129 | free(); |