Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

Android

アニメーションポーズのレンダリングの成功

アニメーションの1ポーズのレンダリングに、ようやく成功した。 colladaファイルからモデルを読み込み、vulkanでレンダリングしている。 何カ月もかかり、本当に長かった。アニメーション用の座標変換などについても調べたので、これから記事にしたい。 それ…

Phoenix 静止状態のレンダリング

Androidに表示した画面 colladaファイルからモデル情報を読み取り、その結果をそのまま表示した図 phoenix 1モデルの権利表記 This model was created by NORBERTO-3D https://sketchfab.com/3d-models/phoenix-bird-844ba0cf144a413ea92c779f18912042 LICEN…

モデルのレンダリング完成(Android + Vulkan + Ray Tracing)

完成図 モデルのレンダリングだけでなく、キューブに反射するモデルも描けているところがray tracingポイントです。 123 前回からの変更点 調べてみると、Android 11からはandroid ndkが提供する画像デコーダライブラリが使える模様。 pngやjpegで描かれるテ…

モデルの描画(Android + Ray Tracing)

モデルのレンダリング 21思ったのと違うが、stbi_loadが使えない影響でstbi_load_from_memoryにしているからだろうか? ただ部位ごとにはtextureで区切れているので、今はこれでよしとしようか。 ガラスで透過した絵が簡単に描けるところもray tracingの強み…

モデルのレンダリング (Vulkan + Ray Tracing)

やりたいこと ray tracingパイプラインでモデルをレンダリングしたい。 モデル自体は描画されるが、うまく色がつかない。 上部のcubesはガラスをイメージし、透過できるようにしている。 モザイクのモデル stb_imageの工夫 pngなどの画像データはstb_imageの…

ガラスキューブをレイトレーシングで

ray tracingでガラスのレンダリング ガラスキューブ1ガラスキューブ2ray tracingの真骨頂といえば、透過と反射だと(個人的には)思っていて、Androidでray tracingするからには、どこまで反射と屈折の回数を増やして計算できるのだろうと思っていた。 図の例…

AndroidでRay Tracingできた

はじめに ついにAndroidでリアルタイムray tracingできる時代が来た!ということでハローワールド的にray tracingで立方体を8つ描いた図がこちら。 白背景に立方体4つをray tracingで描いてみた図スマホは最近手に取れるようになったGalaxy S22を使っています…

Android + VulkanでImguiの導入

出力例 なぜか最初の1frame目だけはimguiの部分がrenderingされていないが、2frame目以降は表示される。 fontが小さすぎて何書いているかわからない部分は今後の改善点。 1frame目1frame目以降 IMGUIの基本 こちらを参照ください。 一言で言えば、C++でGUI環…

popup windowの表示方法

動機 C/C++コード出身の人がndkを用いてandroidでコーディングする際に、追加情報などを画面に表示したいという需要はあると思う。 とりあえずコードがコンパイルできてプログラムが実行できれば、そこからは何とか勉強できる、というのが持論なので、ちょう…

重力センサーの有効化と取得方法

結論 Androidの重力センサーの有効化と値の取得は、公式サンプルコードのままではうまくいかない。 サンプル: native-activity | Android NDK | Android Developers 先に結論を書くと、以下の過程が必要 (※ASensorEventQueue_enableSensor()は必須だが、ASen…

Depth Imageの初期値設定時の注意点

初期値(clear value)より奥のfragmentは描画されないので注意が必要 Depth Value depthの値はVkPipelineDepthStencilStateCreateInfoのminDepthBoundsからmaxDepthBoundsの値に制限される。 Vulkan® 1.3.205 - A Specification (with all registered Vulkan …

Android NDKを用いたC++でのtouch位置取得方法

android_main()でコールバック関数の登録 android_appにinput eventが通知された際に呼び出されるコールバック関数を登録する。 int32_t handle_input(struct android_app* app, AInputEvent* inputEvent) { //define app process } void android_main(struc…

Bufferにデータをコピーする方法について

サンプルコード git hubで公開されている、android + vulkanでのbufferにデータをコピーするの部分について考察してみた。 android-vulkan-tutorials/tutorial05_triangle at master · googlesamples/android-vulkan-tutorials · GitHub サンプルとしては以…

main loopのsynchronization考察

サンプルコード git hubで公開されている、android + vulkanでのsynchronizationの部分について考察してみた。 android-vulkan-tutorials/tutorial05_triangle at master · googlesamples/android-vulkan-tutorials · GitHubmain loopの関数は以下 bool Vulk…

Vulkan Surface作成 on Android

Surfaceとは "Vulkan® 1.2.202 - A Specification (with all registered Vulkan extensions)"内で SurfaceはWSI(Window System Integration)の章の見出しのひとつのWSI Surfaceとして紹介されている。 つまりSurfaceとはVulkanのWindow Systemの扱い方である…

Vulkanプログラムの作成開始

VulkanプログラムをAndroid Studioで作成することを始めてみた。 サンプルコード https://github.com/googlesamples/android-vulkan-tutorials 三角形の表示やテクスチャの使用がチュートリアルとして提供されている。 windowの表示 tutorial4まで進めると、…