webvr js meetup initial commit
This commit is contained in:
154
node_modules/three/examples/js/loaders/sea3d/o3dgc/SEA3DGC.js
generated
vendored
Normal file
154
node_modules/three/examples/js/loaders/sea3d/o3dgc/SEA3DGC.js
generated
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
/**
|
||||
* SEA3D - o3dgc
|
||||
* @author Sunag / http://www.sunag.com.br/
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
//
|
||||
// Lossy Compression
|
||||
//
|
||||
|
||||
SEA3D.GeometryGC = function ( name, data, sea3d ) {
|
||||
|
||||
this.name = name;
|
||||
this.data = data;
|
||||
this.sea3d = sea3d;
|
||||
|
||||
var i;
|
||||
var attrib = data.readUShort();
|
||||
var uvIDs = [], jointID, weightID;
|
||||
|
||||
this.isBig = ( attrib & 1 ) != 0;
|
||||
|
||||
data.readVInt = this.isBig ? data.readUInt : data.readUShort;
|
||||
|
||||
// Geometry Flags
|
||||
// ..
|
||||
// 1 isBig
|
||||
// 2 groups
|
||||
// 4 uv
|
||||
// 8 tangent
|
||||
// 16 colors
|
||||
// 32 joints
|
||||
// 64 morph
|
||||
// 128 vertex-animation
|
||||
// ..
|
||||
|
||||
if ( attrib & 2 ) {
|
||||
|
||||
this.groups = [];
|
||||
|
||||
var numGroups = data.readUByte(),
|
||||
groupOffset = 0;
|
||||
|
||||
for ( i = 0; i < numGroups; i ++ ) {
|
||||
|
||||
var groupLength = data.readVInt() * 3;
|
||||
|
||||
this.groups.push( {
|
||||
start: groupOffset,
|
||||
count: groupLength,
|
||||
} );
|
||||
|
||||
groupOffset += groupLength;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
this.groups = [];
|
||||
|
||||
}
|
||||
|
||||
if ( attrib & 4 ) {
|
||||
|
||||
this.uv = [];
|
||||
|
||||
var uvCount = data.readUByte();
|
||||
|
||||
for ( i = 0; i < uvCount; i ++ ) {
|
||||
|
||||
uvIDs[ i ] = data.readUByte();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( attrib & 32 ) {
|
||||
|
||||
jointID = data.readUByte();
|
||||
weightID = data.readUByte();
|
||||
|
||||
}
|
||||
|
||||
var size = data.readUInt();
|
||||
var bytes = data.concat( data.position, size );
|
||||
|
||||
var bstream = new o3dgc.BinaryStream( bytes.buffer );
|
||||
|
||||
var decoder = new o3dgc.SC3DMCDecoder();
|
||||
var ifs = new o3dgc.IndexedFaceSet();
|
||||
|
||||
decoder.DecodeHeader( ifs, bstream );
|
||||
|
||||
var numIndexes = ifs.GetNCoordIndex();
|
||||
var numVertex = ifs.GetNCoord();
|
||||
|
||||
if ( ! this.groups.length ) this.groups.push( { start: 0, count: numIndexes * 3 } );
|
||||
|
||||
this.indexes = this.isBig ? new Uint32Array( numIndexes * 3 ) : new Uint16Array( numIndexes * 3 );
|
||||
this.vertex = new Float32Array( numVertex * 3 );
|
||||
|
||||
ifs.SetCoordIndex( this.indexes );
|
||||
ifs.SetCoord( this.vertex );
|
||||
|
||||
if ( ifs.GetNNormal() > 0 ) {
|
||||
|
||||
this.normal = new Float32Array( numVertex * 3 );
|
||||
ifs.SetNormal( this.normal );
|
||||
|
||||
}
|
||||
|
||||
for ( i = 0; i < uvIDs.length; i ++ ) {
|
||||
|
||||
this.uv[ i ] = new Float32Array( numVertex * 2 );
|
||||
ifs.SetFloatAttribute( uvIDs[ i ], this.uv[ i ] );
|
||||
|
||||
}
|
||||
|
||||
if ( jointID !== undefined ) {
|
||||
|
||||
this.jointPerVertex = ifs.GetIntAttributeDim( jointID );
|
||||
|
||||
this.joint = new Uint16Array( numVertex * this.jointPerVertex );
|
||||
this.weight = new Float32Array( numVertex * this.jointPerVertex );
|
||||
|
||||
ifs.SetIntAttribute( jointID, this.joint );
|
||||
ifs.SetFloatAttribute( weightID, this.weight );
|
||||
|
||||
}
|
||||
|
||||
// decode mesh
|
||||
|
||||
decoder.DecodePlayload( ifs, bstream );
|
||||
|
||||
};
|
||||
|
||||
SEA3D.GeometryGC.prototype.type = "s3D";
|
||||
|
||||
//
|
||||
// Extension
|
||||
//
|
||||
|
||||
THREE.SEA3D.EXTENSIONS_LOADER.push( {
|
||||
|
||||
setTypeRead: function () {
|
||||
|
||||
this.file.addClass( SEA3D.GeometryGC, true );
|
||||
|
||||
this.file.typeRead[ SEA3D.GeometryGC.prototype.type ] = this.readGeometryBuffer;
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
Reference in New Issue
Block a user