123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- package min3d.core;
- import min3d.vos.Color4;
- import min3d.vos.Number3d;
- import min3d.vos.Uv;
- public class Vertices
- {
- private Number3dBufferList _points;
- private UvBufferList _uvs;
- private Number3dBufferList _normals;
- private Color4BufferList _colors;
-
- private boolean _hasUvs;
- private boolean _hasNormals;
- private boolean _hasColors;
-
-
- /**
- * Used by Object3d to hold the lists of vertex points, texture coordinates (UV), normals, and vertex colors.
- * Use "addVertex()" to build the vertex data for the Object3d instance associated with this instance.
- *
- * Direct manipulation of position, UV, normal, or color data can be done directly through the associated
- * 'buffer list' instances contained herein.
- */
- public Vertices(int $maxElements)
- {
- _points = new Number3dBufferList($maxElements);
-
- _hasUvs = true;
- _hasNormals = true;
- _hasColors = true;
-
- if (_hasUvs) _uvs = new UvBufferList($maxElements);
- if (_hasNormals) _normals = new Number3dBufferList($maxElements);
- if (_hasColors) _colors = new Color4BufferList($maxElements);
- }
- /**
- * This version of the constructor adds 3 boolean arguments determine whether
- * uv, normal, and color lists will be used by this instance.
- * Set to false when appropriate to save memory, increase performance.
- */
- public Vertices(int $maxElements, Boolean $useUvs, Boolean $useNormals, Boolean $useColors)
- {
- _points = new Number3dBufferList($maxElements);
-
- _hasUvs = $useUvs;
- _hasNormals = $useNormals;
- _hasColors = $useColors;
-
- if (_hasUvs) _uvs = new UvBufferList($maxElements);
- if (_hasNormals) _normals = new Number3dBufferList($maxElements);
- if (_hasColors) _colors = new Color4BufferList($maxElements);
- }
-
- public Vertices(Number3dBufferList $points, UvBufferList $uvs, Number3dBufferList $normals,
- Color4BufferList $colors)
- {
- _points = $points;
- _uvs = $uvs;
- _normals = $normals;
- _colors = $colors;
-
- _hasUvs = _uvs != null && _uvs.size() > 0;
- _hasNormals = _normals != null && _normals.size() > 0;
- _hasColors = _colors != null && _colors.size() > 0;
- }
-
- public int size()
- {
- return _points.size();
- }
-
- public int capacity()
- {
- return _points.capacity();
- }
-
- public boolean hasUvs()
- {
- return _hasUvs;
- }
- public boolean hasNormals()
- {
- return _hasNormals;
- }
-
- public boolean hasColors()
- {
- return _hasColors;
- }
-
-
- /**
- * Use this to populate an Object3d's vertex data.
- * Return's newly added vertex's index
- *
- * If hasUvs, hasNormals, or hasColors was set to false,
- * their corresponding arguments are just ignored.
- */
- public short addVertex(
- float $pointX, float $pointY, float $pointZ,
- float $textureU, float $textureV,
- float $normalX, float $normalY, float $normalZ,
- short $colorR, short $colorG, short $colorB, short $colorA)
- {
- _points.add($pointX, $pointY, $pointZ);
-
- if (_hasUvs) _uvs.add($textureU, $textureV);
- if (_hasNormals) _normals.add($normalX, $normalY, $normalZ);
- if (_hasColors) _colors.add($colorR, $colorG, $colorB, $colorA);
-
- return (short)(_points.size()-1);
- }
-
- /**
- * More structured-looking way of adding a vertex (but potentially wasteful).
- * The VO's taken in as arguments are only used to read the values they hold
- * (no references are kept to them).
- * Return's newly added vertex's index
- *
- * If hasUvs, hasNormals, or hasColors was set to false,
- * their corresponding arguments are just ignored.
- */
- public short addVertex(Number3d $point, Uv $textureUv, Number3d $normal, Color4 $color)
- {
- _points.add($point);
-
- if (_hasUvs) _uvs.add($textureUv);
- if (_hasNormals) _normals.add($normal);
- if (_hasColors) _colors.add($color);
-
- return (short)(_points.size()-1);
- }
-
- public void overwriteVerts(float[] $newVerts)
- {
- _points.overwrite($newVerts);
- }
-
- public void overwriteNormals(float[] $newNormals)
- {
- _normals.overwrite($newNormals);
- }
-
- Number3dBufferList points() /*package-private*/
- {
- return _points;
- }
-
- /**
- * List of texture coordinates
- */
- UvBufferList uvs() /*package-private*/
- {
- return _uvs;
- }
-
- /**
- * List of normal values
- */
- Number3dBufferList normals() /*package-private*/
- {
- return _normals;
- }
-
- /**
- * List of color values
- */
- Color4BufferList colors() /*package-private*/
- {
- return _colors;
- }
-
- public Vertices clone()
- {
- Vertices v = new Vertices(_points.clone(), _uvs.clone(), _normals.clone(), _colors.clone());
- return v;
- }
- }
|