GithubHelp home page GithubHelp logo

libplateau's People

Contributors

dazzhe avatar linoal avatar rockepan avatar sacchy avatar sevendev avatar wyasuda avatar yuta-kanayama0418 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libplateau's Issues

ADEのオブジェクト型の拡張属性名と拡張型名の扱い

  • 拡張属性として追加されたオブジェクトの属性名
  • 拡張型として追加されたオブジェクトの型名

これらを情報として保持する必要がある。

案1) 追加オブジェクトのAttributesに追加する

  • 拡張属性の場合
    • キー: "name" or "ref"
    • 値: "拡張属性名"
  • 拡張型(COT_Unknown)の場合
    • キー: "type"
    • 値: "型名"

案2) メンバに追加する

  • 拡張属性の場合
    • m_elementName = "拡張属性名"
  • 拡張型(COT_Unknown)の場合
    • m_elementType = "型名"

案2の方が筋良さそう。

citygmlでの同名別ネームスペースのタグの扱い方

  • lod2MultiSurface等別ネームスペースに複数存在して同じ扱いをする必要がある型がある。

  • こういった型についてはcoreネームスペースに置き換えて同一に扱っている。

  • ADEの拡張属性で同一名だが違うデータ構造の型がある場合があり、こういった場合独自型として扱う必要がある。

  • 現状ではADEで既存型と同一名の型名を追加してある場合パース失敗する。

Default-Materialがすべてのオブジェクトに追加されてしまう問題

地物の底面にはテクスチャが張り付けられて無いため、その部分が別マテリアルとして登録されてしまっている。
image
image

MeshConverter側でテクスチャが無い場合にDefault-Materialを割り当てているが、一部分でもテクスチャが存在する場合はダミーでUV生成してテクスチャを割り当てる必要がある。

IDが無い場合のID付け

objWriterについて直した方が良いと思う点があります。
3Dモデルのメッシュの名前はIDと同じにして出力するようになっていますが、そのIDがgmlファイルで指定されていない場合、自動で
genID_(絶対パス.gml)(行番号)(列番号)
というIDが割り振られます。すると、図1のように長すぎるオブジェクト名が割り振られ、PCのユーザー名も丸見えになってしまうのでよくないと思いました。
絶対パスの代わりに
genID_(gmlファイル名)(行番号)(列番号)
になると良いかと思いました。

  • genID_(gmlファイル名)(行番号)(列番号)

UE向けのCMakeオプション

  • C#向けビルドとそれ以外のビルドでは別のオプションが必要
  • C++ではlibcitygmlを動的ライブラリでビルドしないとlibcitygmlのシンボルにアクセスできないため

C#ラッパーリファクタリング

NativeMethodsにすべてまとめるのをやめる。

  • 構造体、列挙体定義をNativeMethodsから各名前空間に移動
  • P/Invoke関数を各ラッパークラスに移動
public class CityObject {
    internal static class NativeMethods {
        [DllImport(...)]
        internal static extern IntPtr ...
    }
}
  • Interop名前空間を外部から利用しないようにする

Mesh Collider追加

インポート時に各パッケージについてMeshColliderの有無を選択できるように変更

[解決済] Windowsのロケール設定が日本語でないと文字化けします。

バグの内容

ロケールを English(United States)にすると日本語が ? に置き換わります。

再現方法

  • ローカルのWindowsで再現するには、下の画像のとおりにロケールを English(United States) にしてテストを実行します。
  • github actionsの自動テストで再現するには、build-and-test.yml の Set Locale for Windows の部分をコメントアウトして自動テストを実行します。

参考画像: ロケール設定の方法

image

入れ子の属性にアクセスしやすくする

現状、入れ子の属性にアクセスするには

attrMap[key1].AsAttrSet[key2].AsAttrSet[key3]

のようにする必要があります。
これはもっと便利になりそうです。
例えばstring配列で {key1, key2, key3} のように指定できれば便利です。
または、Unityのインスペクタで文字列指定をしやすくするために
"key1/key2/key3" のような区切り文字も良いかもしれませんが、これだと key の中にスラッシュがあるとバグるので
区切り文字の検討が必要かもしれません。

cityModelのアドレスをC#からC++に送る方法が他と異なり紛らわしい

C# から C++ に CityModel のアドレスを送るとき、
C++ 側でcityModelHandle->getCityModelPtr()しないと正しいアドレスが得られません。
他のクラスはこのような変換を挟まずに直接ポインタを渡せるので忘れがちであり、
忘れると Access Violation エラーとなりデバッグに時間がかかりがちです。
他のクラスと同じく、直接アドレスを渡せるようにしたいところです。

GLTF SDKのPimpl化

今の状態だとGLTF SDKのヘッダが無いとlibplateauをinclude出来ないため、Pimpl化が必要

Pimplについて
https://learn.microsoft.com/ja-jp/cpp/cpp/pimpl-for-compile-time-encapsulation-modern-cpp?view=msvc-170

必要項目

include削除

https://github.com/Synesthesias/libplateau/blob/main/include/plateau/mesh_writer/gltf_writer.h#L7

#include <GLTFSDK/GLTF.h>
#include <GLTFSDK/BufferBuilder.h>
#include <GLTFSDK/GLTFResourceWriter.h>

を削除

前方宣言追加

namespace Microsoft::glTF {
    class Scene;
    class Mesh;
    ...
}

struct等であれば適宜変更

ポインタ化

        std::unique_ptr<Microsoft::glTF::Scene> scene_;
        std::unique_ptr<Microsoft::glTF::Mesh> mesh_;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.