|
@ -195,7 +195,7 @@ class LoardObj |
|
|
private function createPly() |
|
|
private function createPly() |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
foreach( $this->objData['meshs'] as $meshs_key => $meshs_value ) |
|
|
|
|
|
|
|
|
foreach( $this->objData['meshs'] as $meshsKey => $meshsValue ) |
|
|
{ |
|
|
{ |
|
|
$ply['vertex'] = []; |
|
|
$ply['vertex'] = []; |
|
|
$ply['face'] = []; |
|
|
$ply['face'] = []; |
|
@ -203,29 +203,29 @@ class LoardObj |
|
|
$indexesList = []; |
|
|
$indexesList = []; |
|
|
$vConst = 0; |
|
|
$vConst = 0; |
|
|
|
|
|
|
|
|
foreach( $meshs_value as $face_value ) // 生成顶点和面数据
|
|
|
|
|
|
|
|
|
foreach( $meshsValue as $faceValue ) // 生成顶点和面数据
|
|
|
{ |
|
|
{ |
|
|
$face_value = implode('/', $face_value); |
|
|
|
|
|
$face_value = explode('/', $face_value); |
|
|
|
|
|
|
|
|
$faceValue = implode('/', $faceValue); |
|
|
|
|
|
$faceValue = explode('/', $faceValue); |
|
|
$lineFace = []; |
|
|
$lineFace = []; |
|
|
$v = []; |
|
|
$v = []; |
|
|
$vt = []; |
|
|
$vt = []; |
|
|
$vn = []; |
|
|
$vn = []; |
|
|
foreach( $face_value as $v_key => $v_value ) |
|
|
|
|
|
|
|
|
foreach( $faceValue as $vKey => $vValue ) |
|
|
{ |
|
|
{ |
|
|
switch( ($v_key+1) % 3 ) |
|
|
|
|
|
|
|
|
switch( ($vKey+1) % 3 ) |
|
|
{ |
|
|
{ |
|
|
case 1: |
|
|
case 1: |
|
|
$v = $this->objData['v'][$v_value-1]; |
|
|
|
|
|
|
|
|
$v = $this->objData['v'][$vValue-1]; |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case 2: |
|
|
case 2: |
|
|
if( $v_value == null ) $vt = ['0.0000','0.0000']; |
|
|
|
|
|
else $vt = array_slice($this->objData['vt'][$v_value-1],0,2); |
|
|
|
|
|
|
|
|
if( $vValue == null ) $vt = ['0.0000','0.0000']; |
|
|
|
|
|
else $vt = array_slice($this->objData['vt'][$vValue-1],0,2); |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case 0; |
|
|
case 0; |
|
|
$vn = $this->objData['vn'][$v_value-1]; |
|
|
|
|
|
|
|
|
$vn = $this->objData['vn'][$vValue-1]; |
|
|
$vnt = implode(' ',$v).' '.implode(' ',$vn).' '.implode(' ',$vt); |
|
|
$vnt = implode(' ',$v).' '.implode(' ',$vn).' '.implode(' ',$vt); |
|
|
$hashVar = hash('md5', $vnt); |
|
|
$hashVar = hash('md5', $vnt); |
|
|
if( !array_key_exists($hashVar, $indexesList) ) |
|
|
if( !array_key_exists($hashVar, $indexesList) ) |
|
@ -264,7 +264,7 @@ class LoardObj |
|
|
$ply['header'][] = "property list uchar uint vertex_indices"; |
|
|
$ply['header'][] = "property list uchar uint vertex_indices"; |
|
|
$ply['header'][] = "end_header"; |
|
|
$ply['header'][] = "end_header"; |
|
|
|
|
|
|
|
|
$this->plyData[$meshs_key] = $ply; // 在 数组plyData 中添加一个 $key 所指名称的ply模型
|
|
|
|
|
|
|
|
|
$this->plyData[$meshsKey] = $ply; // 在 数组plyData 中添加一个 $key 所指名称的ply模型
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
@ -296,7 +296,7 @@ class LoardObj |
|
|
$minY = 100000000; |
|
|
$minY = 100000000; |
|
|
$minZ = 100000000; |
|
|
$minZ = 100000000; |
|
|
|
|
|
|
|
|
foreach( $this->objData['meshs'] as $meshs_key => $meshs_value ) |
|
|
|
|
|
|
|
|
foreach( $this->objData['meshs'] as $meshsKey => $meshsValue ) |
|
|
{ |
|
|
{ |
|
|
$gltf['v'] = null; |
|
|
$gltf['v'] = null; |
|
|
$gltf['vt'] = null; |
|
|
$gltf['vt'] = null; |
|
@ -304,24 +304,24 @@ class LoardObj |
|
|
$gltf['face'] = null; |
|
|
$gltf['face'] = null; |
|
|
$indexesList = []; |
|
|
$indexesList = []; |
|
|
$vConst = 0; |
|
|
$vConst = 0; |
|
|
foreach( $meshs_value as $face_value ) |
|
|
|
|
|
|
|
|
foreach( $meshsValue as $faceValue ) |
|
|
{ |
|
|
{ |
|
|
// 生成顶点和面数据
|
|
|
// 生成顶点和面数据
|
|
|
$face_value = implode('/', $face_value); |
|
|
|
|
|
$face_value = explode('/', $face_value); |
|
|
|
|
|
|
|
|
$faceValue = implode('/', $faceValue); |
|
|
|
|
|
$faceValue = explode('/', $faceValue); |
|
|
$lineFace = []; |
|
|
$lineFace = []; |
|
|
$v = null; |
|
|
$v = null; |
|
|
$vt = null; |
|
|
$vt = null; |
|
|
$vn = null; |
|
|
$vn = null; |
|
|
foreach( $face_value as $v_key => $v_value ) |
|
|
|
|
|
|
|
|
foreach( $faceValue as $vKey => $vValue ) |
|
|
{ |
|
|
{ |
|
|
switch( ($v_key+1) % 3 ) |
|
|
|
|
|
|
|
|
switch( ($vKey+1) % 3 ) |
|
|
{ |
|
|
{ |
|
|
case 1: |
|
|
case 1: |
|
|
foreach($this->objData['v'][$v_value-1] as $xyz_key => $xyz_value) |
|
|
|
|
|
|
|
|
foreach($this->objData['v'][$vValue-1] as $xyzKey => $xyzValue) |
|
|
{ |
|
|
{ |
|
|
$xyz_value = (float)$xyz_value; |
|
|
|
|
|
switch( ($xyz_key+1) % 3 ) |
|
|
|
|
|
|
|
|
$xyz_value = (float)$xyzValue; |
|
|
|
|
|
switch( ($xyzKey+1) % 3 ) |
|
|
{ |
|
|
{ |
|
|
case 1: |
|
|
case 1: |
|
|
$maxX = $xyz_value > $maxX ? $xyz_value : $maxX; |
|
|
$maxX = $xyz_value > $maxX ? $xyz_value : $maxX; |
|
@ -339,16 +339,16 @@ class LoardObj |
|
|
; |
|
|
; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
$v = $this->objData['v'][$v_value-1]; |
|
|
|
|
|
|
|
|
$v = $this->objData['v'][$vValue-1]; |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case 2: |
|
|
case 2: |
|
|
if( $v_value == null ) $vt = ['0.0000','0.0000']; |
|
|
|
|
|
else $vt = array_slice($this->objData['vt'][$v_value-1],0,2); |
|
|
|
|
|
|
|
|
if( $vValue == null ) $vt = ['0.0000','0.0000']; |
|
|
|
|
|
else $vt = array_slice($this->objData['vt'][$vValue-1],0,2); |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case 0; |
|
|
case 0; |
|
|
$vn = $this->objData['vn'][$v_value-1]; |
|
|
|
|
|
|
|
|
$vn = $this->objData['vn'][$vValue-1]; |
|
|
$hashVar = implode(' ',$v).' '.implode(' ',$vn).' '.implode(' ',$vt); |
|
|
$hashVar = implode(' ',$v).' '.implode(' ',$vn).' '.implode(' ',$vt); |
|
|
$hashVar = hash('md5', $hashVar); |
|
|
$hashVar = hash('md5', $hashVar); |
|
|
if( !array_key_exists($hashVar, $indexesList) ) |
|
|
if( !array_key_exists($hashVar, $indexesList) ) |
|
@ -497,7 +497,7 @@ class LoardObj |
|
|
|
|
|
|
|
|
$mesh = null; |
|
|
$mesh = null; |
|
|
$mesh = "\t\t{\n"; |
|
|
$mesh = "\t\t{\n"; |
|
|
$mesh .= "\t\t\t\"name\" : \"".$meshs_key."\",\n"; |
|
|
|
|
|
|
|
|
$mesh .= "\t\t\t\"name\" : \"".$meshsKey."\",\n"; |
|
|
$mesh .= "\t\t\t\"primitives\" :\n"; |
|
|
$mesh .= "\t\t\t\"primitives\" :\n"; |
|
|
$mesh .= "\t\t\t[\n"; |
|
|
$mesh .= "\t\t\t[\n"; |
|
|
$mesh .= "\t\t\t\t{\n"; |
|
|
$mesh .= "\t\t\t\t{\n"; |
|
@ -519,7 +519,7 @@ class LoardObj |
|
|
$node = null; |
|
|
$node = null; |
|
|
$node = "\t\t{\n"; |
|
|
$node = "\t\t{\n"; |
|
|
$node .= "\t\t\t\"mesh\" : ".$meshCount.",\n"; |
|
|
$node .= "\t\t\t\"mesh\" : ".$meshCount.",\n"; |
|
|
$node .= "\t\t\t\"name\" : \"".$meshs_key."\"\n"; |
|
|
|
|
|
|
|
|
$node .= "\t\t\t\"name\" : \"".$meshsKey."\"\n"; |
|
|
$node .= "\t\t}"; |
|
|
$node .= "\t\t}"; |
|
|
$this->gltfData['nodes'][$meshCount] = $node; |
|
|
$this->gltfData['nodes'][$meshCount] = $node; |
|
|
$bufferCount++; |
|
|
$bufferCount++; |
|
@ -580,12 +580,12 @@ class LoardObj |
|
|
fwrite($handle,$data); |
|
|
fwrite($handle,$data); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
foreach( $value['vertex'] as $v_value ) // 2、写入顶点数据
|
|
|
|
|
|
|
|
|
foreach( $value['vertex'] as $vValue ) // 2、写入顶点数据
|
|
|
{ |
|
|
{ |
|
|
if( $format == self::TYPE_BINARY ) |
|
|
if( $format == self::TYPE_BINARY ) |
|
|
{ |
|
|
{ |
|
|
$data = null; |
|
|
$data = null; |
|
|
foreach( explode(' ', $v_value) as $v ) |
|
|
|
|
|
|
|
|
foreach( explode(' ', $vValue) as $v ) |
|
|
{ |
|
|
{ |
|
|
$data .= pack('f',$v); |
|
|
$data .= pack('f',$v); |
|
|
} |
|
|
} |
|
@ -593,7 +593,7 @@ class LoardObj |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
$data = $v_value."\n"; |
|
|
|
|
|
|
|
|
$data = $vValue."\n"; |
|
|
fwrite($handle,$data); // 文本格试写入
|
|
|
fwrite($handle,$data); // 文本格试写入
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|