ぬの部屋(仮)
nu-no-he-ya
  •      12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
         12
    3456789
    10111213141516
    17181920212223
    2425262728  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
       1234
    567891011
    12131415161718
    19202122232425
    26272829   
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728     
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28      
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
    1234567
    891011121314
    15161718192021
    22232425262728
           
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
         12
    3456789
    10111213141516
    17181920212223
    242526272829 
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
        123
    45678910
    11121314151617
    18192021222324
    25262728   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    15161718192021
    293031    
           
         12
    3456789
    10111213141516
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728     
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
          1
    2345678
    9101112131415
    16171819202122
    232425262728 
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
  • Blenderで鎖のチュートリアルを試す(2)

    1.質量の調整

    質量の調整は、設定したいオブジェクトを選択した状態で
    [Physics]→[Rigid Body]→Mass から設定する。

    初期状態で、球体のMassを30に設定すると、鎖がちぎれる。

    この場合、全ての鎖のMassをある程度上げる。選択したオブジェクトの全てのMassを上げる場合、まずアクティブなオブジェクト(Originがオレンジ色)のMassを上げ、その後Copy from Activeを押して、他のOriginが赤い選択中のオブジェクトへ適用する。

    2.壊される側のブロック(Cube)を追加

    1.Cubeを追加 [06:22~ ]

    [Shift+A]→[Mesh]→Cube でCubeを追加

    2.Arrayで複製・適用

    CubeにArrayモディファイアを三つ追加する。上から、
    Count : 8 , Relative Offset = (1.032 , 0 , 0)
    Count : 8 , Relative Offset =( 0, 1.02, 0 )
    Count : 5 , Relative Offset = ( 0 , 0 , 1.02 )

    と設定し、全てApplyする。

    3.Apply後のCubeを別オブジェクトに分割、Origin再設定[07:30~ ]

    ArrayをApplyした後のCubeは全て一つのオブジェクトになっているので、個別のメッシュに分割する。

    1.Editモードへ行き、全て選択

    2. [P] → By loose parts

    このままでは、オブジェクトのOriginが全て一カ所に集まっている。Blenderの物理シミュレーションはOriginの位置を重心として扱うため、各キューブのOriginを各キューブの中心へ移動しなければ上手く動かない。

    [Ctrl + Alt + Shift + C] → Origin to Geometry を適用する

    4.Cubeにシミュレーションを追加

    Cube一つを選択状態にし、[Physics]→[Rigid Body]を有効にし、Massを0.1に設定する。


    今設定した(青くなっている)Cubeを含め、他のCubeも全て選択し、Copy from Activeで全てのCubeに設定をコピーする

    Blenderで鎖のチュートリアルを試す(1)

    Blender Tutorial - Quick Rigid Body Fun

    1.鎖を作る [0:11~ ]

    1.トーラスを作成

    [Shift+A]→[Mesh]→[Torus]

    2.トーラスから鎖の形にする

    [Num+7]で上面からの図に切り替え、Editモードへ移行し、Torusを楕円にする。その後[Shift+D]で複製し、[R+Y]で90度回転する。

    ① Torusを伸ばす

    ② Torusを鎖にする
    ③鎖を増やす

    なお、動画で使っているのは[Shift+R]というリピート機能。ただしこの機能を使う場合、[Shift+D]をした後[ESC]すると[ESC]が最後の作業と見なされてしまうので、[Shift+D→ドラッグ]でなければならない。

    https://maku77.github.io/blender/ui/repeat.html

    2. 鎖に物理シミュレーションを追加[0:50~ ]

    鎖の一つを選択し、

    [Physics]→[Rigid Body]→
    [Rigid Body Collisions]→[Shape]

    を"Mesh"に設定

    Rigid Bodyを設定した鎖をアクティブにし、その他の鎖を選択する。

    [Physics]→Copy from Active

    で最初の鎖の設定を全てに反映

    3.地面を追加 [1:53~ ]

    落下したときに落ちる地面を追加する。

    [Physics]→[Rigid Body]→[Rigid Body]→[Type]→Passive

    4.ここまでの結果 [ 02:05~ ]

    5. 鎖の調整[03:00~ ]

    1.鎖を一つだけ固定する

    [Physics]→[Rigid Body]→ Dynamicのチェックを外す

    2. 鎖に球を追加

    3.重心を変更

    オブジェクトのOrigin(オレンジ色の点)がシミュレーション時にオブジェクトの重心として計算されるため、Originをオブジェクトの中心にしておく。鎖を全て選択し、

    [Ctrl + Alt + Shift + C]→ Origin to Geometry を選択

    4.傾けてシミュレーション

    1.固定されている鎖(一番上)を選択

    2.[Shift+S]→Cursor to Selected

    3.[3D Cursor]を選択

    4.全ての鎖を選択

    5.[R]で回転

    5.ここまでのアニメーション

    VCG LibraryのBall Pivotingでメッシュ生成

    VCG LibraryのBall Pivotingを使用してみます

    まずヘッダファイルを読み込みます

    #include <vcg/complex/algorithms/create/ball_pivoting.h>
    

    次に点群を作成します。

    int X = 50;
    int Y = 50;
    
    auto itr = vcg::tri::Allocator<MyMesh>::AddVertices(mesh,X*Y);
    
    for (size_t x = 0; x < X; x++) {
      for (size_t y = 0; y < Y; y++) {
    
        double d1 = rand() % 100 / 2000.0;
        double d2 = rand() % 100 / 2000.0;
        double d3 = rand() % 100 / 7000.0;
    
        double dx = x / (double)X; // 0.0 ~ 1.0の範囲にする
        double dy = y / (double)Y;
    
        itr->P().X() = dx + d1;
        itr->P().Y() = dy + d2;
        itr->P().Z() = d3;
    
        ++itr;
    
      }
    }
    

    Ball Pivotingの実行

    double radius = 0.05;
    double clustering = 0.03;
    tri::BallPivoting<MyMesh> pivot(mesh, radius, clustering);
    pivot.BuildMesh();
    

    BPAは既に存在する点群に対して実行します。
    radiusはボール径です。radiusによって結果が大きく変わります

    VCG Library メッシュからfaceのみを削除する

    VCG LibraryのBall Pivotingでメッシュ生成

    VCG LibraryでkdTree

    VCG Library でスムージング

    VCG Library ターゲットの周辺のオブジェクトを取得

    VCG LibraryでMeshに三角形を登録する方法

    VCG Library でポリゴンファイル保存

    VCG Libraryで色のついたポリゴンの読み込み・表示

    VCG LibのFace-FaceやEdge-Faceなどの関連付け

    VCG Library

    VCG LibraryでkdTree

    VCGで点群を検索するサンプルです。

    0. vcg/space/index/kdtree/kdtree.h をinclude

    #include <vcg/space/index/kdtree/kdtree.h>
    

    1.点群を準備

    auto itr = vcg::tri::Allocator<MyMesh>::AddVertices(mesh, 30000);
    for (size_t i = 0; i < 30000; i++) {
      double k1 = rand() / (double)RAND_MAX;
      double k2 = rand() / (double)RAND_MAX;
      double k3 = rand() / (double)RAND_MAX;
      itr[i].P() = vcg::Point3f(k1, k2, k3);
      itr[i].dist = 0.6;
    }
    

    2. 検索結果を格納する配列を定義

    // 検索して得られた頂点IDを格納する
    std::vector<unsigned int> vpid;
    
    // 検索して得られた頂点の、指定した座標からの距離を格納する
    std::vector<float> vpdst;
    

    3.kdTreeで指定した座標付近の点群を取得

    vcg::VertexConstDataWrapper<MyMesh> ww(mesh);
    vcg::KdTree<float> tree(ww);
    
    //検索する座標 p を定義
    vcg::Point3f p(0.5, 0.5, 0.5);
    
    double distance = 0.5;
    //検索
    tree.doQueryDist(p, distance, vpid, vpdst);
    

    4. 取得した点群に対して処理

    //検索して得られた頂点に、pとの二乗距離を格納(distメンバ変数は自分で定義したもの)
    for(int i = 0; i < vpid.size();i++){
      mesh.vert[ vpid[i] ].dist = vpdst[i];
    }
    

    doQueryDist


    doQueryDist(
    const VectorType& queryPoint,
    float dist,
    std::vector& points,
    std::vector& sqrareDists
    )

    SquareDistance

    距離計算に内部で使っているquaredNorm()関数の処理は、

    /// Squared euclidian normal
    inline T SquaredNorm() const
    {
      return _v[0]*_v[0] + _v[1]*_v[1] + _v[2]*_v[2] + _v[3]*_v[3];
    }
    

    となっていますので、実際の距離を知りたい場合はsqrtする必要があります。

    VCG Library メッシュからfaceのみを削除する

    VCG LibraryのBall Pivotingでメッシュ生成

    VCG LibraryでkdTree

    VCG Library でスムージング

    VCG Library ターゲットの周辺のオブジェクトを取得

    VCG LibraryでMeshに三角形を登録する方法

    VCG Library でポリゴンファイル保存

    VCG Libraryで色のついたポリゴンの読み込み・表示

    VCG LibのFace-FaceやEdge-Faceなどの関連付け

    VCG Library


    宗教に関する簡素な考察

    HTML,CSSでliタグのオフセットが高すぎる

    HTMLはたまにしか使わないのでその度に忘れるのでメモ。

    HTMLの<ul><li></li></ul>の、liの左のオフセットが広すぎてなんとかしたいとき。liではなく、ulのpaddingを設定します

    <html>
    <head>
    <style type="text/css">
    <!--
    div.box{
      width:200px;
      height:200px;
      margin-left:50px;
      border:solid thin black;
    }
    ul{
      border:solid thin blue;
      padding-left:0px;
    }
    li{
      border:solid thin red;
    }
    -->
    </style>
    </head>
    <body>
     <div class="box">
      <p>いろは</p>
      <ul>
       <li>こんにちは</li>
       <li>こんばんわ</li>
      </ul>
     </div>
    </body>
    </html>
    

    vray for Blenderでアニメーション

    ①animation:Full Rangeを選択

    ②Renderボタンをクリック

    ③Outputで出力パスを指定

    vray for blenderでHDRの背景をレンダリング


    Blenderでhdrファイルを読み込んでEnvironmentに指定して背景を描画します。

    • Vray World Node Treeを選択
    • [Shift+A]→[Environment]→Environment
    • [Shift+A]→[Texture]→Image File
    • "Mapping Setting"をEnvironmentにする

    pngの時はImg No Alphaをチェック

    レンダリング時の注意として、pngで出力する場合、そのままだと(なぜか)背景が描画されません。jpegなどならちゃんと出力されます。

    仕方がないので、Outputを指定し、Img No Alphaをチェックします。

    VCG Library でスムージング

    http://vcg.isti.cnr.it/vcglib/trimesh__smooth_8cpp_source.html

    VCG Libraryでスムージングするには、VertexCoordPasoDoble関数を使います。公式のサンプルにあるように

    vcg::tri::Clean<MyMesh>::RemoveDuplicateVertex(mesh);
    vcg::tri::Clean<MyMesh>::RemoveUnreferencedVertex(mesh);
    vcg::tri::UpdateTopology<MyMesh>::VertexFace(mesh);
    

    が必要です。

    さらに、 VertexCoordPasoDoble 関数内で、

    RequireVertexCompactness<MeshType>(m);
    RequireFaceCompactness<MeshType>(m);
    RequireEdgeCompactness<MeshType>(m);
    RequireTetraCompactness<MeshType>(m);
    

    とチェックが入っているので、

    vcg::tri::Allocator<MyMesh>::CompactVertexVector(mesh);
    vcg::tri::Allocator<MyMesh>::CompactEdgeVector(mesh);
    

    等が必要になる場合があります

    vcg::tri::Clean<MyMesh>::RemoveDuplicateVertex(mesh);
    vcg::tri::Clean<MyMesh>::RemoveUnreferencedVertex(mesh);
    vcg::tri::UpdateTopology<MyMesh>::VertexFace(mesh);
    vcg::tri::Allocator<MyMesh>::CompactVertexVector(mesh);
    vcg::tri::Allocator<MyMesh>::CompactEdgeVector(mesh);
    int Step = 2;
    int NormalSmoothStep=3;
    float Sigma=0.5;
    int FitStep=4;
    for (int i = 0; i < Step; ++i)
    {
      vcg::tri::UpdateNormal<MyMesh>::PerFaceNormalized(mesh);
      vcg::tri::Smooth<MyMesh>::VertexCoordPasoDoble(
        mesh,
        NormalSmoothStep,
        Sigma,
        FitStep
      );
    }
    

    VCG Library メッシュからfaceのみを削除する

    VCG LibraryのBall Pivotingでメッシュ生成

    VCG LibraryでkdTree

    VCG Library でスムージング

    VCG Library ターゲットの周辺のオブジェクトを取得

    VCG LibraryでMeshに三角形を登録する方法

    VCG Library でポリゴンファイル保存

    VCG Libraryで色のついたポリゴンの読み込み・表示

    VCG LibのFace-FaceやEdge-Faceなどの関連付け

    VCG Library

    wstring+wcoutでなぜlocaleするのか

    Unicodeはどんな文字でも対応してるからwstringをwcoutすれば何でも表示出来るはず

    #include <iostream>
    #include <string>
    
    int main() {
    
      std::locale::global(std::locale("japanese"));// ① 
    
      std::wstring hello = L"こんにちは"; 
    
      std::wcout << hello; 
    
      getchar(); 
    
      return 0;
    
    }
    


    localeを入れた場合の結果


    localeを入れなかった場合の結果

    なぜUnicodeなのにsetlocaleしなければ文字が出力出来ないか。

    それは、

    コマンドプロンプトがShift-JISしか表示出来ないため、

    wcoutはShift-JISで文字列を出力せねばならず、

    wcout自身は自分がどんな環境で動いているか関知していないので、

    localeでShift-JIS環境だと教えてあげる必要がある

    という理屈からだ。

    自分が作ったアプリケーション内で、どのように文字列を処理しようがそれは作った者の自由だ。別にshift-jisやunicodeである必要はない。必要があれば自分定義した文字コードで書いたっていい(もの凄い労力だろうが)。

    しかし、それを出力するなら、出力先の仕様に合わせる必要がある。出力先がどんな文字コードに対応しているかを教えるのがlocaleの役目となる。

    #include <iostream>
    #include <string>
    #include <fstream>
    
    int main() {
    
      std::locale::global(std::locale("japanese"));// ①
    
      std::wstring hello = L"こんにちは"; 
      std::wofstream wof(L"test.txt");
    
      wof << hello;
    
      return 0;
    }
    

    ファイル出力に関しても同様で、Lをつけてワイド文字指定しても、wofstreamが自動的にShift-JISへ変換して出力する。