numpy で変換行列周りの確認

import numpy as np

def transform(pos):
    world = np.array(
        [
            [1.0, 0.0, 0.0, 0.0],
            [0.0, 1.0, 0.0, 0.0],
            [0.0, 0.0, 1.0, 0.0],
            [1.0, 2.0, 3.0, 1.0]
        ]
    )

    view = np.array(
        [
            [1.0, 0.0, 0.0, 0.0],
            [0.0, 1.0, 0.0, 0.0],
            [0.0, 0.0, 1.0, 0.0],
            [0.0, -1.0, 5.0, 1.0]
        ]
    )

    proj = np.array(
        [
            [0.75, 0.0, 0.0, 0.0],
            [0.0, 1.0, 0.0, 0.0],
            [0.0, 0.0, 1.00010002, 1.0],
            [0.0, 0.0, -0.0100010000, 0.0]
        ]
    )

    viewport = np.array(
        [
            [640.0/2, 0.0, 0.0, 0.0],
            [0.0, -480.0/2, 0.0, 0.0],
            [0.0, 0.0, 1.0, 0.0],
            [640.0/2, 480.0/2, 0.0, 1.0]
        ]
    )    
    
    pos = pos.dot(world)
    pos = pos.dot(view)
    pos = pos.dot(proj)    
    pos = pos.dot(viewport)
    print(pos / pos[3])

    
transform(np.array([-1.0, 1.0, -1.0, 1.0]))
transform(np.array([1.0, -1.0, -1.0, 1.0]))
transform(np.array([-1.0, -1.0, -1.0, 1.0]))

参考

https://docs.microsoft.com/en-us/windows/win32/direct3d9/transforms
https://docs.microsoft.com/en-us/windows/win32/dxtecharts/the-direct3d-transformation-pipeline

https://enginetrouble.net/2016/10/reconstructing-world-position-from-depth-2016.html
https://www.scratchapixel.com/lessons/mathematics-physics-for-computer-graphics/geometry/row-major-vs-column-major-vector?url=mathematics-physics-for-computer-graphics/geometry/row-major-vs-column-major-vector

AWS Lightsail に macOS から SSH 接続と SCP

最初、AWS Lightsail に macOS で ssh-keygen して作成した公開鍵を登録して ssh 接続しようとしたのですが、自分のやり方がおかしかったのか、

Permission denied (publickey)

となってしまい繋がらず。
仕方ないので、デフォルトの公開鍵をダウンロードして使用する。

Lightsail の Account -> Account -> SSH Keys から、default を Download する。

.ssh 以下とかに配置して、download してきた .pem の権限を 600 に変更する。
chmod 600 LightsailDefaultKey-ap-northeast-1.pem

あとは、ssh で接続するだけ。-i で公開鍵を指定するのと、-p のport 番号に注意。
ssh -i ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem ubuntu@xxx.xxx.xxx.xxx -p 22

SCP でファイル転送

scp -i ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem -P 22 /Users/USER/Desktop/notify.py ubuntu@xxx.xxx.xxx.xxx:/home/ubuntu/python

Desktop にある notify.py ファイルを、サーバー上の python フォルダ以下に転送する。

OS のコマンドとか System Call とか

Linux コマンド 一覧表(manページ一覧)
https://kazmax.zpp.jp/cmd/
ライブラリコール、システムコール、コマンドが非常に分かりやすくまとまっています。

標準Cライブラリ
https://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
C/C++ を理解するための大切なことは、標準Cライブラリとシステムコールの違いを理解すること

C++ in Visual Studio
https://docs.microsoft.com/ja-jp/cpp/overview/visual-cpp-in-visual-studio?view=vs-2019
Windows で C++ 開発するときはみておいた方がいい

Tri-planar mapping

Quick Game Art Tips – Unity Triplanar Terrain Shader
https://www.patreon.com/posts/16714688

2DテクスチャをUVを使わずに投影するTri-Planar Texture Mapping
https://qiita.com/edo_m18/items/c8995fe91778895c875e

ARNOLD triplanar
https://docs.arnoldrenderer.com/display/A5NodeRefJPN/triplanar?desktop=true&macroName=multiexcerpt

Projective Texture Mapping
http://www.cse.unsw.edu.au/~cs9018/readings/projective_texture_mapping.pdf

Tutorial 43: Projective Texturing
http://www.rastertek.com/dx11tut43.html

Ubuntu Command 覚え書き

# ファイル検索
locate libc.so

# mac の open コマンド
xdg-open .

# 拡張子無しのファイルを調べる
file tilix

# コマンドの場所を調べる
whereis ls

Ubuntu メモ

# iterm のようなターミナルソフト
Tilinx (apt でインストール可能)

# デスクトップ表示
Control + Command(win) + d

# 複数アプリ切り替え
Option(alt)+tab

# Qt での GUI
https://vitux.com/compiling-your-first-qt-program-in-ubuntu/

# Ubuntu で OpenGL
http://www.codebind.com/linux-tutorials/install-opengl-ubuntu-linux/

GUI アプリ開発の不明点

ubuntu 18.04 でのGUIアプリ開発の手段と動作の仕組みが良くわからない。ubuntu 18.04 のデスクトップ完了は GNOME 3 で、

Houdini ツール系ネタの参考

Houdini Tutorials
https://www.sidefx.com/tutorials/

Game Tool
https://www.sidefx.com/learn/game-tools/

Houdini Game Dev Toolの更新情報
https://support.borndigital.co.jp/hc/ja/articles/360000559302-Houdini-Game-Dev-Tool%E3%81%AE%E6%9B%B4%E6%96%B0%E6%83%85%E5%A0%B1-2019-09-27-

【Houdini】のためのスタンドアローンなツールを作ろう。
https://dftalk.jp/?p=20869
Houdini 15 のため若干古いが参考になります。

Houdini Engine API入門
https://qiita.com/jyouryuusui/items/3d86ab8e69652d5f951c
今の所、日本語で一番詳しい Houdini Engine の説明だと思う。

HOMの紹介
https://www.sidefx.com/ja/docs/houdini/hom/intro.html
ぱっと、Houdini Python にアクセスしたい場合に便利

Numpy での ベクトル処理

import numpy as np

a = np.array([1.0, 2.0, 3.0])
b = np.array([4.0, 5.0, 6.0])

a = a / np.linalg.norm(a)
b = b / np.linalg.norm(b)

np.dot(a, b)
np.cross(a, b)

面法線の求め方

import numpy as np

v0 = np.array([0.0, 0.0, 0.0])
v1 = np.array([0.0, 0.0, 0.0])
v2 = np.array([0.0, 0.0, 0.0])

t0 = v1 - v0
t1 = v2 - v0

n = np.cross(t0, t1)
print(n)

外積はかける順番で結果が異なる(法線の方向が逆を向く)ので注意。

下記記事を参考にさせて頂きました。素晴らしい記事をありがとうございます。
https://deepage.net/features/numpy-dot.html

Matplotlib 覚書

普通に画像を表示させるだけであれば、下記で表示出来る。

import matplotlib.pyplot as plt
plt.imshow(decoded_img[0].reshape(28, 28))

下記の表記でサイズが 20, 5 の新規領域を作り、(2, 10, i+1) で、2行10列ごとにサブプロットで領域を分割している?

n = 10
plt.figure(figsize=(20, 5))
for i in range(n):
    ax = plt.subplot(2, 10, i+1)
    plt.imshow(x_test[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    ax = plt.subplot(2, 10, i+1+n)
    plt.imshow(decoded_img[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
plt.show()

git command 覚書

リモートの branch 情報の取得
git branch -a

ローカルのいらない branch の削除
git branch -D origin/4.17

リモートブランチの取得
git fetch (fetchしないとローカルで branch ができる?)
git checkout -b remotes/origin/4.17

ローカルだけにあるファイル・フォルダを削除
git clean -fd

更新を元に戻す
git checkout .

git clone -b origin/4.17 https://github.com/EpicGames/UnrealEngine.git