|
From: <tre...@us...> - 2008-02-06 01:19:43
|
Revision: 708
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=708&view=rev
Author: trevorolio
Date: 2008-02-05 17:19:48 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
Added the back end and 3D rendering of attachment geometries and appearances, but not yet morphs or skin textures.
Also no example UI for picking attachments in the body editor, yet.
The "time to private parts" for Ogoglio starts now.
Modified Paths:
--------------
maven/trunk/ogoglio-bodies/.classpath
maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyMorphTool.java
maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/MayaSkinMapTool.java
maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/createMorph.sh
Added Paths:
-----------
maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyFixer.java
maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/fixBody.sh
Modified: maven/trunk/ogoglio-bodies/.classpath
===================================================================
--- maven/trunk/ogoglio-bodies/.classpath 2008-02-06 01:19:31 UTC (rev 707)
+++ maven/trunk/ogoglio-bodies/.classpath 2008-02-06 01:19:48 UTC (rev 708)
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
+ <classpathentry kind="src" path="ogoglio-body-tools/src/main/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
Added: maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyFixer.java
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyFixer.java (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyFixer.java 2008-02-06 01:19:48 UTC (rev 708)
@@ -0,0 +1,83 @@
+package com.ogoglio.util.body;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.OutputStreamWriter;
+
+import javax.vecmath.Point3f;
+
+import com.ogoglio.viewer.j3d.body.SkinLoader;
+import com.ogoglio.viewer.j3d.obj.Obj;
+import com.ogoglio.viewer.j3d.obj.ObjParser;
+
+public class BodyFixer {
+
+ public static void main(String[] args) {
+ try {
+
+ if (args.length != 1) {
+ System.err.println("Bad arg length: " + args.length);
+ printHelp();
+ return;
+ }
+ File baseMeshFile = new File(args[0]);
+
+ if (!baseMeshFile.exists()) {
+ System.err.println("Could not read: ");
+ System.err.println(baseMeshFile + " exists: " + baseMeshFile.exists());
+ printHelp();
+ return;
+ }
+
+ Obj baseObj = new ObjParser(new FileInputStream(baseMeshFile)).parse();
+ scaleToStandardAvatarHeight(baseObj);
+ moveHipToOrigin(baseObj);
+ baseObj.writeObj(new OutputStreamWriter(System.out));
+ System.out.flush();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void moveHipToOrigin(Obj obj){
+ Point3f[] vertices = obj.getVertices();
+ float minY = Float.MAX_VALUE;
+ for (int i = 0; i < vertices.length; i++) {
+ if (vertices[i].y < minY) {
+ minY = vertices[i].y;
+ }
+ }
+ float yChange = (float) SkinLoader.ANIMATION_Y_SHIFT - minY;
+ System.out.println("# Y Change: " + yChange);
+ for (int i = 0; i < vertices.length; i++) {
+ vertices[i].y = vertices[i].y + yChange;
+ }
+ }
+
+ public static void scaleToStandardAvatarHeight(Obj obj){
+ Point3f[] vertices = obj.getVertices();
+ float maxY = Float.MIN_VALUE;
+ float minY = Float.MAX_VALUE;
+ for (int i = 0; i < vertices.length; i++) {
+ if (vertices[i].y < minY) {
+ minY = vertices[i].y;
+ }
+ if (vertices[i].y > maxY) {
+ maxY = vertices[i].y;
+ }
+ }
+ float heightScale = SkinLoader.AVATAR_SIZE / Math.abs(maxY - minY);
+ System.out.println("# Height scale: " + heightScale);
+ if (Math.abs(heightScale) > 0.001 || Math.abs(heightScale) < 0.001) {
+ for (int i = 0; i < vertices.length; i++) {
+ vertices[i].x = vertices[i].x * heightScale;
+ vertices[i].y = vertices[i].y * heightScale;
+ vertices[i].z = vertices[i].z * heightScale;
+ }
+ }
+ }
+
+ public static void printHelp() {
+ System.out.println("Usage: ...BodyFixer <path to obj file>");
+ }
+}
Modified: maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyMorphTool.java
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyMorphTool.java 2008-02-06 01:19:31 UTC (rev 707)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/BodyMorphTool.java 2008-02-06 01:19:48 UTC (rev 708)
@@ -9,6 +9,7 @@
import javax.vecmath.Vector3f;
import com.ogoglio.viewer.j3d.body.MorphDeltaMap;
+import com.ogoglio.viewer.j3d.body.SkinLoader;
import com.ogoglio.viewer.j3d.obj.Obj;
import com.ogoglio.viewer.j3d.obj.ObjParseException;
import com.ogoglio.viewer.j3d.obj.ObjParser;
@@ -16,26 +17,20 @@
public class BodyMorphTool {
public static void main(String[] args) {
- if (args.length < 3) {
+ if (args.length != 4) {
System.err.println("Bad arg length: " + args.length);
printHelp();
return;
}
String name = args[0];
- String parentName = null;
- File baseMeshFile = null;
- File morphMeshFile = null;
- if(args.length > 3){
- parentName = args[1];
- baseMeshFile = new File(args[2]);
- morphMeshFile = new File(args[3]);
- } else {
- baseMeshFile = new File(args[1]);
- morphMeshFile = new File(args[2]);
- }
+ String parentName = args[1];
+ File baseMeshFile = new File(args[2]);
+ File morphMeshFile = new File(args[3]);
if (!baseMeshFile.exists() || !morphMeshFile.exists()) {
- System.err.println("Could not read: " + baseMeshFile.exists() + ", " + morphMeshFile.exists());
+ System.err.println("Could not read: ");
+ System.err.println(baseMeshFile + " exists: " + baseMeshFile.exists());
+ System.err.println(morphMeshFile + " exists: " + morphMeshFile.exists());
printHelp();
return;
}
@@ -62,6 +57,29 @@
Point3f[] basePoints = baseObj.getVertices();
Point3f[] morphPoints = morphObj.getVertices();
+ float maxY = Float.MIN_VALUE;
+ float minY = Float.MAX_VALUE;
+ for (int i = 0; i < basePoints.length; i++) {
+ if (basePoints[i].y < minY) {
+ minY = basePoints[i].y;
+ }
+ if (basePoints[i].y > maxY) {
+ maxY = basePoints[i].y;
+ }
+ }
+
+ float heightScale = SkinLoader.AVATAR_SIZE / Math.abs(maxY - minY);
+ if (Math.abs(heightScale) > 0.001) {
+ for (int i = 0; i < basePoints.length; i++) {
+ basePoints[i].x = basePoints[i].x * heightScale;
+ basePoints[i].y = basePoints[i].y * heightScale;
+ basePoints[i].z = basePoints[i].z * heightScale;
+ morphPoints[i].x = morphPoints[i].x * heightScale;
+ morphPoints[i].y = morphPoints[i].y * heightScale;
+ morphPoints[i].z = morphPoints[i].z * heightScale;
+ }
+ }
+
MorphDeltaMap map = new MorphDeltaMap(name, parentName);
int lower = -1;
Modified: maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/MayaSkinMapTool.java
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/MayaSkinMapTool.java 2008-02-06 01:19:31 UTC (rev 707)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/java/com/ogoglio/util/body/MayaSkinMapTool.java 2008-02-06 01:19:48 UTC (rev 708)
@@ -56,7 +56,7 @@
}
parseGroupName(line);
currentGroup = new Group(currentGroupName);
- } else if (line.startsWith("// Result: ")) {
+ } else if (line.startsWith("// Result:")) {
if (currentGroup == null) {
throw new SkinMapParseException("Started a group without parsing a new group name: " + line);
}
Modified: maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/createMorph.sh
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/createMorph.sh 2008-02-06 01:19:31 UTC (rev 707)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/createMorph.sh 2008-02-06 01:19:48 UTC (rev 708)
@@ -2,4 +2,4 @@
PATH_TO_TRUNK="../../../../../.."
LOCAL_CLASSPATH=$PATH_TO_TRUNK/ogoglio-bodies/ogoglio-body-tools/target/ogoglio-body-tools-0.0.1-SNAPSHOT.jar
LOCAL_CLASSPATH=$LOCAL_CLASSPATH:$PATH_TO_TRUNK/ogoglio-common/target/ogoglio-common-0.0.1-SNAPSHOT.jar
-java -cp $LOCAL_CLASSPATH com.ogoglio.util.body.BodyMorphTool "$1" "$2" "$3" "$4" "$5" "$6"
+java -cp $LOCAL_CLASSPATH com.ogoglio.util.body.BodyMorphTool "$1" "$2" "$3/$4" "$3/$5"
Added: maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/fixBody.sh
===================================================================
--- maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/fixBody.sh (rev 0)
+++ maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/fixBody.sh 2008-02-06 01:19:48 UTC (rev 708)
@@ -0,0 +1,5 @@
+#!/bin/bash
+PATH_TO_TRUNK="../../../../../.."
+LOCAL_CLASSPATH=$PATH_TO_TRUNK/ogoglio-bodies/ogoglio-body-tools/target/ogoglio-body-tools-0.0.1-SNAPSHOT.jar
+LOCAL_CLASSPATH=$LOCAL_CLASSPATH:$PATH_TO_TRUNK/ogoglio-common/target/ogoglio-common-0.0.1-SNAPSHOT.jar
+java -cp $LOCAL_CLASSPATH com.ogoglio.util.body.BodyFixer "$1"
Property changes on: maven/trunk/ogoglio-bodies/ogoglio-body-tools/src/main/resources/scripts/fixBody.sh
___________________________________________________________________
Name: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|