ぬの部屋(仮)
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
           
  • C++CLI のフォームでオーバーライドするイベントハンドラを見つける方法

    OnFormClosingをオーバーライドしたい。

    問題1:コードから作っているのでデザイナやプロパティは使えない

    問題2:検索してもC#の情報しか出ない(そして大抵は名前空間がわからない)

    探し方

    ベースは以下

    C++CLI でコードで作成したフォームにコードでコントロールを配置

    まずこの状態のフォームがある。

    ref class MyForm :public System::Windows::Forms::Form {
    
      /* 省略 */
    public:
      MyForm() {
        /* 省略 */
      }
      virtual ~MyForm() {
      }
      /* 省略 */
    }
    

    ソースコードの自動補完で戻り値と引数を確認する。

    void OnFormClosing(System::Windows::Forms::FormClosingEventArgs^ e)override {
      if( m_f_c == false)
        if (e->CloseReason == CloseReason::UserClosing)
          e->Cancel = true;
    }
    

    コード(一部)

    ref class MyForm :public System::Windows::Forms::Form {
    
    
      System::Windows::Forms::Button^ m_button;
    
      bool m_f_c = false;
    public:
      MyForm() {
    
        m_button = gcnew System::Windows::Forms::Button;
    
        m_button->Text = "close";
        m_button->Click += gcnew EventHandler(this, &MyForm::ClickEvent);//イベントハンドラ追加
    
        this->Controls->Add(m_button);//フォームに配置
      }
      virtual ~MyForm() {
        
      }
    
      void ClickEvent(Object^ source, EventArgs^ e) {
        System::Windows::Forms::MessageBox::Show("Close");
    
        m_f_c = true;
    
        this->Close();
    
      }
    
    
    void OnFormClosing(System::Windows::Forms::FormClosingEventArgs^ e)override { if( m_f_c == false) if (e->CloseReason == CloseReason::UserClosing) e->Cancel = true; }
     
    };

    Blender – 80’s Style Animation Loop in Eevee チュートリアルを試す(2)

    続き

    マテリアル追加[4:13]

    1.Planeに黒のマテリアルを追加し、以下のように設定

    2.Planeに青のマテリアルを追加し、以下のように設定

    3.Wireframeモディファイアの設定で、Material Offsetを2に設定

    4.動画にはないが、Context.RenderでBloomをOnにする

    レンダリングの結果を確認するには、[Z]キーを押し、[Render]を選択する。

    Worldの設定から背景を黒にする。

    HDRIの設定 [04:45]

    HDRI ダウンロード

    HDRI Haven https://hdrihaven.com/ へ行く

     HDRIs > Skies > Kiara 1 Dawn の 4k 24MBのファイルをダウンロードする

    (1)
    (2)
    (4)
    (3)

    HDRの適用

    5.World→ ColorをEnvironment Textureに設定し、ダウンロードしたHDRファイルを選択する。

    6.この際、明るすぎるのでStrengthを0.3に変更する(下図では0.1にしているが0.3が正解。動画では一度0.1にした後でやっぱり0.3にしている・・・・・・)

    ノードの設定

    Shadingタブに切り替えノードを表示する

    対象をWorldに切り替え、
    ・[Shift+A]→[Vector]→Mappingを追加
    ・[Shift+A]→[Input]→Texture Coordinateを追加

    [Shift+A]→[Hue/Saturation]を追加しBackgroundの前に置き、Hue=0.6などして紫に近づける

    地形の最終調整[07:00~ ]

    Layoutへ行き、6頂点ほどを選択し、Proportional EditingのRandomであることを確認しZ方向に僅かに動かし地形にノイズを加える。

    Planeの黒いマテリアルの方を選択し、Shadingへ移動する。

    [Shift+A]→[Vector]→Bump を追加
    [Shift+A]→[Texture]→Noise Texture を追加

    以下のように設定

    太陽の追加[08:00~ ]

    [Shift+A]→[Mesh]→UV Sphere で球を追加

    UV Sphereを右クリック→Object Context Menu→Shade Smooth

    UV Sphereをカメラ方向にPlaneの端まで移動する

    [S]で球を拡大する

    なお球がカメラから見えなくなったらカメラの設定のEndを伸ばす

    EditモードでSphereを右クリックし[Subdivide]

    オプションで
    ・Number of Cuts = 2
    ・Smoothness=1.0

    太陽のマテリアル設定

    動画ではStrength=1.5だがなぜか光量が足りないので15程度にしている。

    太陽とカメラの距離を保つ

    ・Sphereを選択→Cameraを選択→[Ctrl+P] でカメラを親、太陽を子にする

    レンダリング

    Blender – 80’s Style Animation Loop in Eevee チュートリアルを試す(1)

    メッシュ追加[0:10]

    1.[Shift+A]→[Mesh]→Plane で面を追加

    2.Planeを[S]→[8]で8倍にする

    3.Subdivideで30分割する。

    Blender 2.8のSubdivideは、キーバインドをBlender 2.79以下にしているなら[W]→Subdivideだが、そうでないなら

    Editモードで右クリック
    [スペースキー]ないし[F3]で出てくる検索機能

    EditモードのEdgeメニュー

    で見つけることができる。

    https://blender.stackexchange.com/questions/130717/subdivide-button-in-blender-2-8

    山を追加 [0:30]

    Proportional EditingでConnectedを選択し、 Proportional Editing FalloffをRandomに設定する。

    ※Blender 2.8rc1では、 Proportional Editing がただのスイッチになり、代わりに Proportional Editing Falloff のほうで「Connected Only」と「Projected from view」を選択するようになっている。

    Editモードで約8頂点選択し、[G][Z]でZ方向に引き上げて山を作る。なおBlender 2.8の頂点複数選択はShift+マウス左ボタン。

    このままだと一番高い山頂が全て同じ高さになってしまうので、微調整し、山らしくする。

    Mirrorモディファイアの追加[01:20~ ]

    4.MirrorモディファイアのためのEmptyを追加する。[Shift+A]→[Empty]→Plain Axes

    5.Ctrlキーを押しながらオブジェクトをMoveすることでグリッドにスナップして移動できる。これを利用してX方向にPlaneの端まで移動する。

    6.Mirrorモディファイアを追加し、以下のように設定

    カメラの追加 [01:50]

    [Shift+A]→Camera でカメラを追加する。元々カメラがある場合はそれを使えばいい。

    7.カメラの設定を以下のようにし、その上でZ方向に僅かに移動する。

    8.Context.Outputへ行き、Frame Rateを24fpsへ変更

    キーフレームの設定

    9.Animationのタブへ行き、End:120に設定

    10.[Edit]→[Preference]→Animation→Default InterpolationをLinearに設定

    11.カメラをクリックし選択し、Animate Propertyをクリックしキーフレームに設定する(※Frame 1に移動しておく)

    12.カメラをPlaneの反対側まで移動し、キーフレームを打つ

    Arrayモディファイア [03:20~ ]

    PlaneにArrayモディファイアを追加し、以下のように設定。

    ※なお、シームレスにつながらない場合は、Planeの頂点のY座標が-8~8の空間からはみ出ているので修正する

    カメラ再調整

    カメラの焦点距離と角度を以下のように設定する

    Wireframeモディファイア[4:00~ ]

    PlaneにWireframeモディファイアを追加し、以下のように設定

    C++CLI でコードで作成したフォームにコードでコントロールを配置

    ソースコード

    using namespace System;
    using namespace System::Windows::Forms;
    
    
    ref class MyForm :public System::Windows::Forms::Form { System::Windows::Forms::Button^ m_button; public: MyForm() { m_button = gcnew System::Windows::Forms::Button; m_button->Text = "hello"; m_button->Location = System::Drawing::Point(10, 10);//位置変更 m_button->Size = System::Drawing::Size(70, 30);//サイズ変更 m_button->Click += gcnew EventHandler(this,&MyForm::ClickEvent);//イベントハンドラ追加 this->Controls->Add(m_button);//フォームに配置 } virtual ~MyForm() { } void ClickEvent(Object^ source, EventArgs^ e) { System::Windows::Forms::MessageBox::Show("hello pushed"); } };
     
    [STAThread] int main(array<String^>^ args) { MyForm m; Application::Run(% m); }

    C++CLIのコード作成

    1.空のCLRプロジェクトを作成

    2.プロジェクト→
    プロパティページ→リンカー→
    詳細設定→エントリーポイント = main

    3.プロジェクト→
    プロパティページ→リンカー→
    システム→サブシステム =
    Windows (/SUBSYSTEM:WINDOWS)

    4.プロジェクト→
    ソースファイル→右クリック→
    追加→新しい項目 (cppファイル追加)

    5.プロジェクトを右クリック→
    追加→参照→アセンブリ→
    ✔System
    ✔System.Windows.Forms
    ✔System.Drawing
    の三つをチェック

    6.コード記述

    How to Morph Particles into Shapes in Blender のチュートリアルを試す(2)

    続き。

    key particleを使ってfluid等のparticleも移動させる。

    準備[5:50~]

    1.次のレイヤーに移動し、3Dカーソルが原点にあることを確認し、新たに[Shift+A]→[Mesh]→Cubeを追加する

    2.[Num 5]で平行投影、[Num 1]でXZのビューにし、[S]で少しだけ拡大し、[S][X]でさらに少しだけX方向にキューブを拡大。その後底面がXY平面につくくらいの位置までキューブをZ方向に移動する。

    3.[Shift+A]→[Mesh]→Planeで面を追加し、90° Y軸回転後、Cubeの内側、左に配置する。

    ※動画では-90°になっているが後で間違えて修正しているので90°が正解

    4.CubeにCollisionを追加し、Factor=0.8を設定する。

    5.PlaneにParticleを追加し、名前をFluidに設定する。
    Number=5000
    Lifetime=250 (最後のフレームまでParticleが存在するように)
    End=100 (100フレーム目でParticleの流出が止まるように)
    PhysicsをFluidに設定し、Interaction Radius=1.6
    に設定。

    6.[Num 1]を押し、XZ面表示にし、[Shift+A]→[Mesh]→UV Sphereを追加。
    Z方向に移動し、Cubeの上に配置する

    7.UV SphereにParticleを追加し、
    Number = 5000 (Cube側と同じ)
    Lifetime=250
    End=1

    8.[Shift+A]→[Mesh]→CubeでCubeをもう一つ追加し(Cube.003)、Particle Systemを追加し、以下のように設定をする。

    How to Morph Particles into Shapes in Blender のチュートリアルを試す(1)

    プリミティブ準備

    最初のCubeも使って、三つのプリミティブを準備する。

    Particle Systemの追加[0:50]

    CubeにParticle Systemを追加し、以下のように設定。

    [Shift]を押しながら右ボタンクリックで各モデルを選択する。

    Particle Systemを追加したCubeを一番最後に選択し、[Ctrl+L]→[Modifiers]でParticleを他のモデルにコピーする

    またこの後でParticleのLifetimeを250にしておく(消えないようにするため)

    keyの追加[02:30~ ]

    Cubeをもう一つ追加し、後ろの方に配置する。

    このCubeにもParticle Systemを追加し、EmissionのNumberを5000(他と同じ値)に設定、Endも1.0に設定する

    Physicsへ行き、Keyedに設定し、keyを追加する

    ここまでの設定で、アニメーションをするとParticleがCube→Sphere→Cylinderの順に移動する。

    アニメーション速度

    後から追加したCube.001のParticleのLifetimeを変更するとParticleの移動速度を変更できる。

    より細かい速度設定のためには、Use Timingをチェックする。

    そしてTimeとDurationを設定する。

    Time ... Particleがその図形に完全に移動する、タイムライン上の時間
    Duration ... Particleがその図形で何フレーム待機するか

    例えば、「Frame 0 でCubeからスタートし、Sphereに到着するのがFrame 40,そこで15 Frame待機し、Frame 200 でCylinderに到着」

    という設定の場合、

    なおParticleが表示されているのはLifetimeの時間内だけなので途中で消える場合はLifetimeが短い可能性がある。

    ファイル保存ダイアログにコントロール追加(C#)

    Windows API Code Pack

    Windows API Code Packを追加して使えるCommonSaveFileDialogを使う。

    VC++の[表示]→[その他のウィンドウ]→[パッケージマネージャーコンソール]を開き、以下のコマンドを入力

    Install-Package WindowsAPICodePack-Core
    Install-Package WindowsAPICodePack-Shell

    ソースコード

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    
    using Microsoft.WindowsAPICodePack; using Microsoft.WindowsAPICodePack.Dialogs; using Microsoft.WindowsAPICodePack.Dialogs.Controls;
     
    namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_MouseClick(object sender, MouseEventArgs e) { CommonSaveFileDialog dialog = new CommonSaveFileDialog(); CommonFileDialogCheckBox check = new CommonFileDialogCheckBox("check"); dialog.Controls.Add(check); if (dialog.ShowDialog() == CommonFileDialogResult.Ok) { if (check.IsChecked == true) { MessageBox.Show("Checked"); } else { MessageBox.Show("unChecked"); } } } } }

    実行結果

    WordPress 投稿日と更新日

    投稿日

    投稿日は以下の方法で出力できる

    <time><?php echo get_the_time('Y年n月j日'); ?></time>
    

    更新日

    記事が編集された日が更新日となる。

    記事を書き、そのまま予約投稿した場合は、「予約投稿」ボタンを押した日が更新日となる。

    更新日は以下の方法で出力できる

    <time><?php echo the_modified_date('Y/m/d'); ?></time>
    

    更新日が投稿日より前になるアレ

    予約投稿ボタンを押した日=更新日なので、
    予約投稿すると、

    投稿日 8月10日
    更新日 8月8日

    のような状態になる。ここで問題になるのは更新日のほうなので、get_mtimeで「更新日の方が古ければ、投稿日を表示」という分岐を行う。

    http://www.keni-customize.net/update-date-573/

    ちなみにこのget_mtime、ユーザ定義の関数なのにget_mtimeで検索するとすぐ出てくる。もう標準化しちゃえよ・・・

    Proximity Decimation Technique in Blender のチュートリアルを試す

    Proximity Decimation Technique in Blender

    約八分、Tissueアドオンを使うので、Blender 2.79が必要。

    再分割

    Editモードで[w]→Subdivideで、 もともとあったCubeを7回再分割する。

    球の追加[0:35]

    [Shift+A]→[Ico Sphere]でICO球を追加し、Cubeの端の方へ移動する。

    Vertex Weight Proximity [0:55]

    CubeのEditモードへ行き、 Cubeのすべての頂点を選択し、全ての頂点をVertex Groupへ追加する。

    Cubeを選択し、Vertex Weight Proximityモディファイアを追加する

    Weight Paintモードに切り替える

    モディファイアを以下のように設定

    ICO Sphereを非表示にする。

    Decimate[2:35]

    Decimateモディファイアを追加し、以下のように設定。ワイヤフレーム表示は[Z]キーで切り替えられる。

    この状態で、上から各モディファイアをApplyする。

    Tissueアドオン [05:10~]

    Tissue ToolsのDual Meshをクリックする。

    Wireframeモディファイア [05:35~]

    Wireframeモディファイアを追加し以下のように設定。

    その後Subdivision Surfaceモディファイアを追加する。

    演出[07:15~]

    1.土台と背景用にそれぞれPlaneを追加し配置
    2.Cyclesで、BackgroundのColorを黒にして環境光を消す
    3.Point Lightを追加し、オブジェクトの中に配置

    timespec_getでナノ秒単位で時間計測する

    C++11以上、Visual C++15 以降(?)での時間計測。

    必要ヘッダ

    #include <time.h>
    

    構造体

    time.h内でstruct timespecが定義されている。

        struct timespec
        {
            time_t tv_sec;  // Seconds - >= 0
            long   tv_nsec; // Nanoseconds - [0, 999999999]
        };
    

    timespec_get

    1) ts の指す timespec オブジェクトにタイムベース base における現在のカレンダー時刻を格納します。
    2) timespec_get の引数 base として使用するのに適した値に展開されます。

    https://ja.cppreference.com/w/c/chrono/timespec_get

    基本的な使い方

    timespec tspec;
    timespec_get(&tspec, TIME_UTC);
    
    printf(" %lld.%ld\n", tspec.tv_sec, tspec.tv_nsec);
    

    実行例:
    1562584816.201974300

    timespec_get関数で、tv_secに秒、tv_nsecにナノ秒の値が、それぞれtime_t型とlong型で入る。

    time_t型は環境にもよるがVC++2019,x64では__int64なのでprintfではlldを使用している。

    時間の計り方

    要はtimespec_get関数である時点から数えた現在時刻の秒を整数部分と小数部分(ナノ秒を表す整数値)を分けて取得できる。

    開始時刻、終了時刻を記録して引き算をすればいいのだが、整数部分と小数部分が分かれているためそのまま引き算できない。例えば、

    開始・・・10.5秒
    終了・・・11.2秒

    だった場合、

    整数部・・・11-10
    小数部・・・2-5

    となり、 10.5秒~11.2秒までの間は 1.-3

    となってしまう。要は繰り下がりも考慮しなければならない。

    コード例

    //Sleepに必要
    #include <Windows.h>
    
    //printf等
    #include <cstdio>
    
    //std::int64_tに必要
    #include <cstdint>
    
    //time.hでも可
    #include <ctime>
    
    int main()
    {
    
      struct timespec f,t; // from ~ to
    
      timespec_get(&f, TIME_UTC);// 計測開始時刻
    
      Sleep(3000); //処理
    
      timespec_get(&t, TIME_UTC);// 計測終了時刻
    
      //////////////////////////////////
      // to - from の計算
    
    long nsec; std::int64_t tsec;
    if (f.tv_nsec < t.tv_nsec) { nsec = t.tv_nsec - f.tv_nsec; tsec = t.tv_sec - f.tv_sec; } else {//繰り下がり必要 nsec = 1000000000 + t.tv_nsec - f.tv_nsec; tsec = t.tv_sec - f.tv_sec - 1; } ///////////////////////////////// // 表示 printf("経過時間:%lld.%ld\n", tsec, nsec); getchar(); }

    参考文献

    cppreference.com
    https://ja.cppreference.com/w/c/chrono/timespec_get

    碧色工房
    https://www.mm2d.net/main/prog/c/time-03.html