|
From: <tre...@us...> - 2007-09-18 16:03:15
|
Revision: 416
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=416&view=rev
Author: trevorolio
Date: 2007-09-18 09:03:11 -0700 (Tue, 18 Sep 2007)
Log Message:
-----------
Added the ability to choose a male or female avatar.
Both avatar models still need work.
Consolidated the two UIConstants classes into one.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Body.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Space.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/BodyConstants.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/UIConstants.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyDocument.java
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/xml/test/XMLTest.java
Added Paths:
-----------
maven/trunk/ogoglio-common/src/main/resources/avatar/female.obj
maven/trunk/ogoglio-common/src/main/resources/avatar/female.smap
maven/trunk/ogoglio-common/src/main/resources/avatar/female1.jpg
maven/trunk/ogoglio-common/src/main/resources/avatar/male.obj
maven/trunk/ogoglio-common/src/main/resources/avatar/male.smap
maven/trunk/ogoglio-common/src/main/resources/avatar/male1.jpg
Removed Paths:
-------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/UIConstants.java
maven/trunk/ogoglio-common/src/main/resources/avatar/avatar.jpg
maven/trunk/ogoglio-common/src/main/resources/avatar/avatar.obj
maven/trunk/ogoglio-common/src/main/resources/avatar/avatar.smap
maven/trunk/ogoglio-common/src/main/resources/avatar/avatar1.jpg
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -37,8 +37,9 @@
import com.ogoglio.message.PayloadFactory;
import com.ogoglio.message.TCPChannel;
import com.ogoglio.util.ArgumentUtils;
+import com.ogoglio.util.BodyConstants;
import com.ogoglio.util.Log;
-import com.ogoglio.viewer.render.UIConstants;
+import com.ogoglio.util.UIConstants;
import com.ogoglio.xml.AccountDocument;
import com.ogoglio.xml.BodyDocument;
import com.ogoglio.xml.DoorDocument;
@@ -721,15 +722,31 @@
}
public InputStream getUserGeometryStream(String username, String name) throws IOException {
- return UIConstants.getResource("avatar/avatar.obj");
+ User user = space.getUser(username);
+ if(user == null){
+ return null;
+ }
+ if(user.getBody().isMale()){
+ return UIConstants.getResource(BodyConstants.MALE_AVATAR_PATH);
+ } else {
+ return UIConstants.getResource(BodyConstants.FEMALE_AVATAR_PATH);
+ }
}
public InputStream getUserAnimationStream(String username, long animationID) throws IOException {
- return UIConstants.getUserAnimation((int) animationID);
+ return BodyConstants.getUserAnimation((int) animationID);
}
public InputStream getUserSkinMapStream(String username) throws IOException {
- return UIConstants.getResource("avatar/avatar.smap");
+ User user = space.getUser(username);
+ if(user == null){
+ return null;
+ }
+ if(user.getBody().isMale()){
+ return UIConstants.getResource(BodyConstants.MALE_SMAP_PATH);
+ } else {
+ return UIConstants.getResource(BodyConstants.FEMALE_SMAP_PATH);
+ }
}
public BodyDocument getBodyDocument(String username, long bodyID) throws IOException {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -482,7 +482,7 @@
}
public BodyDocument createBody(String bodyName) throws IOException {
- BodyDocument bodyDoc = new BodyDocument(-1, authenticator.getUsername(), bodyName, 0, 0, 0, 0, 0);
+ BodyDocument bodyDoc = new BodyDocument(-1, authenticator.getUsername(), bodyName, 0, 0, 0, 0, 0, false, 2, 1);
XMLElement element = wire.postAuthenticatedXML(descriptor.getBodiesURI(authenticator.getUsername()), bodyDoc.toString(), authenticator.getAuthCookie());
if (element == null) {
return null;
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Body.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Body.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Body.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -14,13 +14,22 @@
private int face = -1;
- public Body(long bodyID, int hair, int eyes, int nose, int mouth, int face) {
+ private boolean male = false;
+
+ private float height = 2;
+
+ private float girth = 1;
+
+ public Body(long bodyID, int hair, int eyes, int nose, int mouth, int face, boolean isMale, float height, float girth) {
this.bodyID = bodyID;
this.hair = hair;
this.eyes = eyes;
this.nose = nose;
this.mouth = mouth;
this.face = face;
+ this.male = isMale;
+ this.height = height;
+ this.girth = girth;
}
public long getBodyID() {
@@ -54,5 +63,20 @@
this.mouth = mouthIndex;
this.face = faceIndex;
}
+
+ public boolean isMale() {
+ return male;
+ }
+
+ public float getHeight(){
+ return height;
+ }
+ public float getGirth(){
+ return girth;
+ }
+
+ public void setMale(boolean male) {
+ this.male = male;
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Space.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Space.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Space.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -558,9 +558,9 @@
public Body getBody(String username, long bodyID) throws IOException {
if (bodyID < 0) {
- return new Body(-1, 0, 0, 0, 0, 0);
+ return new Body(-1, 0, 0, 0, 0, 0, false, 2, 0);
}
BodyDocument bodyDoc = spaceContext.getBodyDocument(username, bodyID);
- return new Body(bodyDoc.getBodyID(), bodyDoc.getHairIndex(), bodyDoc.getEyesIndex(), bodyDoc.getNoseIndex(), bodyDoc.getMouthIndex(), bodyDoc.getFaceIndex());
+ return new Body(bodyDoc.getBodyID(), bodyDoc.getHairIndex(), bodyDoc.getEyesIndex(), bodyDoc.getNoseIndex(), bodyDoc.getMouthIndex(), bodyDoc.getFaceIndex(), bodyDoc.isMale(), bodyDoc.getHeight(), bodyDoc.getGirth());
}
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/User.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -46,7 +46,7 @@
body = space.getBody(username, bodyID);
} catch (IOException e) {
e.printStackTrace();
- body = new Body(-1, 0, 0, 0, 0, 0);
+ body = new Body(-1, 0, 0, 0, 0, 0, false, 2, 1);
}
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/BodyConstants.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/BodyConstants.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/BodyConstants.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -1,19 +1,24 @@
package com.ogoglio.util;
import java.awt.Image;
+import java.io.InputStream;
public class BodyConstants {
public static final String TEXTURE_RESOURCE_PATH = "avatar/";
- public static Image BASE_SKIN_TEXTURE1 = UIConstants.loadImageFromResource(TEXTURE_RESOURCE_PATH + "avatar1.jpg");
+ public static Image MALE_BASE_SKIN_TEXTURE1 = UIConstants.loadImageFromResource(TEXTURE_RESOURCE_PATH + "male1.jpg");
- public static final int BASE_SKIN_TEXTURE_WIDTH = BASE_SKIN_TEXTURE1.getWidth(null);
+ public static Image FEMALE_BASE_SKIN_TEXTURE1 = UIConstants.loadImageFromResource(TEXTURE_RESOURCE_PATH + "female1.jpg");
- public static final int BASE_SKIN_TEXTURE_HEIGHT = BASE_SKIN_TEXTURE1.getHeight(null);
+ public static final int BASE_SKIN_TEXTURE_WIDTH = MALE_BASE_SKIN_TEXTURE1.getWidth(null);
- public static final Image[] BASE_SKIN_TEXTURES = { BASE_SKIN_TEXTURE1 };
+ public static final int BASE_SKIN_TEXTURE_HEIGHT = MALE_BASE_SKIN_TEXTURE1.getHeight(null);
+ public static final Image[] MALE_BASE_SKIN_TEXTURES = { MALE_BASE_SKIN_TEXTURE1 };
+
+ public static final Image[] FEMALE_BASE_SKIN_TEXTURES = { FEMALE_BASE_SKIN_TEXTURE1 };
+
public static final Image EYES_1 = UIConstants.loadImageFromResource(TEXTURE_RESOURCE_PATH + "Eyes1.gif");
public static final Image EYES_2 = UIConstants.loadImageFromResource(TEXTURE_RESOURCE_PATH + "Eyes2.gif");
@@ -31,4 +36,45 @@
public static final Image MOUTH_2 = UIConstants.loadImageFromResource(TEXTURE_RESOURCE_PATH + "Mouth2.gif");
public static final Image[] MOUTHES = { MOUTH_1, MOUTH_2 };
+
+ public static final String DEFAULT_ANIMATION_PATH = "avatar/avatar.bvh";
+
+ public static final String WALK_ANIMATION_PATH = "avatar/avatar-walk.bvh";
+
+ public static final String WAVE_ANIMATION_PATH = "avatar/avatar-wave.bvh";
+
+ public static final String POINT_ANIMATION_PATH = "avatar/avatar-point.bvh";
+
+ public static final String LAUGH_ANIMATION_PATH = "avatar/avatar-laugh.bvh";
+
+ public static final String CLAP_ANIMATION_PATH = "avatar/avatar-clap.bvh";
+
+ public static final String[] USER_ANIMATION_COMMANDS = { "default", "walk", "wave", "point", "laugh", "clap" };
+
+ public static final String[] USER_ANIMATION_PATHS = { DEFAULT_ANIMATION_PATH, WALK_ANIMATION_PATH, WAVE_ANIMATION_PATH, POINT_ANIMATION_PATH, LAUGH_ANIMATION_PATH, CLAP_ANIMATION_PATH };
+
+ public static final String MALE_AVATAR_PATH = "avatar/male.obj";
+
+ public static final String MALE_SMAP_PATH = "avatar/male.smap";
+
+ public static final String FEMALE_AVATAR_PATH = "avatar/female.obj";
+
+ public static final String FEMALE_SMAP_PATH = "avatar/female.smap";
+
+ public static InputStream getUserAnimation(int animationID) {
+ if (animationID < 0 || animationID >= USER_ANIMATION_PATHS.length) {
+ return null;
+ }
+ return UIConstants.getResource(USER_ANIMATION_PATHS[animationID]);
+ }
+
+ public static InputStream getUserAnimation(String command) {
+ for (int i = 0; i < USER_ANIMATION_COMMANDS.length; i++) {
+ if (USER_ANIMATION_COMMANDS[i].equals(command)) {
+ return UIConstants.getResource(USER_ANIMATION_PATHS[i]);
+ }
+ }
+ return null;
+ }
+
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/UIConstants.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/UIConstants.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/UIConstants.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -21,9 +21,41 @@
import java.io.InputStream;
import javax.swing.ImageIcon;
+import javax.vecmath.Color3f;
public class UIConstants {
+ /*
+ * dark blue #10628B 16/98/139 0.0625f, 0.382f, 0.542
+ *
+ * light blue #1A99D9 26/153/217 0.1015f, 0.5976f, 0.8476f
+ *
+ * brown #8C6311 140/99/17 0.5468f, 0.3867f, 0.0664f
+ *
+ * orange #D9791A 217/121/26 0.8476f, 0.4726f, 0.1015f
+ *
+ * dark gray #737373 115/115/115 0.4492f, 0.4492f, 0.4492f
+ *
+ * light gray #8C8C8C 140/140/140 0.5468f, 0.5468f, 0.5468f
+ */
+ public static Color3f WHITE = new Color3f(1, 1, 1);
+
+ public static Color3f BLACK = new Color3f(0, 0, 0);
+
+ public static Color3f DARK_BLUE = new Color3f(0.0625f, 0.382f, 0.542f);
+
+ public static Color3f LIGHT_BLUE = new Color3f(0.1015f, 0.5976f, 0.8476f);
+
+ public static Color3f BROWN = new Color3f(0.5468f, 0.3867f, 0.0664f);
+
+ public static Color3f ORANGE = new Color3f(0.8476f, 0.4726f, 0.1015f);
+
+ public static Color3f DARK_GRAY = new Color3f(0.4492f, 0.4492f, 0.4492f);
+
+ public static Color3f LIGHT_GRAY = new Color3f(0.5468f, 0.5468f, 0.5468f);
+
+ public static Color3f DARK_GREEN = new Color3f(0.6468f, 0.7867f, 0.0664f);
+
public static Image loadImageFromResource(String resourcePath) {
return loadIconFromResource(resourcePath).getImage();
}
@@ -62,4 +94,13 @@
throw new IllegalStateException("Could not load resource: " + resourcePath);
}
}
+
+ public static InputStream getResource(String resourcePath) {
+ InputStream resource = UIConstants.class.getClassLoader().getResourceAsStream(resourcePath);
+ if (resource == null) {
+ resource = UIConstants.class.getResourceAsStream(resourcePath);
+ }
+ return resource;
+
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -48,6 +48,7 @@
import com.ogoglio.client.model.Thing;
import com.ogoglio.client.model.User;
import com.ogoglio.util.Log;
+import com.ogoglio.util.UIConstants;
import com.ogoglio.viewer.j3d.bvh.Bvh;
import com.ogoglio.viewer.j3d.bvh.BvhParseException;
import com.ogoglio.viewer.j3d.bvh.BvhParser;
@@ -62,7 +63,6 @@
import com.ogoglio.viewer.render.RenderableParseException;
import com.ogoglio.viewer.render.Renderer;
import com.ogoglio.viewer.render.ThingRenderable;
-import com.ogoglio.viewer.render.UIConstants;
import com.ogoglio.viewer.render.UserRenderable;
import com.sun.j3d.utils.picking.PickTool;
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -36,7 +36,6 @@
import com.ogoglio.viewer.j3d.body.SkinLoader;
import com.ogoglio.viewer.j3d.bvh.Bvh;
import com.ogoglio.viewer.j3d.bvh.BvhParseException;
-import com.ogoglio.viewer.j3d.bvh.BvhParser;
import com.ogoglio.viewer.j3d.obj.Obj;
import com.ogoglio.viewer.j3d.obj.ObjParseException;
import com.ogoglio.viewer.j3d.obj.ObjParser;
@@ -50,7 +49,7 @@
public class J3DUserRenderable extends BranchGroup implements UserRenderable {
private static final float MAGIC_SKELETON_SCALE = 2.5f;
-
+
public static float PERSON_HEIGHT = 2f;
private TransformGroup transformGroup = new TransformGroup();
@@ -60,7 +59,7 @@
private User user = null;
private Bvh defaultAnimation = null;
-
+
private J3DCamera camera = null;
private Skin skin = null;
@@ -74,62 +73,74 @@
private BodyAnimator animator = null;
private BodyAnimatorListener bodyAnimatorListener = new BodyAnimatorListener();
-
- float userHeight = 2; //meters
+ private float userHeight = 2; //meters
+
+ private boolean isVisible = true;
+
public J3DUserRenderable(User user, boolean setVisible, Bvh defaultAnimation) throws IOException, ObjParseException, BvhParseException, SkinMapParseException {
ArgumentUtils.assertNotNull(user);
this.user = user;
+ this.isVisible = setVisible;
ArgumentUtils.assertNotNull(defaultAnimation);
this.defaultAnimation = defaultAnimation;
-
- if (setVisible) {
+
+ setCapability(BranchGroup.ALLOW_DETACH);
+ setCapability(BranchGroup.ALLOW_BOUNDS_READ);
+ setCapabilities(transformGroup);
+ addChild(transformGroup);
+ setCapabilities(bodyGroup);
+ transformGroup.addChild(bodyGroup);
+
+ initBody();
+ }
+
+ private void initBody() throws IOException, ObjParseException, SkinMapParseException {
+ bodyGroup.removeAllChildren();
+ if (isVisible) {
ObjParser parser = new ObjParser(user, 0);
parser.setIgnoreMaterialsFiles(true);
Obj obj = parser.parse();
skin = new SkinLoader(obj, user.getBody()).generateSkin();
userHeight = skin.getHeight();
-
- SkinMapParser skinMapParser = new SkinMapParser(user);
- skinMap = skinMapParser.parse();
+ skinMap = new SkinMapParser(user).parse();
}
scaleBVH(defaultAnimation);
-
+
skeleton = new SkeletonLoader(defaultAnimation).generateSkeleton();
- //skeleton.addDebugAttachments();
- if(setVisible){
+ if (isVisible) {
skin.setSkeleton(skeleton, skinMap);
}
-
- setCapability(BranchGroup.ALLOW_DETACH);
- setCapability(BranchGroup.ALLOW_BOUNDS_READ);
- setCapabilities(transformGroup);
- addChild(transformGroup);
Transform3D rotationTransform = new Transform3D();
rotationTransform.rotY(Math.PI);
float hairHeight = defaultAnimation.getJointHeight("lFoot");
rotationTransform.setTranslation(new Vector3d(0, -1 * hairHeight, 0));
bodyGroup.setTransform(rotationTransform);
- if (setVisible) {
- bodyGroup.addChild(skin);
+ if (isVisible) {
+ BranchGroup skinBranch = new BranchGroup();
+ skinBranch.setCapability(BranchGroup.ALLOW_DETACH);
+ skinBranch.addChild(skin);
+ bodyGroup.addChild(skinBranch);
}
- bodyGroup.addChild(skeleton);
+ BranchGroup skeletonBranch = new BranchGroup();
+ skeletonBranch.setCapability(BranchGroup.ALLOW_DETACH);
+ skeletonBranch.addChild(skeleton);
+ bodyGroup.addChild(skeletonBranch);
- transformGroup.addChild(bodyGroup);
setPosition(user.getPosition());
playAnimation(defaultAnimation, false);
}
- private void scaleBVH(Bvh bvh){
+ private void scaleBVH(Bvh bvh) {
float bvhHeight = bvh.getHeight();
- if(bvhHeight != userHeight){
+ if (bvhHeight != userHeight) {
skeletonScale = userHeight / bvhHeight / MAGIC_SKELETON_SCALE; //TODO figure out why we need this magic scale number
bvh.scale(skeletonScale);
}
}
-
+
public void setNameTag(String nameTag) {
TransformGroup nameGroup = new TransformGroup();
nameGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
@@ -160,62 +171,6 @@
group.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
}
- /*
- private class SkinUpdater implements GeometryUpdater {
- Transform3D requestTransform = null;
-
- float[] coords = null;
-
- Point3f workingPoint = new Point3f();
-
- SkinUpdater(Transform3D requestTransform) {
- this.requestTransform = requestTransform;
- IndexedTriangleStripArray triArray = (IndexedTriangleStripArray) skin.getGeometry();
- coords = triArray.getCoordRefFloat();
- }
-
- public void updateData(Geometry geometry) {
- for (int i = 0; i < coords.length - 2; i += 3) {
- workingPoint.set(coords[i], coords[i + 1], coords[i + 2]);
- requestTransform.transform(workingPoint);
- coords[i] = workingPoint.x;
- coords[i + 1] = workingPoint.y;
- coords[i + 2] = workingPoint.z;
- }
- }
- }
- */
- /*
- private void fitSkin() {
- skin.setBoundsAutoCompute(true);
- BoundingBox bounds = (BoundingBox) skin.getBounds();
- Point3d upper = new Point3d();
- bounds.getUpper(upper);
- Point3d lower = new Point3d();
- bounds.getLower(lower);
- double originalHeight = upper.y - lower.y;
- skinScale = PERSON_HEIGHT / originalHeight;
-
- //Scale the skin
- Transform3D figureTransform = new Transform3D(new Quat4d(), new Vector3d(0, 0, 0), skinScale);
- Transform3D rotationTransform = new Transform3D();
- rotationTransform.rotY(Math.PI);
- figureTransform.mul(rotationTransform);
- SkinUpdater skinUpdater = new SkinUpdater(figureTransform);
- ((IndexedTriangleStripArray) skin.getGeometry()).updateData(skinUpdater);
-
- //Translate the skin so the feet are at Y == 0
- bounds = (BoundingBox) skin.getBounds();
- bounds.getLower(lower);
- if (lower.y != 0) {
- figureTransform = new Transform3D(new Quat4d(), new Vector3d(0, -lower.y, 0), 1);
- skinUpdater = new SkinUpdater(figureTransform);
- ((IndexedTriangleStripArray) skin.getGeometry()).updateData(skinUpdater);
- }
- bounds = (BoundingBox) skin.getBounds();
- }
- */
-
public void setCamera(Camera camera) {
if (camera == null) {
throw new IllegalArgumentException("Cannot set null camera");
@@ -261,7 +216,7 @@
public User getUser() {
return user;
}
-
+
public double getHeight() {
BoundingSphere bounds = (BoundingSphere) getBounds();
return Math.abs(bounds.getRadius() * 2);
@@ -276,7 +231,7 @@
return;
}
Body body = user.getBody();
- skin.updateTexture(body.getHair(), body.getEyes(), body.getNose(), body.getMouth(), body.getFace());
+ skin.updateTexture(body.getHair(), body.getEyes(), body.getNose(), body.getMouth(), body.getFace(), body.isMale());
}
public synchronized void stopAnimation() {
@@ -289,13 +244,13 @@
private class BodyAnimatorListener implements BodyAnimator.Listener {
public void bodyAnimationCompleted(BodyAnimator animator) {
- if(animator.getBvh() == defaultAnimation){
+ if (animator.getBvh() == defaultAnimation) {
return;
}
playAnimation(defaultAnimation, false);
}
}
-
+
public synchronized void playAnimation(Bvh bvh, boolean loop) {
if (animator != null) {
animator.cleanup();
@@ -307,4 +262,19 @@
animator.animate(loop);
}
}
+
+ public void setMale(boolean male) {
+ try {
+ initBody();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ObjParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (SkinMapParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/Skin.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -15,6 +15,7 @@
package com.ogoglio.viewer.j3d.body;
import java.awt.Graphics;
+import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.Vector;
@@ -37,7 +38,6 @@
import javax.vecmath.Vector3d;
import com.ogoglio.util.BodyConstants;
-import com.ogoglio.util.Log;
import com.ogoglio.viewer.j3d.body.Skeleton.Bone;
import com.ogoglio.viewer.j3d.smap.SkinMap;
import com.ogoglio.viewer.j3d.smap.SkinMap.Group;
@@ -53,7 +53,7 @@
private SkinUpdater skinUpdater = null;
- public Skin(int hair, int eyes, int nose, int mouth, int face) {
+ public Skin(int hair, int eyes, int nose, int mouth, int face, boolean isMale) {
setCapability(Skin.ALLOW_APPEARANCE_WRITE);
setCapability(Skin.ALLOW_PICKABLE_READ);
setCapability(Skin.ALLOW_GEOMETRY_READ);
@@ -69,7 +69,7 @@
texture.getImage(0).setCapability(ImageComponent.ALLOW_IMAGE_READ);
texture.getImage(0).setCapability(ImageComponent.ALLOW_IMAGE_WRITE);
- updateTexture(hair, eyes, nose, mouth, face);
+ updateTexture(hair, eyes, nose, mouth, face, isMale);
Appearance appearance = new Appearance();
TextureAttributes textureAtts = new TextureAttributes();
@@ -91,18 +91,22 @@
int hair, eyes, nose, mouth, face;
- public TextureUpdater(int hair, int eyes, int nose, int mouth, int face) {
+ boolean isMale = false;
+
+ public TextureUpdater(int hair, int eyes, int nose, int mouth, int face, boolean isMale) {
this.hair = hair;
this.eyes = eyes;
this.nose = nose;
this.mouth = mouth;
this.face = face;
+ this.isMale = isMale;
}
public void updateData(ImageComponent2D imageComp, int arg1, int arg2, int arg3, int arg4) {
Graphics g = imageComp.getImage().getGraphics();
- if (face >= 0 && face < BodyConstants.BASE_SKIN_TEXTURES.length) {
- g.drawImage(BodyConstants.BASE_SKIN_TEXTURES[face], 0, 0, null);
+ Image[] baseTextures = isMale ? BodyConstants.MALE_BASE_SKIN_TEXTURES : BodyConstants.FEMALE_BASE_SKIN_TEXTURES;
+ if (face >= 0 && face < baseTextures.length) {
+ g.drawImage(baseTextures[face], 0, 0, null);
}
if (eyes >= 0 && eyes < BodyConstants.EYES.length) {
g.drawImage(BodyConstants.EYES[eyes], 111, 90, 75, 37, null);
@@ -117,9 +121,9 @@
}
- public void updateTexture(int hair, int eyes, int nose, int mouth, int face) {
+ public void updateTexture(int hair, int eyes, int nose, int mouth, int face, boolean isMale) {
ImageComponent2D imageComp = (ImageComponent2D) texture.getImage(0);
- imageComp.updateData(new TextureUpdater(hair, eyes, nose, mouth, face), 0, 0, baseImage.getWidth(), baseImage.getHeight());
+ imageComp.updateData(new TextureUpdater(hair, eyes, nose, mouth, face, isMale), 0, 0, baseImage.getWidth(), baseImage.getHeight());
}
public void setGeometry(Geometry geo) {
@@ -268,12 +272,12 @@
}
public float getHeight() {
- BoundingBox bounds = (BoundingBox)getBounds();
+ BoundingBox bounds = (BoundingBox) getBounds();
Point3d upper = new Point3d();
bounds.getUpper(upper);
Point3d lower = new Point3d();
bounds.getLower(lower);
- return (float)(upper.y - lower.y);
+ return (float) (upper.y - lower.y);
}
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -73,7 +73,7 @@
normalArray[(i * 3) + 1] = normals[i].z;
}
- Skin skin = new Skin(body.getHair(), body.getEyes(), body.getNose(), body.getMouth(), body.getFace());
+ Skin skin = new Skin(body.getHair(), body.getEyes(), body.getNose(), body.getMouth(), body.getFace(), body.isMale());
IndexedTriangleArray array = new IndexedTriangleArray(vertices.length, TriangleArray.COORDINATES | TriangleArray.NORMALS | TriangleArray.TEXTURE_COORDINATE_2 | TriangleArray.BY_REFERENCE, indicesTotal);
array.setCoordRefFloat(vertexArray);
Deleted: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/UIConstants.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/UIConstants.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/render/UIConstants.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -1,127 +0,0 @@
-/* Copyright 2007 Transmutable (http://transmutable.com/)
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License. */
-
-package com.ogoglio.viewer.render;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.swing.ImageIcon;
-import javax.vecmath.Color3f;
-
-public class UIConstants {
- /*
- * dark blue #10628B 16/98/139 0.0625f, 0.382f, 0.542
- *
- * light blue #1A99D9 26/153/217 0.1015f, 0.5976f, 0.8476f
- *
- * brown #8C6311 140/99/17 0.5468f, 0.3867f, 0.0664f
- *
- * orange #D9791A 217/121/26 0.8476f, 0.4726f, 0.1015f
- *
- * dark gray #737373 115/115/115 0.4492f, 0.4492f, 0.4492f
- *
- * light gray #8C8C8C 140/140/140 0.5468f, 0.5468f, 0.5468f
- */
- public static Color3f WHITE = new Color3f(1, 1, 1);
-
- public static Color3f BLACK = new Color3f(0, 0, 0);
-
- public static Color3f DARK_BLUE = new Color3f(0.0625f, 0.382f, 0.542f);
-
- public static Color3f LIGHT_BLUE = new Color3f(0.1015f, 0.5976f, 0.8476f);
-
- public static Color3f BROWN = new Color3f(0.5468f, 0.3867f, 0.0664f);
-
- public static Color3f ORANGE = new Color3f(0.8476f, 0.4726f, 0.1015f);
-
- public static Color3f DARK_GRAY = new Color3f(0.4492f, 0.4492f, 0.4492f);
-
- public static Color3f LIGHT_GRAY = new Color3f(0.5468f, 0.5468f, 0.5468f);
-
- public static Color3f DARK_GREEN = new Color3f(0.6468f, 0.7867f, 0.0664f);
-
- public static final String DEFAULT_ANIMATION_PATH = "avatar/avatar.bvh";
-
- public static final String WALK_ANIMATION_PATH = "avatar/avatar-walk.bvh";
-
- public static final String WAVE_ANIMATION_PATH = "avatar/avatar-wave.bvh";
-
- public static final String POINT_ANIMATION_PATH = "avatar/avatar-point.bvh";
-
- public static final String LAUGH_ANIMATION_PATH = "avatar/avatar-laugh.bvh";
-
- public static final String CLAP_ANIMATION_PATH = "avatar/avatar-clap.bvh";
-
- public static final String[] USER_ANIMATION_COMMANDS = { "default", "walk", "wave", "point", "laugh", "clap" };
-
- public static final String[] USER_ANIMATION_PATHS = { DEFAULT_ANIMATION_PATH, WALK_ANIMATION_PATH, WAVE_ANIMATION_PATH, POINT_ANIMATION_PATH, LAUGH_ANIMATION_PATH, CLAP_ANIMATION_PATH };
-
- public static InputStream getUserAnimation(int animationID) {
- if(animationID < 0 || animationID >= USER_ANIMATION_PATHS.length){
- return null;
- }
- return getResource(USER_ANIMATION_PATHS[animationID]);
- }
-
- public static InputStream getUserAnimation(String command) {
- for (int i = 0; i < USER_ANIMATION_COMMANDS.length; i++) {
- if (USER_ANIMATION_COMMANDS[i].equals(command)) {
- return getResource(USER_ANIMATION_PATHS[i]);
- }
- }
- return null;
- }
-
- public static ImageIcon loadIconFromResource(String resourcePath) {
- try {
- byte[] buffer = null;
- InputStream resource = getResource(resourcePath);
-
- if (resource == null) {
- throw new IllegalStateException("Could not find resource: " + resourcePath);
- }
-
- BufferedInputStream in = new BufferedInputStream(resource);
- ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
- buffer = new byte[1024];
- int n;
- while ((n = in.read(buffer)) > 0) {
- out.write(buffer, 0, n);
- }
- in.close();
- out.flush();
-
- buffer = out.toByteArray();
- if (buffer.length == 0) {
- throw new IllegalStateException("Could not read resource: " + resourcePath);
- }
- return new ImageIcon(buffer);
- } catch (IOException ioe) {
- ioe.printStackTrace();
- throw new IllegalStateException("Could not load resource: " + resourcePath);
- }
- }
-
- public static InputStream getResource(String resourcePath) {
- InputStream resource = UIConstants.class.getClassLoader().getResourceAsStream(resourcePath);
- if (resource == null) {
- resource = UIConstants.class.getResourceAsStream(resourcePath);
- }
- return resource;
-
- }
-}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyDocument.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyDocument.java 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyDocument.java 2007-09-18 16:03:11 UTC (rev 416)
@@ -37,9 +37,15 @@
public static final String FACE_INDEX = "face";
+ public static final String IS_MALE = "ismale";
+
+ public static final String HEIGHT = "height";
+
+ public static final String GIRTH = "girth";
+
XMLElement data = null;
- public BodyDocument(long bodyID, String ownerUsername, String displayName, int hair, int eyes, int nose, int mouth, int face) {
+ public BodyDocument(long bodyID, String ownerUsername, String displayName, int hair, int eyes, int nose, int mouth, int face, boolean isMale, float height, float girth) {
data = new XMLElement(NAME);
data.setAttribute(BODY_ID, bodyID);
@@ -57,6 +63,9 @@
data.setAttribute(MOUTH_INDEX, mouth);
ArgumentUtils.assertNotNegative(face);
data.setAttribute(FACE_INDEX, face);
+ data.setAttribute(IS_MALE, isMale);
+ data.setAttribute(HEIGHT, height);
+ data.setAttribute(GIRTH, girth);
}
public BodyDocument(XMLElement data) {
@@ -135,6 +144,18 @@
data.setAttribute(FACE_INDEX, index);
}
+ public boolean isMale(){
+ return data.getBooleanAttribute(IS_MALE);
+ }
+
+ public float getHeight(){
+ return data.getFloatAttribute(HEIGHT);
+ }
+
+ public float getGirth(){
+ return data.getFloatAttribute(GIRTH);
+ }
+
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof BodyDocument)) {
return false;
Deleted: maven/trunk/ogoglio-common/src/main/resources/avatar/avatar.jpg
===================================================================
(Binary files differ)
Deleted: maven/trunk/ogoglio-common/src/main/resources/avatar/avatar.obj
===================================================================
--- maven/trunk/ogoglio-common/src/main/resources/avatar/avatar.obj 2007-09-18 16:02:42 UTC (rev 415)
+++ maven/trunk/ogoglio-common/src/main/resources/avatar/avatar.obj 2007-09-18 16:03:11 UTC (rev 416)
@@ -1,8927 +0,0 @@
-# Blender3D v244 OBJ File: MikeRigged.blend
-# www.blender3d.org
-o Mike
-v 0.311142 0.406033 -0.108595
-v 0.303021 0.345360 -0.125835
-v 0.227706 0.341257 -0.128513
-v 0.229273 0.409040 -0.107120
-v 0.294899 0.278192 -0.102832
-v 0.241228 0.253397 -0.120454
-v 0.226139 0.256499 -0.012092
-v 0.294899 0.270102 -0.036757
-v 0.303021 0.323897 0.025088
-v 0.227706 0.318876 0.024398
-v 0.311142 0.395855 0.014442
-v 0.229273 0.394438 0.000494
-v 0.314506 0.428960 -0.051745
-v 0.229922 0.422291 -0.054673
-v 0.032408 0.438193 0.019218
-v 0.000028 0.433348 0.028486
-v 0.000028 0.377973 0.023821
-v 0.049007 0.387226 0.014744
-v 0.031882 0.438606 0.041908
-v 0.000028 0.431574 0.061884
-v 0.021992 0.449185 0.072133
-v 0.000028 0.444615 0.081399
-v 0.016030 0.469902 0.076850
-v 0.000028 0.469598 0.081529
-v 0.012422 0.490974 0.083452
-v 0.000028 0.490011 0.087355
-v 0.009128 0.497154 0.079358
-v 0.000028 0.497166 0.081634
-v 0.012094 0.502695 0.087565
-v 0.000028 0.502377 0.089515
-v 0.020607 0.523745 0.080789
-v 0.000028 0.519527 0.090166
-v 0.014865 0.531088 0.096715
-v 0.000028 0.524749 0.102985
-v 0.013691 0.540315 0.093596
-v 0.000028 0.535999 0.105575
-v 0.006934 0.559235 0.089070
-v 0.000028 0.560304 0.094733
-v 0.014916 0.623913 0.087199
-v 0.000028 0.623913 0.087199
-v 0.000028 0.590254 0.090531
-v 0.010582 0.585735 0.084708
-v 0.030071 0.689433 0.033411
-v 0.000028 0.693038 0.037553
-v 0.000028 0.659557 0.075624
-v 0.022023 0.657368 0.073036
-v 0.030071 0.688165 -0.058547
-v 0.000028 0.691187 -0.060564
-v 0.038780 0.619464 -0.126007
-v 0.000028 0.620930 -0.128730
-v 0.038089 0.555866 -0.119522
-v 0.000028 0.555803 -0.122571
-v 0.030779 0.472175 -0.081673
-v 0.000028 0.472172 -0.082136
-v 0.000028 0.508952 -0.096572
-v 0.037557 0.507394 -0.092203
-v 0.032240 0.437063 -0.080951
-v 0.000028 0.433697 -0.084518
-v 0.009305 0.573542 0.082195
-v 0.000028 0.573009 0.087655
-v 0.026811 0.584435 0.071542
-v 0.040521 0.582635 0.067057
-v 0.049895 0.596475 0.070593
-v 0.028011 0.598325 0.081865
-v 0.047951 0.574371 0.059396
-v 0.057153 0.571919 0.048250
-v 0.039423 0.569399 0.067127
-v 0.048187 0.556122 0.062690
-v 0.026867 0.569700 0.072905
-v 0.025897 0.553701 0.072508
-v 0.018504 0.571587 0.076368
-v 0.013366 0.556996 0.078749
-v 0.022323 0.538583 0.079018
-v 0.032507 0.538061 0.069355
-v 0.053149 0.538678 0.045440
-v 0.069197 0.573117 0.032754
-v 0.059235 0.609482 0.058061
-v 0.032174 0.620979 0.079437
-v 0.022262 0.501677 0.080554
-v 0.038303 0.513808 0.066809
-v 0.032862 0.497765 0.070830
-v 0.046530 0.494389 0.061846
-v 0.020710 0.493805 0.077478
-v 0.036277 0.474128 0.069749
-v 0.019214 0.577472 0.076421
-v 0.010349 0.585259 0.084608
-v 0.053937 0.512055 0.044935
-v 0.056515 0.492857 0.041268
-v 0.046152 0.462052 0.048870
-v 0.049014 0.649793 0.053833
-v 0.073436 0.624977 0.026105
-v 0.079557 0.581437 0.011099
-v 0.067467 0.540893 0.013789
-v 0.064933 0.512990 0.011857
-v 0.063412 0.489249 0.013024
-v 0.052911 0.454943 0.012510
-v 0.053886 0.453386 0.001558
-v 0.077742 0.410787 -0.022260
-v 0.083865 0.431962 -0.044335
-v 0.060751 0.471467 -0.025079
-v 0.059151 0.675975 0.025682
-v 0.058545 0.673868 -0.054165
-v 0.070151 0.610003 -0.105443
-v 0.063792 0.554302 -0.100252
-v 0.058724 0.508456 -0.075485
-v 0.058092 0.473761 -0.057461
-v 0.066169 0.433346 -0.059552
-v 0.081789 0.634172 -0.004684
-v 0.082519 0.635104 -0.051578
-v 0.087981 0.600291 -0.078550
-v 0.078026 0.555455 -0.070254
-v 0.069087 0.512555 -0.043755
-v 0.071182 0.516580 -0.012704
-v 0.075481 0.546017 -0.017103
-v 0.091662 0.553537 -0.029029
-v 0.092180 0.571775 -0.025134
-v 0.077038 0.546506 -0.004031
-v 0.069544 0.520973 -0.005878
-v 0.084231 0.524297 -0.014313
-v 0.076922 0.552023 -0.031426
-v 0.092997 0.553324 -0.037942
-v 0.081448 0.517100 -0.018164
-v 0.085183 0.571371 -0.036702
-v 0.094337 0.576197 -0.039252
-v 0.087750 0.581460 -0.022004
-v 0.086741 0.578605 -0.014305
-v 0.094337 0.587110 -0.022076
-v 0.087812 0.602441 -0.015110
-v 0.000028 0.306033 0.078103
-v 0.098413 0.315753 0.058105
-v 0.000028 0.390553 -0.124096
-v 0.066103 0.392548 -0.118642
-v 0.127275 0.405948 -0.001655
-v 0.133119 0.432021 -0.049028
-v 0.105463 0.420778 -0.094615
-v 0.176177 0.321700 0.039256
-v 0.182500 0.403268 -0.006660
-v 0.183263 0.429829 -0.056155
-v 0.167158 0.411076 -0.096562
-v 0.156244 0.357656 -0.125999
-v 0.071801 0.287852 -0.142860
-v 0.000028 0.288407 -0.148833
-v 0.161383 0.280583 -0.135349
-v 0.000028 0.234817 0.101598
-v 0.088484 0.240522 0.093669
-v 0.183165 0.247821 0.074628
-v 0.219529 0.164758 0.009079
-v 0.220210 0.161960 -0.104152
-v 0.075033 0.180716 -0.154695
-v 0.000028 0.181746 -0.161272
-v 0.162609 0.175029 -0.143446
-v 0.000028 0.122600 0.129090
-v 0.081107 0.138150 0.122447
-v 0.169559 0.175308 0.080912
-v 0.392215 0.398575 -0.103312
-v 0.389599 0.341860 -0.118799
-v 0.363127 0.295690 -0.098197
-v 0.363926 0.288459 -0.038797
-v 0.371429 0.322571 -0.003214
-v 0.393038 0.393851 0.012893
-v 0.393035 0.421282 -0.052218
-v 0.480329 0.382575 -0.108943
-v 0.477818 0.339690 -0.116291
-v 0.476964 0.281307 -0.096437
-v 0.477731 0.274366 -0.039413
-v 0.479842 0.321220 0.003687
-v 0.481119 0.375678 -0.002511
-v 0.481116 0.403009 -0.052303
-v 0.534529 0.383467 -0.103144
-v 0.531846 0.339802 -0.113081
-v 0.530933 0.277408 -0.092400
-v 0.531753 0.279534 -0.038301
-v 0.531875 0.319938 -0.008492
-v 0.535374 0.377030 -0.007050
-v 0.535371 0.407429 -0.052026
-v 0.614205 0.370882 -0.094631
-v 0.611815 0.330580 -0.103040
-v 0.611002 0.272891 -0.089630
-v 0.611732 0.275147 -0.040212
-v 0.613742 0.312186 -0.013477
-v 0.614958 0.366006 -0.012141
-v 0.614955 0.393044 -0.052460
-v 0.697684 0.349483 -0.085306
-v 0.696158 0.323875 -0.094952
-v 0.695639 0.289056 -0.082154
-v 0.696105 0.284930 -0.045352
-v 0.697388 0.306451 -0.017489
-v 0.698164 0.345371 -0.021510
-v 0.698162 0.361660 -0.053638
-v 0.754698 0.333399 -0.077816
-v 0.753286 0.320252 -0.096420
-v 0.752805 0.296102 -0.081030
-v 0.753237 0.292513 -0.048656
-v 0.754424 0.311242 -0.024676
-v 0.755142 0.332518 -0.031850
-v 0.755141 0.337772 -0.056064
-v 0.807592 0.316963 -0.102882
-v 0.806886 0.309287 -0.104776
-v 0.806406 0.294584 -0.088101
-v 0.806837 0.303095 -0.044997
-v 0.790644 0.296553 -0.014002
-v 0.790965 0.316036 -0.012315
-v 0.791362 0.326429 -0.019325
-v 0.809505 0.337968 -0.055003
-v 0.808922 0.330058 -0.094521
-v 0.856666 0.324398 -0.107946
-v 0.856203 0.309974 -0.111118
-v 0.855723 0.301462 -0.090840
-v 0.839287 0.310210 -0.066552
-v 0.840293 0.307497 -0.051713
-v 0.818320 0.322653 -0.003366
-v 0.817355 0.311672 0.007191
-v 0.857701 0.307526 0.022552
-v 0.858060 0.320750 0.012845
-v 0.825749 0.327720 -0.017101
-v 0.822955 0.332172 -0.031065
-v 0.842806 0.337434 -0.069897
-v 0.857983 0.334552 -0.084306
-v 0.857616 0.332506 -0.094534
-v 0.878465 0.326286 -0.111195
-v 0.878262 0.310207 -0.113301
-v 0.877985 0.302192 -0.094581
-v 0.878107 0.307071 -0.081601
-v 0.855289 0.302989 -0.078731
-v 0.857342 0.294860 -0.010075
-v 0.856331 0.302742 -0.020943
-v 0.883379 0.306162 -0.026117
-v 0.879604 0.304083 -0.010124
-v 0.858060 0.328932 -0.015010
-v 0.859335 0.310650 -0.011660
-v 0.879896 0.317261 -0.006545
-v 0.884695 0.328932 -0.015010
-v 0.880023 0.335110 -0.081512
-v 0.885720 0.337257 -0.070783
-v 0.878872 0.316581 -0.087636
-v 0.883185 0.309870 -0.068091
-v 0.884684 0.317452 -0.063753
-v 0.883892 0.311136 -0.054673
-v 0.883766 0.316540 -0.032873
-v 0.882798 0.309195 -0.040030
-v 0.879877 0.329057 -0.101777
-v 0.885809 0.338866 -0.056774
-v 0.884694 0.340475 -0.042764
-v 0.884694 0.335037 -0.025919
-v 0.821182 0.289975 -0.011262
-v 0.857342 0.296060 0.017453
-v 0.817044 0.301665 0.001516
-v 0.911570 0.302867 -0.001241
-v 0.912187 0.313236 0.003461
-v 0.921627 0.301808 0.011660
-v 0.911065 0.291154 0.005491
-v 0.911065 0.291427 0.018073
-v 0.906535 0.317860 -0.113865
-v 0.906365 0.303624 -0.112733
-v 0.908014 0.322962 -0.102199
-v 0.906953 0.311825 -0.092512
-v 0.906088 0.299519 -0.099606
-v 0.941775 0.303009 -0.101606
-v 0.948146 0.291392 -0.105249
-v 0.939086 0.299501 -0.112069
-v 0.965350 0.305935 -0.071314
-v 0.972148 0.298701 -0.074351
-v 0.965218 0.305535 -0.078756
-v 0.841634 0.340336 -0.055388
-v 0.841149 0.335478 -0.037826
-v 0.855977 0.332205 -0.026418
-v 0.966390 0.309162 -0.055292
-v 0.974673 0.299676 -0.047939
-v 0.971513 0.296787 -0.057628
-v 0.964451 0.302563 -0.012991
-v 0.972537 0.294499 -0.017808
-v 0.964126 0.301372 -0.023422
-v 0.823797 0.295120 -0.027878
-v 0.845438 0.304521 -0.030178
-v 0.859012 0.318845 -0.005538
-v 0.894490 0.305101 0.030385
-v 0.895051 0.318576 0.021116
-v 0.885814 0.293930 0.022748
-v 0.885814 0.289052 0.007662
-v 0.886320 0.302423 -0.002559
-v 0.912689 0.306951 -0.066372
-v 0.913581 0.317452 -0.063753
-v 0.912581 0.306612 -0.081599
-v 0.913442 0.316905 -0.084002
-v 0.914497 0.329638 -0.081483
-v 0.914617 0.329435 -0.070742
-v 0.912890 0.309725 -0.039758
-v 0.913712 0.324143 -0.036580
-v 0.912790 0.308982 -0.052521
-v 0.913653 0.318456 -0.059502
-v 0.914706 0.332728 -0.056741
-v 0.914794 0.333791 -0.042728
-v 0.914101 0.307026 -0.010625
-v 0.914373 0.317271 -0.007286
-v 0.913522 0.303222 -0.023223
-v 0.914049 0.316792 -0.026910
-v 0.914768 0.327140 -0.024733
-v 0.914769 0.327838 -0.012102
-v 0.886936 0.318403 0.003433
-v 0.912187 0.310895 0.015093
-v 0.911626 0.301338 0.023150
-v 0.929923 0.302823 -0.092941
-v 0.932783 0.313122 -0.102193
-v 0.926876 0.290615 -0.099559
-v 0.927876 0.294607 -0.112685
-v 0.930554 0.308568 -0.113339
-v 0.943794 0.299756 -0.068410
-v 0.946499 0.308737 -0.063707
-v 0.943642 0.300252 -0.081565
-v 0.946286 0.308221 -0.083956
-v 0.949541 0.315907 -0.080187
-v 0.949614 0.316457 -0.070672
-v 0.948709 0.304082 -0.039728
-v 0.952027 0.315692 -0.036535
-v 0.948492 0.302545 -0.052486
-v 0.950999 0.310100 -0.059457
-v 0.954520 0.318716 -0.056666
-v 0.954779 0.319748 -0.042654
-v 0.942940 0.298888 -0.010096
-v 0.945144 0.308805 -0.006500
-v 0.941910 0.297813 -0.023194
-v 0.944731 0.308346 -0.027607
-v 0.950815 0.313296 -0.025232
-v 0.950934 0.314901 -0.011651
-v 0.947637 0.294064 -0.093913
-v 0.942769 0.283864 -0.099862
-v 0.944379 0.287197 -0.111653
-v 0.965252 0.291031 -0.069455
-v 0.968652 0.297354 -0.065851
-v 0.965150 0.291297 -0.079823
-v 0.968424 0.296990 -0.081691
-v 0.970543 0.293645 -0.040931
-v 0.973292 0.301255 -0.038216
-v 0.970114 0.292405 -0.051736
-v 0.966767 0.309976 -0.043425
-v 0.964109 0.287824 -0.011341
-v 0.967547 0.295527 -0.008501
-v 0.963276 0.287433 -0.022121
-v 0.967088 0.295062 -0.025569
-v 0.211918 0.060508 0.009634
-v 0.212598 0.057791 -0.088298
-v 0.075033 0.068439 -0.157155
-v 0.000028 0.071188 -0.160683
-v 0.162609 0.066391 -0.134785
-v 0.000028 0.018325 0.125006
-v 0.081107 0.033861 0.115662
-v 0.160689 0.047771 0.063222
-v 0.193886 -0.059312 0.010272
-v 0.194515 -0.061973 -0.077289
-v 0.073739 -0.054174 -0.145085
-v 0.000028 -0.050157 -0.148620
-v 0.154668 -0.059717 -0.122697
-v 0.000028 -0.085337 0.102384
-v 0.079352 -0.078306 0.096437
-v 0.152894 -0.064361 0.063819
-v 0.206643 -0.182710 0.006394
-v 0.207307 -0.185366 -0.080232
-v 0.073087 -0.183652 -0.163583
-v 0.000028 -0.181627 -0.176575
-v 0.158533 -0.187001 -0.140772
-v 0.000028 -0.183768 0.089989
-v 0.079013 -0.186118 0.087508
-v 0.156660 -0.188272 0.060982
-v 0.217632 -0.316931 0.008457
-v 0.218306 -0.319549 -0.070898
-v 0.078152 -0.336320 -0.156648
-v 0.009250 -0.309291 -0.164916
-v 0.164005 -0.323822 -0.126342
-v -0.001653 -0.264408 0.086143
-v 0.084163 -0.327601 0.074255
-v 0.162105 -0.325183 0.058479
-v 0.230176 -0.430637 0.005062
-v 0.230914 -0.433306 -0.066731
-v 0.006620 -0.377167 -0.122505
-v 0.083923 -0.441582 -0.135759
-v 0.030954 -0.438307 -0.119357
-v 0.165040 -0.437718 -0.116889
-v -0.002821 -0.332311 0.033739
-v 0.017958 -0.429087 0.007909
-v 0.090503 -0.441802 0.064600
-v 0.162960 -0.439271 0.050326
-v 0.222837 -0.553256 0.008807
-v 0.232208 -0.553787 -0.054626
-v 0.113148 -0.554776 -0.114688
-v 0.048644 -0.553257 -0.101597
-v 0.182910 -0.554391 -0.102225
-v 0.030896 -0.553254 0.020694
-v 0.101988 -0.553988 0.053602
-v 0.164625 -0.553797 0.048133
-v 0.004458 -0.430298 -0.042374
-v 0.015405 -0.553254 -0.044763
-v 0.002147 -0.380715 -0.043301
-v 0.206606 -0.670152 0.018721
-v 0.214418 -0.670689 -0.045876
-v 0.115159 -0.671683 -0.107040
-v 0.062475 -0.670163 -0.093709
-v 0.173319 -0.671297 -0.094348
-v 0.046989 -0.670148 0.030825
-v 0.105855 -0.670879 0.064337
-v 0.158075 -0.670688 0.058767
-v 0.034073 -0.670154 -0.035833
-v 0.198387 -0.790216 0.018314
-v 0.205576 -0.790744 -0.044596
-v 0.114234 -0.791730 -0.104164
-v 0.065752 -0.790211 -0.091181
-v 0.167755 -0.791346 -0.091803
-v 0.052777 -0.790214 0.030102
-v 0.105672 -0.790949 0.062739
-v 0.153727 -0.790758 0.057315
-v 0.041452 -0.790211 -0.034815
-v 0.183272 -0.909319 0.010603
-v 0.189607 -0.909826 -0.048240
-v 0.109122 -0.910791 -0.103956
-v 0.066403 -0.909277 -0.091813
-v 0.156281 -0.910411 -0.092394
-v 0.059015 -0.909321 0.021629
-v 0.101578 -0.910068 0.052156
-v 0.143921 -0.909875 0.047083
-v 0.044992 -0.909296 -0.039091
-v 0.183272 -1.019136 0.007524
-v 0.189607 -1.019634 -0.049842
-v 0.109122 -1.020592 -0.104159
-v 0.066403 -1.019080 -0.092321
-v 0.156281 -1.020214 -0.092888
-v 0.059015 -1.019139 0.018274
-v 0.101578 -1.019890 0.048035
-v 0.143921 -1.019696 0.043088
-v 0.044992 -1.019106 -0.040923
-v 0.173240 -1.123543 0.008080
-v 0.187740 -1.124102 -0.060565
-v 0.109122 -1.125059 -0.114883
-v 0.066403 -1.123548 -0.103045
-v 0.156281 -1.124681 -0.103611
-v 0.063244 -1.123546 0.018830
-v 0.102600 -1.124298 0.048591
-v 0.142476 -1.124104 0.043644
-v 0.048930 -1.123573 -0.051647
-v 0.176846 -1.187160 0.027773
-v 0.187644 -1.214756 -0.059215
-v 0.109122 -1.213050 -0.114414
-v 0.066403 -1.211538 -0.102576
-v 0.156281 -1.215113 -0.103130
-v 0.101578 -1.161543 0.182298
-v 0.065679 -1.176706 0.152622
-v 0.065679 -1.209567 0.152797
-v 0.101578 -1.215162 0.182584
-v 0.143921 -1.161349 0.177352
-v 0.143921 -1.214968 0.177638
-v 0.172564 -1.176703 0.141872
-v 0.172564 -1.217875 0.142092
-v 0.048930 -1.214235 -0.051164
-v 0.061397 -1.187217 0.028251
-v 0.060495 -1.139723 0.075530
-v 0.101578 -1.129409 0.075410
-v 0.060495 -1.215808 0.088571
-v 0.096161 -1.203909 0.025452
-v 0.101578 -1.223975 0.088549
-v 0.143921 -1.129189 0.075425
-v 0.142476 -1.203690 0.025231
-v 0.143921 -1.223755 0.088564
-v 0.177748 -1.139663 0.075534
-v 0.177748 -1.215747 0.088575
-v 0.152486 -1.224410 -0.061332
-v 0.106474 -1.224701 -0.060935
-v 0.019063 0.497120 0.072960
-v 0.028659 0.575952 0.074675
-v 0.037109 0.575812 0.070753
-v -0.311086 0.406033 -0.108594
-v -0.229217 0.409040 -0.107120
-v -0.227650 0.341256 -0.128513
-v -0.302964 0.345360 -0.125835
-v -0.241171 0.253397 -0.120454
-v -0.294843 0.278192 -0.102832
-v -0.226082 0.256499 -0.012092
-v -0.294843 0.270102 -0.036757
-v -0.227650 0.318876 0.024398
-v -0.302964 0.323897 0.025088
-v -0.229217 0.394438 0.000494
-v -0.311086 0.395855 0.014442
-v -0.229866 0.422291 -0.054673
-v -0.314450 0.428960 -0.051745
-v -0.032352 0.438193 0.019218
-v -0.048950 0.387226 0.014744
-v -0.031826 0.438606 0.041908
-v -0.021936 0.449185 0.072133
-v -0.015974 0.469902 0.076850
-v -0.012366 0.490974 0.083452
-v -0.009071 0.497154 0.079358
-v -0.012038 0.502695 0.087565
-v -0.020551 0.523745 0.080789
-v -0.014808 0.531088 0.096715
-v -0.013634 0.540315 0.093596
-v -0.006878 0.559235 0.089070
-v -0.014860 0.623913 0.087199
-v -0.010526 0.585735 0.084708
-v -0.030015 0.689433 0.033411
-v -0.021967 0.657368 0.073036
-v -0.030015 0.688165 -0.058547
-v -0.038724 0.619464 -0.126007
-v -0.037996 0.553636 -0.118622
-v -0.030722 0.472213 -0.074561
-v -0.037500 0.507394 -0.092203
-v -0.032184 0.437063 -0.080951
-v -0.009249 0.573542 0.082195
-v -0.026755 0.584435 0.071542
-v -0.027954 0.598325 0.081865
-v -0.049838 0.596475 0.070593
-v -0.040465 0.582635 0.067057
-v -0.057096 0.571919 0.048250
-v -0.047895 0.574371 0.059396
-v -0.048131 0.556122 0.062690
-v -0.039367 0.569399 0.067127
-v -0.025841 0.553701 0.072508
-v -0.026810 0.569700 0.072905
-v -0.018448 0.571587 0.076368
-v -0.013310 0.556996 0.078749
-v -0.032451 0.538061 0.069355
-v -0.022267 0.538583 0.079018
-v -0.053092 0.538678 0.045440
-v -0.069141 0.573117 0.032754
-v -0.059178 0.609482 0.058061
-v -0.032118 0.620979 0.079437
-v -0.038246 0.513808 0.066809
-v -0.022205 0.501677 0.080554
-v -0.046474 0.494389 0.061846
-v -0.032806 0.497765 0.070830
-v -0.036220 0.474128 0.069749
-v -0.020654 0.493805 0.077478
-v -0.019157 0.577472 0.076421
-v -0.010293 0.585259 0.084608
-v -0.053881 0.512055 0.044935
-v -0.053000 0.492857 0.041268
-v -0.046095 0.462052 0.048870
-v -0.048957 0.649793 0.053833
-v -0.073380 0.624977 0.026105
-v -0.079500 0.581437 0.011099
-v -0.067411 0.540893 0.013789
-v -0.064877 0.512990 0.011857
-v -0.063356 0.489249 0.013024
-v -0.052855 0.454981 0.019622
-v -0.053830 0.453386 0.001558
-v -0.060694 0.471467 -0.025079
-v -0.083809 0.431962 -0.044335
-v -0.077685 0.410787 -0.022260
-v -0.059095 0.675975 0.025682
-v -0.058488 0.673868 -0.054165
-v -0.070095 0.610003 -0.105443
-v -0.063575 0.553309 -0.099924
-v -0.058036 0.473761 -0.057461
-v -0.058667 0.508456 -0.075485
-v -0.066112 0.433346 -0.059552
-v -0.081732 0.634172 -0.004684
-v -0.082463 0.635104 -0.051578
-v -0.087924 0.600291 -0.078550
-v -0.076853 0.551430 -0.068695
-v -0.069030 0.512555 -0.043755
-v -0.071126 0.516580 -0.012704
-v -0.075424 0.546017 -0.017103
-v -0.092124 0.571775 -0.025134
-v -0.091605 0.553537 -0.029029
-v -0.076981 0.546506 -0.004031
-v -0.084175 0.524297 -0.014313
-v -0.069487 0.520973 -0.005878
-v -0.081392 0.517100 -0.018164
-v -0.092941 0.553324 -0.037942
-v -0.076866 0.552023 -0.031426
-v -0.094281 0.576197 -0.039252
-v -0.085126 0.571371 -0.036702
-v -0.087694 0.581460 -0.022004
-v -0.094281 0.587110 -0.022076
-v -0.086685 0.578605 -0.014305
-v -0.087755 0.602441 -0.015110
-v -0.098357 0.315753 0.058105
-v -0.066047 0.392548 -0.118642
-v -0.133063 0.432021 -0.049028
-v -0.127218 0.405948 -0.001655
-v -0.105407 0.420778 -0.094615
-v -0.182443 0.403268 -0.006660
-v -0.176121 0.321700 0.039256
-v -0.167102 0.411076 -0.096562
-v -0.183206 0.429829 -0.056155
-v -0.156187 0.357656 -0.125999
-v -0.071745 0.287852 -0.142860
-v -0.161326 0.280583 -0.135349
-v -0.088427 0.240522 0.093669
-v -0.183108 0.247821 0.074628
-v -0.220153 0.161960 -0.104152
-v -0.219473 0.164758 0.009079
-v -0.074976 0.180716 -0.154695
-v -0.162552 0.175029 -0.143446
-v -0.081050 0.138150 0.122447
-v -0.169503 0.175388 0.095807
-v -0.389543 0.341860 -0.118799
-v -0.392158 0.398575 -0.103312
-v -0.363071 0.295690 -0.098196
-v -0.363870 0.288459 -0.038797
-v -0.371373 0.322571 -0.003214
-v -0.392981 0.393851 0.012893
-v -0.392978 0.421282 -0.052218
-v -0.477762 0.339690 -0.116291
-v -0.480272 0.382575 -0.108943
-v -0.476907 0.281307 -0.096437
-v -0.477675 0.274366 -0.039413
-v -0.479785 0.321220 0.003687
-v -0.481063 0.375678 -0.002511
-v -0.481060 0.403009 -0.052303
-v -0.531790 0.339802 -0.113081
-v -0.534473 0.383467 -0.103144
-v -0.530877 0.277408 -0.092400
-v -0.531697 0.279534 -0.038301
-v -0.531819 0.319938 -0.008492
-v -0.535318 0.377030 -0.007050
-v -0.535315 0.407429 -0.052026
-v -0.611758 0.330580 -0.103040
-v -0.614149 0.370882 -0.094631
-v -0.610945 0.272891 -0.089630
-v -0.611676 0.275147 -0.040212
-v -0.613685 0.312186 -0.013477
-v -0.614901 0.366006 -0.012141
-v -0.614899 0.393044 -0.052460
-v -0.696101 0.323875 -0.094952
-v -0.697627 0.349483 -0.085306
-v -0.695582 0.289056 -0.082154
-v -0.696048 0.284930 -0.045352
-v -0.697331 0.306451 -0.017489
-v -0.698108 0.345371 -0.021510
-v -0.698106 0.361660 -0.053638
-v -0.753229 0.320252 -0.096420
-v -0.754641 0.333399 -0.077816
-v -0.752749 0.296102 -0.081030
-v -0.753180 0.292513 -0.048656
-v -0.754367 0.311242 -0.024676
-v -0.755086 0.332518 -0.031850
-v -0.755084 0.337772 -0.056064
-v -0.806830 0.309287 -0.104776
-v -0.807536 0.316963 -0.102882
-v -0.806349 0.294584 -0.088101
-v -0.806781 0.303095 -0.044997
-v -0.790587 0.296553 -0.014002
-v -0.791306 0.326429 -0.019325
-v -0.790909 0.316036 -0.012315
-v -0.809449 0.337968 -0.055003
-v -0.808866 0.330058 -0.094521
-v -0.856147 0.309974 -0.111118
-v -0.856609 0.324398 -0.107946
-v -0.855666 0.301462 -0.090840
-v -0.840237 0.307497 -0.051713
-v -0.839231 0.310210 -0.066552
-v -0.818264 0.322653 -0.003366
-v -0.858004 0.320750 0.012845
-v -0.857645 0.307526 0.022552
-v -0.817298 0.311672 0.007191
-v -0.822899 0.332171 -0.031065
-v -0.825692 0.327720 -0.017101
-v -0.857559 0.332506 -0.094534
-v -0.857926 0.334552 -0.084306
-v -0.842749 0.337434 -0.069897
-v -0.878409 0.326286 -0.111195
-v -0.878205 0.310207 -0.113301
-v -0.855233 0.302989 -0.078731
-v -0.878051 0.307071 -0.081601
-v -0.877928 0.302192 -0.094581
-v -0.857285 0.294860 -0.010075
-v -0.879547 0.304083 -0.010124
-v -0.883323 0.306162 -0.026117
-v -0.856275 0.302742 -0.020943
-v -0.858004 0.328932 -0.015010
-v -0.884639 0.328932 -0.015010
-v -0.879840 0.317261 -0.006545
-v -0.859278 0.310650 -0.011660
-v -0.879967 0.335110 -0.081512
-v -0.885664 0.337257 -0.070783
-v -0.878816 0.316581 -0.087636
-v -0.883129 0.309870 -0.068091
-v -0.883836 0.311136 -0.054673
-v -0.884627 0.317452 -0.063753
-v -0.883710 0.316540 -0.032873
-v -0.882741 0.309194 -0.040030
-v -0.879821 0.329057 -0.101777
-v -0.885752 0.338866 -0.056774
-v -0.884637 0.340475 -0.042764
-v -0.884638 0.335037 -0.025919
-v -0.821125 0.289975 -0.011262
-v -0.816987 0.301665 0.001516
-v -0.857285 0.296060 0.017453
-v -0.911514 0.302867 -0.001241
-v -0.921571 0.301808 0.011660
-v -0.912130 0.313236 0.003461
-v -0.911008 0.291154 0.005491
-v -0.911008 0.291427 0.018073
-v -0.906309 0.303624 -0.112733
-v -0.906479 0.317860 -0.113865
-v -0.907957 0.322962 -0.102199
-v -0.906896 0.311825 -0.092512
-v -0.906031 0.299519 -0.099606
-v -0.941719 0.303009 -0.101606
-v -0.939030 0.299501 -0.112069
-v -0.948090 0.291392 -0.105249
-v -0.965294 0.305935 -0.071314
-v -0.965162 0.305535 -0.078756
-v -0.972091 0.298701 -0.074351
-v -0.841578 0.340336 -0.055388
-v -0.855921 0.332205 -0.026418
-v -0.841092 0.335478 -0.037826
-v -0.966333 0.309162 -0.055292
-v -0.971457 0.296787 -0.057628
-v -0.974617 0.299676 -0.047939
-v -0.964395 0.302563 -0.012991
-v -0.964069 0.301372 -0.023422
-v -0.972481 0.294499 -0.017808
-v -0.823741 0.295120 -0.027878
-v -0.845382 0.304521 -0.030178
-v -0.858955 0.318845 -0.005538
-v -0.894994 0.318576 0.021116
-v -0.894433 0.305101 0.030385
-v -0.885758 0.293930 0.022748
-v -0.885758 0.289052 0.007662
-v -0.886263 0.302423 -0.002559
-v -0.913524 0.317452 -0.063753
-v -0.912633 0.306951 -0.066372
-v -0.912525 0.306612 -0.081599
-v -0.913386 0.316905 -0.084002
-v -0.914441 0.329638 -0.081483
-v -0.914561 0.329435 -0.070742
-v -0.913656 0.324143 -0.036580
-v -0.912834 0.309725 -0.039758
-v -0.912733 0.308982 -0.052521
-v -0.913596 0.318456 -0.059502
-v -0.914649 0.332728 -0.056741
-v -0.914738 0.333791 -0.042728
-v -0.914316 0.317271 -0.007286
-v -0.914044 0.307026 -0.010625
-v -0.913465 0.303222 -0.023223
-v -0.913992 0.316792 -0.026910
-v -0.914711 0.327140 -0.024733
-v -0.914712 0.327838 -0.012102
-v -0.886880 0.318403 0.003433
-v -0.912130 0.310895 0.015093
-v -0.911569 0.301338 0.023150
-v -0.932726 0.313122 -0.102193
-v -0.929867 0.302823 -0.092941
-v -0.926820 0.290615 -0.099559
-v -0.927820 0.294607 -0.112685
-v -0.930497 0.308568 -0.113339
-v -0.946442 0.308737 -0.063707
-v -0.943737 0.299756 -0.068410
-v -0.943586 0.300252 -0.081565
-v -0.946229 0.308221 -0.083956
-v -0.949484 0.315907 -0.080187
-v -0.949557 0.316457 -0.070672
-v -0.951971 0.315692 -0.036535
-v -0.948652 0.304082 -0.039728
-v -0.948436 0.302545 -0.052486
-v -0.950943 0.310100 -0.059457
-v -0.954463 0.318716 -0.056666
-v -0.954722 0.31974...
[truncated message content] |