jme3tools.converters: remove deprecated classes
This commit is contained in:
parent
ca497f458a
commit
f2cd1334ec
@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package jme3tools.converters;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public interface Converter<T> {
|
|
||||||
public T convert(T input, Map<String, String> params);
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package jme3tools.converters;
|
|
||||||
|
|
||||||
import com.jme3.asset.AssetManager;
|
|
||||||
import com.jme3.system.JmeSystem;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.jar.JarEntry;
|
|
||||||
import java.util.jar.JarOutputStream;
|
|
||||||
|
|
||||||
public class FolderConverter {
|
|
||||||
|
|
||||||
private static AssetManager assetManager;
|
|
||||||
private static File sourceRoot;
|
|
||||||
private static JarOutputStream jarOut;
|
|
||||||
private static long time;
|
|
||||||
|
|
||||||
private static void process(File file) throws IOException{
|
|
||||||
String name = file.getName().replaceAll("[\\/\\.]", "_");
|
|
||||||
JarEntry entry = new JarEntry(name);
|
|
||||||
entry.setTime(time);
|
|
||||||
|
|
||||||
jarOut.putNextEntry(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException{
|
|
||||||
if (args.length == 0){
|
|
||||||
System.out.println("Usage: java -jar FolderConverter <input folder>");
|
|
||||||
System.out.println();
|
|
||||||
System.out.println(" Converts files from input to output");
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceRoot = new File(args[0]);
|
|
||||||
|
|
||||||
File jarFile = new File(sourceRoot.getParent(), sourceRoot.getName()+".jar");
|
|
||||||
FileOutputStream out = new FileOutputStream(jarFile);
|
|
||||||
jarOut = new JarOutputStream(out);
|
|
||||||
|
|
||||||
assetManager = JmeSystem.newAssetManager();
|
|
||||||
assetManager.registerLocator(sourceRoot.toString(),
|
|
||||||
"com.jme3.asset.plugins.FileSystemLocator");
|
|
||||||
for (File f : sourceRoot.listFiles()){
|
|
||||||
process(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,351 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
||||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package jme3tools.converters.model;
|
|
||||||
|
|
||||||
import com.jme3.bounding.BoundingBox;
|
|
||||||
import com.jme3.math.Transform;
|
|
||||||
import com.jme3.math.Vector2f;
|
|
||||||
import com.jme3.math.Vector3f;
|
|
||||||
import com.jme3.scene.Geometry;
|
|
||||||
import com.jme3.scene.Mesh;
|
|
||||||
import com.jme3.scene.VertexBuffer;
|
|
||||||
import com.jme3.scene.VertexBuffer.Format;
|
|
||||||
import com.jme3.scene.VertexBuffer.Type;
|
|
||||||
import com.jme3.scene.VertexBuffer.Usage;
|
|
||||||
import com.jme3.scene.mesh.IndexBuffer;
|
|
||||||
import com.jme3.util.BufferUtils;
|
|
||||||
import java.nio.*;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class FloatToFixed {
|
|
||||||
|
|
||||||
private static final float shortSize = Short.MAX_VALUE - Short.MIN_VALUE;
|
|
||||||
private static final float shortOff = (Short.MAX_VALUE + Short.MIN_VALUE) * 0.5f;
|
|
||||||
|
|
||||||
private static final float byteSize = Byte.MAX_VALUE - Byte.MIN_VALUE;
|
|
||||||
private static final float byteOff = (Byte.MAX_VALUE + Byte.MIN_VALUE) * 0.5f;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public static void convertToFixed(Geometry geom, Format posFmt, Format nmFmt, Format tcFmt){
|
|
||||||
geom.updateModelBound();
|
|
||||||
BoundingBox bbox = (BoundingBox) geom.getModelBound();
|
|
||||||
Mesh mesh = geom.getMesh();
|
|
||||||
|
|
||||||
VertexBuffer positions = mesh.getBuffer(Type.Position);
|
|
||||||
VertexBuffer normals = mesh.getBuffer(Type.Normal);
|
|
||||||
VertexBuffer texcoords = mesh.getBuffer(Type.TexCoord);
|
|
||||||
VertexBuffer indices = mesh.getBuffer(Type.Index);
|
|
||||||
|
|
||||||
// positions
|
|
||||||
FloatBuffer fb = (FloatBuffer) positions.getData();
|
|
||||||
if (posFmt != Format.Float){
|
|
||||||
Buffer newBuf = VertexBuffer.createBuffer(posFmt, positions.getNumComponents(),
|
|
||||||
mesh.getVertexCount());
|
|
||||||
Transform t = convertPositions(fb, bbox, newBuf);
|
|
||||||
t.combineWithParent(geom.getLocalTransform());
|
|
||||||
geom.setLocalTransform(t);
|
|
||||||
|
|
||||||
VertexBuffer newPosVb = new VertexBuffer(Type.Position);
|
|
||||||
newPosVb.setupData(positions.getUsage(),
|
|
||||||
positions.getNumComponents(),
|
|
||||||
posFmt,
|
|
||||||
newBuf);
|
|
||||||
mesh.clearBuffer(Type.Position);
|
|
||||||
mesh.setBuffer(newPosVb);
|
|
||||||
}
|
|
||||||
|
|
||||||
// normals, automatically convert to signed byte
|
|
||||||
fb = (FloatBuffer) normals.getData();
|
|
||||||
|
|
||||||
ByteBuffer bb = BufferUtils.createByteBuffer(fb.capacity());
|
|
||||||
convertNormals(fb, bb);
|
|
||||||
|
|
||||||
normals = new VertexBuffer(Type.Normal);
|
|
||||||
normals.setupData(Usage.Static, 3, Format.Byte, bb);
|
|
||||||
normals.setNormalized(true);
|
|
||||||
mesh.clearBuffer(Type.Normal);
|
|
||||||
mesh.setBuffer(normals);
|
|
||||||
|
|
||||||
// texcoords
|
|
||||||
fb = (FloatBuffer) texcoords.getData();
|
|
||||||
if (tcFmt != Format.Float){
|
|
||||||
Buffer newBuf = VertexBuffer.createBuffer(tcFmt,
|
|
||||||
texcoords.getNumComponents(),
|
|
||||||
mesh.getVertexCount());
|
|
||||||
convertTexCoords2D(fb, newBuf);
|
|
||||||
|
|
||||||
VertexBuffer newTcVb = new VertexBuffer(Type.TexCoord);
|
|
||||||
newTcVb.setupData(texcoords.getUsage(),
|
|
||||||
texcoords.getNumComponents(),
|
|
||||||
tcFmt,
|
|
||||||
newBuf);
|
|
||||||
mesh.clearBuffer(Type.TexCoord);
|
|
||||||
mesh.setBuffer(newTcVb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void compressIndexBuffer(Mesh mesh){
|
|
||||||
int vertCount = mesh.getVertexCount();
|
|
||||||
VertexBuffer vb = mesh.getBuffer(Type.Index);
|
|
||||||
Format targetFmt;
|
|
||||||
if (vb.getFormat() == Format.UnsignedInt && vertCount <= 0xffff){
|
|
||||||
if (vertCount <= 256)
|
|
||||||
targetFmt = Format.UnsignedByte;
|
|
||||||
else
|
|
||||||
targetFmt = Format.UnsignedShort;
|
|
||||||
}else if (vb.getFormat() == Format.UnsignedShort && vertCount <= 0xff){
|
|
||||||
targetFmt = Format.UnsignedByte;
|
|
||||||
}else{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IndexBuffer src = mesh.getIndexBuffer();
|
|
||||||
Buffer newBuf = VertexBuffer.createBuffer(targetFmt, vb.getNumComponents(), src.size());
|
|
||||||
|
|
||||||
VertexBuffer newVb = new VertexBuffer(Type.Index);
|
|
||||||
newVb.setupData(vb.getUsage(), vb.getNumComponents(), targetFmt, newBuf);
|
|
||||||
mesh.clearBuffer(Type.Index);
|
|
||||||
mesh.setBuffer(newVb);
|
|
||||||
|
|
||||||
IndexBuffer dst = mesh.getIndexBuffer();
|
|
||||||
for (int i = 0; i < src.size(); i++){
|
|
||||||
dst.put(i, src.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void convertToFixed(FloatBuffer input, IntBuffer output){
|
|
||||||
if (output.capacity() < input.capacity())
|
|
||||||
throw new RuntimeException("Output must be at least as large as input!");
|
|
||||||
|
|
||||||
input.clear();
|
|
||||||
output.clear();
|
|
||||||
for (int i = 0; i < input.capacity(); i++){
|
|
||||||
output.put( (int) (input.get() * (float)(1<<16)) );
|
|
||||||
}
|
|
||||||
output.flip();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void convertToFloat(IntBuffer input, FloatBuffer output){
|
|
||||||
if (output.capacity() < input.capacity())
|
|
||||||
throw new RuntimeException("Output must be at least as large as input!");
|
|
||||||
|
|
||||||
input.clear();
|
|
||||||
output.clear();
|
|
||||||
for (int i = 0; i < input.capacity(); i++){
|
|
||||||
output.put( ((float)input.get() / (float)(1<<16)) );
|
|
||||||
}
|
|
||||||
output.flip();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void convertToUByte(FloatBuffer input, ByteBuffer output){
|
|
||||||
if (output.capacity() < input.capacity())
|
|
||||||
throw new RuntimeException("Output must be at least as large as input!");
|
|
||||||
|
|
||||||
input.clear();
|
|
||||||
output.clear();
|
|
||||||
for (int i = 0; i < input.capacity(); i++){
|
|
||||||
output.put( (byte) (input.get() * 255f) );
|
|
||||||
}
|
|
||||||
output.flip();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static VertexBuffer convertToUByte(VertexBuffer vb){
|
|
||||||
FloatBuffer fb = (FloatBuffer) vb.getData();
|
|
||||||
ByteBuffer bb = BufferUtils.createByteBuffer(fb.capacity());
|
|
||||||
convertToUByte(fb, bb);
|
|
||||||
|
|
||||||
VertexBuffer newVb = new VertexBuffer(vb.getBufferType());
|
|
||||||
newVb.setupData(vb.getUsage(),
|
|
||||||
vb.getNumComponents(),
|
|
||||||
Format.UnsignedByte,
|
|
||||||
bb);
|
|
||||||
newVb.setNormalized(true);
|
|
||||||
return newVb;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static VertexBuffer convertToFixed(VertexBuffer vb){
|
|
||||||
if (vb.getFormat() == Format.Int)
|
|
||||||
return vb;
|
|
||||||
|
|
||||||
FloatBuffer fb = (FloatBuffer) vb.getData();
|
|
||||||
IntBuffer ib = BufferUtils.createIntBuffer(fb.capacity());
|
|
||||||
convertToFixed(fb, ib);
|
|
||||||
|
|
||||||
VertexBuffer newVb = new VertexBuffer(vb.getBufferType());
|
|
||||||
newVb.setupData(vb.getUsage(),
|
|
||||||
vb.getNumComponents(),
|
|
||||||
Format.Int,
|
|
||||||
ib);
|
|
||||||
return newVb;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static VertexBuffer convertToFloat(VertexBuffer vb){
|
|
||||||
if (vb.getFormat() == Format.Float)
|
|
||||||
return vb;
|
|
||||||
|
|
||||||
IntBuffer ib = (IntBuffer) vb.getData();
|
|
||||||
FloatBuffer fb = BufferUtils.createFloatBuffer(ib.capacity());
|
|
||||||
convertToFloat(ib, fb);
|
|
||||||
|
|
||||||
VertexBuffer newVb = new VertexBuffer(vb.getBufferType());
|
|
||||||
newVb.setupData(vb.getUsage(),
|
|
||||||
vb.getNumComponents(),
|
|
||||||
Format.Float,
|
|
||||||
fb);
|
|
||||||
return newVb;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void convertNormals(FloatBuffer input, ByteBuffer output){
|
|
||||||
if (output.capacity() < input.capacity())
|
|
||||||
throw new RuntimeException("Output must be at least as large as input!");
|
|
||||||
|
|
||||||
input.clear();
|
|
||||||
output.clear();
|
|
||||||
Vector3f temp = new Vector3f();
|
|
||||||
int vertexCount = input.capacity() / 3;
|
|
||||||
for (int i = 0; i < vertexCount; i++){
|
|
||||||
BufferUtils.populateFromBuffer(temp, input, i);
|
|
||||||
|
|
||||||
// offset and scale vector into -128 ... 127
|
|
||||||
temp.multLocal(127).addLocal(0.5f, 0.5f, 0.5f);
|
|
||||||
|
|
||||||
// quantize
|
|
||||||
byte v1 = (byte) temp.getX();
|
|
||||||
byte v2 = (byte) temp.getY();
|
|
||||||
byte v3 = (byte) temp.getZ();
|
|
||||||
|
|
||||||
// store
|
|
||||||
output.put(v1).put(v2).put(v3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void convertTexCoords2D(FloatBuffer input, Buffer output){
|
|
||||||
if (output.capacity() < input.capacity())
|
|
||||||
throw new RuntimeException("Output must be at least as large as input!");
|
|
||||||
|
|
||||||
input.clear();
|
|
||||||
output.clear();
|
|
||||||
Vector2f temp = new Vector2f();
|
|
||||||
int vertexCount = input.capacity() / 2;
|
|
||||||
|
|
||||||
ShortBuffer sb = null;
|
|
||||||
IntBuffer ib = null;
|
|
||||||
|
|
||||||
if (output instanceof ShortBuffer)
|
|
||||||
sb = (ShortBuffer) output;
|
|
||||||
else if (output instanceof IntBuffer)
|
|
||||||
ib = (IntBuffer) output;
|
|
||||||
else
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
|
|
||||||
for (int i = 0; i < vertexCount; i++){
|
|
||||||
BufferUtils.populateFromBuffer(temp, input, i);
|
|
||||||
|
|
||||||
if (sb != null){
|
|
||||||
sb.put( (short) (temp.getX()*Short.MAX_VALUE) );
|
|
||||||
sb.put( (short) (temp.getY()*Short.MAX_VALUE) );
|
|
||||||
}else{
|
|
||||||
int v1 = (int) (temp.getX() * ((float)(1 << 16)));
|
|
||||||
int v2 = (int) (temp.getY() * ((float)(1 << 16)));
|
|
||||||
ib.put(v1).put(v2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Transform convertPositions(FloatBuffer input, BoundingBox bbox, Buffer output){
|
|
||||||
if (output.capacity() < input.capacity())
|
|
||||||
throw new RuntimeException("Output must be at least as large as input!");
|
|
||||||
|
|
||||||
Vector3f offset = bbox.getCenter().negate();
|
|
||||||
Vector3f size = new Vector3f(bbox.getXExtent(), bbox.getYExtent(), bbox.getZExtent());
|
|
||||||
size.multLocal(2);
|
|
||||||
|
|
||||||
ShortBuffer sb = null;
|
|
||||||
ByteBuffer bb = null;
|
|
||||||
float dataTypeSize;
|
|
||||||
float dataTypeOffset;
|
|
||||||
if (output instanceof ShortBuffer){
|
|
||||||
sb = (ShortBuffer) output;
|
|
||||||
dataTypeOffset = shortOff;
|
|
||||||
dataTypeSize = shortSize;
|
|
||||||
}else{
|
|
||||||
bb = (ByteBuffer) output;
|
|
||||||
dataTypeOffset = byteOff;
|
|
||||||
dataTypeSize = byteSize;
|
|
||||||
}
|
|
||||||
Vector3f scale = new Vector3f();
|
|
||||||
scale.set(dataTypeSize, dataTypeSize, dataTypeSize).divideLocal(size);
|
|
||||||
|
|
||||||
Vector3f invScale = new Vector3f();
|
|
||||||
invScale.set(size).divideLocal(dataTypeSize);
|
|
||||||
|
|
||||||
offset.multLocal(scale);
|
|
||||||
offset.addLocal(dataTypeOffset, dataTypeOffset, dataTypeOffset);
|
|
||||||
|
|
||||||
// offset = (-modelOffset * shortSize)/modelSize + shortOff
|
|
||||||
// scale = shortSize / modelSize
|
|
||||||
|
|
||||||
input.clear();
|
|
||||||
output.clear();
|
|
||||||
Vector3f temp = new Vector3f();
|
|
||||||
int vertexCount = input.capacity() / 3;
|
|
||||||
for (int i = 0; i < vertexCount; i++){
|
|
||||||
BufferUtils.populateFromBuffer(temp, input, i);
|
|
||||||
|
|
||||||
// offset and scale vector into -32768 ... 32767
|
|
||||||
// or into -128 ... 127 if using bytes
|
|
||||||
temp.multLocal(scale);
|
|
||||||
temp.addLocal(offset);
|
|
||||||
|
|
||||||
// quantize and store
|
|
||||||
if (sb != null){
|
|
||||||
short v1 = (short) temp.getX();
|
|
||||||
short v2 = (short) temp.getY();
|
|
||||||
short v3 = (short) temp.getZ();
|
|
||||||
sb.put(v1).put(v2).put(v3);
|
|
||||||
}else{
|
|
||||||
byte v1 = (byte) temp.getX();
|
|
||||||
byte v2 = (byte) temp.getY();
|
|
||||||
byte v3 = (byte) temp.getZ();
|
|
||||||
bb.put(v1).put(v2).put(v3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Transform transform = new Transform();
|
|
||||||
transform.setTranslation(offset.negate().multLocal(invScale));
|
|
||||||
transform.setScale(invScale);
|
|
||||||
return transform;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user