4

現在、ドキュメントを参照して PHP.blendの関数を使用して、ファイルからいくつかのデータ (メタデータ、シーン名、メッシュ数、頂点数など) を読み取りたいと考えています。unpack()Blender SDNA

http://www.atmind.nl/blender/blender-sdna-256.html

これらすべての情報を既存のクラスまたはライブラリで読み取る簡単な解決策はありますか、それともファイルからブロックごとに読み取り、独自の関数 / クラス / ライブラリを作成する必要がありますか (オブジェクトのようなものを作成できるようにします) ?

4

1 に答える 1

2

PHPマニュアルと相談した後、PHPはバイナリファイルを読み取る方法を提供していないだけだと言えますが、これを行うにはかなり良い方法があると思います(c と fread に触発されました)

class BinaryReader {
    const FLOAT_SIZE = 4;

    protected $fp = null; // file pointer
    ...

    public function readFloat() {
         $data = fread( $fp, self::FLOAT_SIZE);
         $array = unpack( 'f', $data);
         return $array[0];
    }

     // Reading unsigned short int
     public function readUint16( $endian = null){
          if( $endian === null){
               $endian = $this->getDefaultEndian();
          }

          // Assuming _fread handles EOF and similar things
          $data = $this->_fread( 2);
          $array = unapack( ($endian == BIG_ENDIAN ? 'n' : 'v'), $data);
          return $array[0];
     }

    // ... All other binary type functions

    // You may also write it more general:
    public function readByReference( &$variable){
        switch( get_type( $variable)){
            case 'double':
                return $this->readDouble();
            ...
        }
    }
}

改善点やヒントがある場合は、コメントに投稿してください。喜んで回答を差し上げます。

于 2012-01-20T13:48:14.923 に答える