Windows上でGPU処理を検討する際の実装方針及び見積もりにつきまして

投稿者: Anonymous Windows上でクロマキー処理やαブレンディングの処理を行った上で4K,60Pで出力を行いたいと思っています。 そこで、それらをGPUで実装する上で下記の3点についてアドバイスいただきたいです。 1) DirectXとOpenGLのメリット・デメリットについて クロマキー処理やαブレンディング処理を行うことを調べていると、DirectXやOpenGLを使う情報を見るのですが、 それらのメリット・デメリットはどのような点にありますでしょうか? OpenGLは、マルチプラットフォームがメリットのような記載も見かけるのですが、 Direct XがLinuxに移植されるような記事もあり、現状のメリットとデメリットについて教えていただければと思っています。 「WSL 2」に「DirectX」が追加 ~将来的にはLinux GUIアプリへの対応も https://forest.watch.impress.co.jp/docs/news/1253524.html 2) 必要なGPUの見積もりについて やりたいこととしては、2次元のクロマキー処理やαブレンディングのみなので、GPUの処理負荷はそこまで高くないのでは と考えているのですが、このような場合の見積もりはどのようにすればよいのでしょうか? 3) DirectXのバージョンにつきまして DirectXにはバージョンがいろいろありDirectX 11.3/11.4はDirectX 12と並行してアップデートが継続されているようなのですが、3D処理を行わないαブレンディング処理の場合、どのバージョンを使用するのが良いのでしょうか? https://ja.wikipedia.org/wiki/Microsoft_DirectX 一方で、従来の手厚い高レベルレイヤーであるDirectX 11にも、DirectX 12で導入された新機能の一部が盛り込まれる形で、DirectX 11.3/11.4のようにDirectX 12と平行してアップデートが継続されている。 解決 根本的な認識が違うと思います。 やりたいこととしては、2次元のクロマキー処理やαブレンディングのみ と言うことはありえなくて、処理対象の映像についての検討が漏れています。 4K,60Pで出力で行いたい ということは静止画ですらなく、連続する映像、動画などではありませんか? その処理の方が重要です。圧縮されていればデコード処理が必要ですし、無圧縮なら膨大なデータ量を安定的に処理する必要があります。 回答者: Anonymous

OpenGLで葉っぱの3Dモデリングをする手順

投稿者: Anonymous 大学の課題で、こちらの論文を元に葉っぱの葉脈を描画するということをしたいのですがつまづいております http://algorithmicbotany.org/papers/venation.sig2005.pdf まずは葉っぱの3Dモデリングを完成させてから、葉脈をその上で描画するという手順で考えているのですが、このアプローチは正しいでしょうか? また、OpenGLはド素人ですので、何から始めていいやら分かりません。 抽象的な質問で申し訳ありませんが、3Dモデリングするにあたってアドバイスや、参考になるサイト、書籍などありましたら教えてください。 解決 論文はざっと見ただけですが、平面上の話ですよね? でしたら3Dモデルはひとまず忘れて、平面上に葉脈のパターンを作るのが先決だと思いますがいかがでしょう。論文のFig.9やFig.13のような画を描くのを目標にします。 それだけなら、OpenGLは難しいことを考えずに単に「2D平面に座標を指定して点や線を描けるもの」だと思っておけば良いです。画を出すための「オマジナイ」が多少ありますが、座標を動かさないのなら適当な入門書のサンプルを参考にして描画部分だけ変えればいけます。例えばOpenGL Programming GuideのExample 1-1が2Dの正方形を描いているので、まずそれを動かしてから、glBeginとglEndの間を適当に変えてゆきます。後は2D平面で正しい座標を計算できさえすれば画が出てくるのでOpenGLのことは忘れても構いません。(カメラを動かしたりすると、ちょっとした計算間違いで画が出てこなくて最初のうちは悩むんですが)。 葉脈の画が2Dで描けたら、それをテクスチャとして取得して3D空間に配置したポリゴンに貼り込むことになります。でも課題の主題はそれ以前のところにあるような印象を受けますね。 回答者: Anonymous

OpenCVで画像を表示しようとしても左下4分の1に領域しか描画されない

投稿者: Anonymous http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20140725 http://13mzawa2.hateblo.jp/entry/2016/08/04/210552 上記のページを参考に,OpenCVで読み込んだカメラ画像をOpenGLを使って描画しようとしています.OpenGLによる描画自体は成功するのですが,取得される画像サイズと同じ大きさのウィンドウを用意しているのにも関わらず,左下4分の1の領域にしか描画されません. OpenCVでそのまま描画するのと比較すると,OpenGLは4分の1にリサイズして左下に貼り付けているような形になっています. これをOpenGLで描画してもウィンドウいっぱいに表示されるようにしたいのですが,何が原因かわからず行き詰まっています. OpenGLで描画したウィンドウをMacbook PROに接続したディスプレイに移動させると,ウィンドウいっぱいに表示されたりするので,OpenGLのウィンドウの設定などではなく,描画の設定の問題なのだと思うのですが...(フラグメントシェーダとかでしょうか?) よろしくお願いします. PC: Macbook PRO OS: macOS 10.13.2 Xcode: 9.4 OpenCV: 3.3 OpenGL: 4.1 GLFW: 3.3 GLSL: 4.1 (ページのコードのままなので,使用しているのは3.3だと思います) 解決 上の回答が長くなってきているので、新しく回答を作成させていただきました。 GLImage.hを以下のように修正してください。 これで行けるはずです。 こちらでも同様の環境を作って、以下のコードでうまく表示できることを確認しました。 画面上に表示している板にちゃんとテクスチャUV座標を指定して描画させています。 // // OpenGLHeader.h // PerceptualProjection // // Created by Ryo Akiyama on 2018/09/06. // Copyright © 2018年 Ryo Akiyama. All rights reserved.…(Continue Reading)

GLKTextureLoader.textureでエラーが発生する

投稿者: Anonymous GLKTextureLoader.textureでnullが帰って来てエラーになります。 どのようにして取得すれば良いでしょうか? エラーメッセージ Error Domain=GLKTextureLoaderErrorDomain Code=12 “(null)” UserInfo={GLKTextureLoaderErrorKey=Image decoding failed} コード import Cocoa import CoreImage import GLKit func toCGImage(image: NSImage) -> CGImage?{ var imageRect:CGRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height) let aCGImage = image.cgImage(forProposedRect: &imageRect, context: nil, hints: nil) return aCGImage } let simpleattr: [NSOpenGLPixelFormatAttribute] = [ NSOpenGLPixelFormatAttribute(NSOpenGLPFADoubleBuffer), NSOpenGLPixelFormatAttribute(NSOpenGLPFAAccelerated), NSOpenGLPixelFormatAttribute(0)…(Continue Reading)

透視射形行列のどこが間違えているのか知りたい

投稿者: user36373 質問な内容 提示画像の最後の行ですがZ軸の値がマイナスになってしまうのですがこれは一番怪しい透視射形行列を間違えたものだと考えるのが一番正しいと思うのですが何を間違えたのでしょうか? 提示コードと画像について まずスケール、回転、平行移動をしてそこから透視射形行列を使って画面に描画するということをしているコードのGLSLではないCPU計算のコードを作って実証しています。最後のint main();関数の最後ですコメント///Mは提示コードのシェーダーMに相当する部分のCPU実装コードです。提示画像は最後の出力結果です。 試したことやったこと 行列コードを確認 行列の掛け算バグを確認 参考サイト: https://tokoik.github.io/GLFWdraft.pdf (163ページ) Github: https://github.com/Shigurechan/project2 #version 400 //頂点シェーダー in vec3 position;//頂点座標 uniform mat4 scale;//スケール行列 uniform mat4 rotate;//回転行列 uniform mat4 move;//平行移動行列 uniform mat4 MP; out vec4 mt; void main() { vec4 t = vec4(position,1.0); mat4 M = mat4(scale * rotate * move); //gl_Position = vec4(MP *…(Continue Reading)

YUVのデータをWindowsで表示する方法につきまして

投稿者: Anonymous 下記のGiGEカメラから取得した映像(4504×4504, 60fps, YUV422)をWindows10上で低遅延で描画したいと考えています。 https://www.argocorp.com/cam/25GigE/EVT/HB-20000-SB.html 解像度が4504×4504,フレームレートが60fpsなので処理負荷が高くならないか心配しているのですが、WindowsのどのAPIを使用するのが良いかアドバイスをいただけますでしょうか? 軽く調べただけでもいろいろならAPIやライブラリが出てくるのですが、上記の目的を達成する為に 適切なライブラリがどれであるかアドバイスいただけたらと思います。 よろしくお願いいたします。 DirectDraw DirectShow OpenCV OpenGL Openframeworks 解決 リストにないものでMedia Foundationという選択肢もあります。これはDirectShowの後継で、Windows Media Playerのメディア制御部分を独立させたものとなります。Media Sourceを実装すればあとはVideo Playbackできるようになるかな、とか。 (デバイスドライバがビデオキャプチャデバイスを実現してくれていれば、Media Sourceも自動的に用意されるんですが、その辺りはよくわかりません) 回答者: Anonymous

openGLでモデルを描画する方法。

投稿者: user42117 提示コードはモデルデータの.objファイルですが頂点数が足りないため正常に立方体が描画出来ません。**そもそもoepnglでどう作成されたモデルをインポートするべきなのでしょうか?**ブレンダーで作成しましたが.objファイルの構造がおかしいためちょっとやり方が違うものと推測出来ます。 # Blender v2.91.0 OBJ File: ” # www.blender.org mtllib Cube.mtl o Cube v 1.000000 1.000000 -1.000000 v 1.000000 -1.000000 -1.000000 v 1.000000 1.000000 1.000000 v 1.000000 -1.000000 1.000000 v -1.000000 1.000000 -1.000000 v -1.000000 -1.000000 -1.000000 v -1.000000 1.000000 1.000000 v -1.000000 -1.000000 1.000000 vt 0.625000 0.500000 vt 0.875000 0.500000 vt 0.875000…(Continue Reading)

glBufferData();の第三引数にstd::vector型を正常に渡す方法が知りたい。

投稿者: user42117 提示コードですが。提示コードが多すぎるのでほとんど省略しています。本来コンストラクタでは出来ません。 提示コードの///描画部ですが。vertex変数を構造体ではなくstd::vecotr<>型で頂点属性を設定すると表示がおかしくなります。構造体型の配列で行うと正常に描画されるので、std::vecter<>型を使う場合glbufferData();関数の第三引数をどうやって渡したらいいでしょうか? 描画を別のクラスで作る場合コンストラクタで頂点情報を送りたいのですが、その場合数が毎回異なるためstd::vecotr<>型を利用したです。 //コンストラクタ Game::Game() { mIsRunLoop = true; keyMode = KeyState::Rotate; // getchar(); //回転 move_rotate.x = 0; move_rotate.y = 0; move_rotate.z = 0; //平行移動 move_transform.x = 0; move_transform.y = 0; move_transform.z = -2; //頂点属性を設定 //頂点属性を設定 //頂点バッファー // Game::VertexAttribute vertex[8]; std::vector<Game::VertexAttribute> vertex; vertex.push_back(VertexAttribute{ -1,1,0 }); vertex.push_back(VertexAttribute{ -1,-1,0 }); vertex.push_back(VertexAttribute{ 1,-1,0 }); vertex.push_back(VertexAttribute{ 1,1,0…(Continue Reading)

背景を透過する不定形なGUIの描画について(Windowsのイルカみたいな)

投稿者: Anonymous 背景を透過し、かつ不定形なGUIを描画する方法について質問です。 行いたいこと : Windowsのイルカや、PythonのAnacondaの起動画面のようにウィンドウを持たず、かつ不定形なGUIをLinux上で作成したい 分からないこと: そもそもLinux上で可能なのか、またどのようなライブラリで実現できるのか また、十分条件ですがOpenGLで3D描画をできるとなお良いです。 何かご存知の方、ご回答いただけるとありがたいです。 解決 JavaだとJava7以降は単独でできるようです。 Java SE 7: 非矩形ウィンドウと半透明ウィンドウのさらなる応用 YouTube/ニコニコ動画で最小限の表示の仕組みを解説しているものがあります。 【Java】デスクトップマスコットをなるべく簡単に【プログラミング】YouTube / 同ニコニコ動画 項目をまとめると以下になると考えられます。 これはJavaに限らず、どの言語やライブラリでも同じでしょう。 タイトルバー等装飾の無い全透過のフレームを用意する。 画像を表示するパネルを用意する。 透過チャンネルを持つ画像データを用意してパネルに表示する。  Officeアシスタントのカイル君のようにアニメーションに見せたい場合、大きなサイズの画像の中に升目上に動きの各フレームを並べて、必要に応じて実際の表示部分を変えることにより、3Dで動いているように見せることが可能。  ただし、実際のカイル君がどう描画されているかは知りませんが 画像の移動・拡大/縮小・メニュー・UIなどは自分で実装する。(少なくともマウス/キーボードのトリガ処理は必要) アニメーションは無いですが、UIも含めたもう少し詳しい例が以下になります。 主な説明はProcessingという言語のものですが、Javaのソースも掲載されています。 非矩形ウィンドウを表示するには Simple DirectMedia Layer という OpenGL にかぶせて使うライブラリがあって、クロスプラットフォームで使えるそうです。 紬ちゃんマスコット SDL2.0編 / SDL2で非矩形の画像ビューアを作成 / D言語+SDL2で非矩形ウィンドウを作成する SDL2 and 3D Rendering / Is 3d game development advantageous/possible in SDL2? OpenGL系ではこんな記事もあります。…(Continue Reading)