需要があるのかどうか全くわかりませんが、タイトルの通り最新のVisual Studio 2019でUE4.27をソースコードからビルドして、パッケージングまでしようとすると、諸々細工が必要でした。ひょっとするとVisua …
[CUDA]カスタムatomicMinで最小値とそのときのindexとを同時に取得する
値や構造体の配列を入力として、それぞれの入力値に対して何らかの計算式などで何かしらの値を求め、その値の最小値(または最大値)と、そのときの配列のindexとをセットで欲しいときがあります。例えば、std::vector …
[UE4][C++]UMGでColor Pickerを活用する
Unreal Engine 4で、ランタイム時にテクスチャやマテリアルの色を自由に指定したいときに、UE4 Editorで採用されているColor Pickerを使いたいと思ったことがある方も少なくないのではないでしょう …
[UE4][ComputeShader][HLSL][C++]Unreal Engine 4で(RW)StructuredBufferを用いたComputeShaderを利用する(その3:実際に用いる)
その1:イントロ、その2:C++側シェーダクラスに続き、今回でようやく完結です。 FGlobalShaderクラスを継承したクラスをどのように呼び出すのかを見ていきましょう。 サンプルソースコード一式をGitHub上で公 …
[UE4][ComputeShader][HLSL][C++]Unreal Engine 4で(RW)StructuredBufferを用いたComputeShaderを利用する(その2:C++側シェーダクラス)
その1:イントロでは文字通りイントロ(と愚痴…)だけになってしまいましたので、その2では具体的な実装を解説します。 1. C++経由で変数をHLSL側に渡す 2. C++側の変数にはFVectorも入れる 3. Stru …
[UE4][ComputeShader][HLSL][C++]Unreal Engine 4で(RW)StructuredBufferを用いたComputeShaderを利用する(その1:イントロ)
UnityではGPGPUをフル活用するためにComputeShaderを用いた美しい可視化事例がたくさんあり、特にIndie Visual LabさんによるUnity Graphics Programming (vol. …
[UE4][HLSL]Custom Expressionsによるポストプロセス基礎の基礎
Unreal Engine 4のポストプロセスは、Blueprintsと同様にノードを組み合わせて作ることが基本です。 ノードを駆使することで色々出来るのですが、マテリアルノードにはFor文が無く、ループを回すことが出来 …
[C++][UE4] std::string -> floatへの変換をtry / catch無しで行う
std::string文字列がfloatになり得るかどうかをチェックしつつfloatへの変換を行う場合、通常はstd::stofを用いて
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// Copyright SCIEMENT, Inc. // by Hirofumi Seo, M.D., CEO & President #include <string> #include <iostream> float stofTryCacth(const std::string& a, bool* is_float) { float result = 0.0f; try { result = std::stof(a); } catch (const std::invalid_argument&) { std::cout << "Error: The string '" << a << "' is not float." << std::endl; *is_float = false; return result; } catch (const std::out_of_range&) { std::cout << "Error: The string '" << a << "' is float but out of range." << std::endl; *is_float = false; return result; } *is_float = true; std::cout << "'" << a << "' -> " << result << std::endl; return result; } int main() { float result; bool is_float; result = stofTryCacth("3.14", &is_float); // '3.14' -> 3.14 result = stofTryCacth(" 3.14", &is_float); // ' 3.14' -> 3.14 result = stofTryCacth("3.14 ", &is_float); // '3.14 ' -> 3.14 result = stofTryCacth(" 3.14 ", &is_float); // ' 3.14 ' -> 3.14 result = stofTryCacth("3.14abc", &is_float); // '3.14abc' -> 3.14 result = stofTryCacth("abc3.14", &is_float); // Error: The string 'abc3.14' is not float. result = stofTryCacth("abc", &is_float); // Error: The string 'abc' is not float. result = stofTryCacth("3.14e2", &is_float); // '3.14e2' -> 314 result = stofTryCacth("3.14e-2", &is_float); // '3.14e-2' -> 0.0314 result = stofTryCacth("314.e-2", &is_float); // '314.e-2' -> 3.14 result = stofTryCacth(".314e-2", &is_float); // '.314e-2' -> 0.00314 result = stofTryCacth("3.14e100", &is_float); // Error: The string '3.14e100' is float but out of range. result = stofTryCacth("-3.14e100", &is_float); // Error: The string '-3.14e100' is float but out of range. return 0; } |
のように行うかと …
[C++][CUDA][Thrust]続・単純な二値化処理を4通りの並列化手法で比較してみる
前回、単純な二値化処理を4通りの並列化手法で比較しました。 今回はCUDA関連でもう少し検証してみます。 CUDAのプログラミングで最初に気にするところと言えば、やはりcudaMalloc, cudaFreeのメモリ管理 …
[C++][CUDA][PPL][AMP]単純な二値化処理を4通りの並列化手法で比較してみる
画像処理の分野において、各ピクセル(空間の場合は各ボクセル)の値を0か1かのどちらかの値に分ける二値化処理が頻繁に行われます。 何を以て0または1とするかがポイントなわけですが、ここでは超簡単に、閾値(threshold …