OpenGL/Vulkanスレ Part22©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
クロスプラットフォームの3D API OpenGL 及び次世代のローレベルAPI Vulkan に関する話題を扱うスレッド。
現在の最新バージョンは4.5
https://www.opengl.org/
https://www.khronos.org/vulkan
== OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glx: XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut: クロスプラットフォームなツールキット。でもさすがに古くさい
・GLFW より新しいマルチプラットフォームなツールキット
・glew: これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo: 自分の使っているカードのOpenGLの機能が全てリストアップされる。
・OpenTK C#からOpenGLを簡単に使えるようになる。VC#の強力なIntellisenseとあわせてサクサク開発可能。
・OpenSceneGraph: OpenGL を高度に抽象化し、利便性を高めたラッパー。C++ ライブラリ
・OpenGL Mathematics (GLM): GLSL 文法ライクの C++ 数学ライブラリ
== チュートリアルサイト ==
床井研究室: http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html
OpenGL de プログラミング: http://wiki.livedoor.jp/mikk_ni3_92/
NeHe: http://nehe.gamedev.net/
Tutorials for OpenGL 3.3 and later http://www.opengl-tutorial.org/
Learning Modern 3D Graphics Programming http://www.arcsynthesis.org/gltut/
== 前スレ ==
OpenGLスレ Part21
http://peace.2ch.net/test/read.cgi/tech/1409581958/
== 関連スレ ==
【O3D】HTML5用 3D API WebGL 【Canvas:3D】
http://peace.2ch.net/test/read.cgi/tech/1308761577/
OpenGL 2.0 専用スレ
http://peace.2ch.net/test/read.cgi/tech/1126268759/ 泥はとっくに対応済みなような。7以上だけど。
自分の端末で動かしたから間違いない。 あんま大したネタじゃないが、D3D12とvulkanに特徴的なのは
・DescripterSet
・パイプラインハンドル
・テクスチャロード手続き
・コマンドリスト
かな
一つを使い回さず、目的別に個別に作れと言われている気がした。
D3D9、11、GL、GLESと使ってきたけど、バルカンは使いやすく、GPUを理解しやすい。 ほぉ場合によってはMetalを他所のプラットホームに展開して世界征服なんてのも面白いと思うがそうきたか これ基本Metal APIへの変換レイヤーなだけで別にAppleは何もしてねえのでは Appleは何もしてないぞ
単にMetalのラッパーだな
しかしOpenGL使うよりはCPU負荷は減ると書いてある
知りたいのは直接Metalを使った場合よりどれぐらいオーバーヘッドがあるかだけど分からん バルカンに字形描画はない。
そこをどう折り合うのだろう Vulkanにフォント描画が無ければ実装しないだけじゃないか?
ゲームは普通APIに依存しない形でフォント描画を実装してると思うからそれほど重要ではない気がする ゲーム、動画再生のみバルカン
OS内部はESとvkのデゥアルスタックか。 Vulkanを使ってみたいけど、Amazonで本を探しても英語の本しか出てこないし、その英語の本もレビューを見ると今一だし、どうしたもんか... Vulkanは公式のC++ラッパーが有るのが助かる
これから日本語の書籍を書こうと思っている人は絶対C++11前提で書いてほしい
こんなとこで言っても無駄だろうが… いままで公式の出版物は良書だったからな今後に期待だね でもバルカン理解するには、GPUのアーキテクチャというか、描画パイプラインの知識が大前提な気がする。
簡単なフレームワークを書いたが、理解しにくいのは、
シェーダにポインタを与えるDscripterset
テクスチャロード
まんまパイプラインと名づけられたパイプラインハンドル周辺
テクスチャなんかは、何故、一度ステージにいれてからコマンド投げて転送するのか?
フォーマットをレイアウトする為だが、他のAPIだと透過的にできたことをやらされるので、ディスに使われると思う。 >>810
まあ、そのへんは慣れなんじゃないか?
OpenGL3.0系に初めて触ったとき、「これ使うのにソフトウェアでレンダリングエンジン書ける知識が必要じゃねえか」と衝撃を覚えたし openGLをなに入れればいいのかわからないよ〜、openGLって名前じゃないのもあるからわけわからないよ〜 そのレベルならJuliaとかPythonからglfwを使うのがよい C言語は知識あるからC言語でopenGL使うにはどうすればいいかなって聞こうと思ってたんだよ 諸事情でopenGL触らないといけなくなったんだけど全然分からない……
最終的にwindowsアプリ作るところまで持ってかなきゃいけないんだけど1週間位あーでもないこーでもないやってようやくウインドウに立体を表示させられるくらい
床井先生のところ参考にしたりしてるけど全然だめ。難しすぎないこれ。泣きそう そもそも1週間でマスターできると思ってたのかよ
コンピュータグラフィック舐めすぎだろ ごめん。マスターなんておこがましいことは考えてない。
ただこれまでの課題はそこそこ順調だったもんで急ブレーキになったもんだから
っていうかwindowsプログラミングの難しさもやっぱあんのかなこれ……openglの参考書写経してるときはほうほうなんて思いながらやれたりもするのに 今時のOpenGLを裸で叩いて立体の表示まで行ったのなら、あとはどうとでもなるような気がするが…
ワールド座標から同次行列使ってスクリーン座標にできてるし、シェーダーも動いてるってことだろ? OpenGLで2Dをするか3Dをするかで必要な数学の知識は変わってくる GLで混乱して挫折するのは、
頂点・索引配列絡みとカレントじゃないかな
プロセッサから毎回頂点要素(座標、法線なんか)を送り込む初期のGL方式が未だにWebには最新情報とアフィリエイトされているし。
Google先生もこれをオススメするしね。
あとはWebGLが曲者。
発展途上のAPIはDXのように丸ごと差し替えるのが正解なんだろう。
混乱のもと。 そうだ、ちらうら。
OpenGLとVulkanはデバイス座標系における正数方向の向きが違う。
なんとDirect3Dとも異なる第三の座標系
まあ射影行列の符号が変わるだけだが れんとうすまん。
Yを↓にしたのは、恐らくは、加速度センサーの符号を意識したIoT機器配慮の設計だと理解している。実際の趣旨はしらん。 >>826
主な理由は普通にコンピュータで扱う一般的な座標にあわせただけでしょ PSのコントローラーを箱で使えた時にPSの時と方向が逆転するって昔きたわ >>823
WebGLはまんまOpenGL ES2.0だし絶対に必要な環境
JavaScriptと若干のWebの知識が必要だけど1から3Dの勉強するには最も敷居が低い環境と言える >>826
しかも最後まで右手系のままで一貫してる
だからといって何かメリットがあるわけでもないだろうが 昔作ったopenGLのGLAUXで作ったコードはglutに書き換えた方が良い?今後参考にするためにもそっちの方が良い? >>821
同次行列って何?シェーダーってなんだっけ?レベルなのでお察しください
ファイルから座標読み込んできっちり画面内に収まるように表示させろとか、視点を3次元で回転させるとか、しかもそれをマウスで出来るようにしろとか、オブジェクト選択させろとか……
そもそもMFCすらよく分かんないからもう OpenGLとか低レベルのことは忘れて、ライブラリを使うべき 開発環境準備するの解らなくて、C言語でopenGL使ってしょぼいシューティングゲーム作ろうと思ってるんだけどなに入れた方が良い?
glutだけでいいの?>>1の全部入れておいた方が良い? >>823
さすがにVBOが主流になってから7-8年は経ってるけど、考えてみるとOpenGL3以降に対応した赤本ってまだ日本語版ないんだっけ?
というか、今のはどういう記述になってるんだろう
シェーダー前提の記述になると、三角形を表示するまでがけっこう遠いよな でかい本屋行ったり古本屋みたりして思ったんだけどさopenglって優しい参考書無いの辛い
例えばjavaとかcとかだったらそれこそ具体例なり比喩なりイラストなり駆使してステップバイステップで進めていけるような本いくらでもあるじゃない
もういきなり変換だのなんだの言われても何やってんのかまずそこから丁寧に説明しろやって思う
行列の話で込み入ったことになるというならもっとイメージをつかませてくれるというか…… >>838
日本語は少ないと感じた。
おれはバルカンで0から描画だけは、なんちゃってフレームワークを書き上げたから、GLには戻りたくない。
ジオメトリファイルを読み込むところからスキンメッシュ処理まではバルカンでできる。
今後の課題は、輪郭線の強調にタイムラインアニメーション。
バルカンは使いやすい。分かりやすい。 見ていてわかるが、ニーアや15のグラフィックス機能は、やっぱり最高峰と言われるだけある。
やはり、その道のプロは違う。
どんだけ血反吐はいたんだろう、と。 積み上げれば良いだけで、血反吐を吐く必要なんて無い。 FF15はともかく、ニーアは低予算にあえぎながらあれだけのものを作ったのがすごい FF15ってopenGLなの?全然か書かれてないしどうやってみんなわかるんだ 取り敢えず本屋行ってゲーム数学みたいな本を一冊買って読め
話はそれからだ
3DやりたいからっていきなりOpenGLのAPIを使いはじめても遠回り
ここの初心者の質問見てるとつくづくそう思う >>843
PS4は専用の非公開APIで箱はDirectX12でしょ
OpenGLは売りもんのゲームじゃほぼ使われてないでしょ
スマホだとほぼ全部GLESなはず openGLはグラフィックドライバーに入ってて補助・拡張ライブラリを追加して入れないともっと手軽に作れないって理解で合ってる? OpenGLはグラボ叩くためのライブラリだから、ゲームループとかWindow周りの処理とかイベント処理は自前で実装するか別ライブラリのお世話になるしかないね GLもメタルもバルカンもd3dもゲームコントローラやキーボード、マウス入力、
OSウインドウの移動もファイルの読み書きも、サウンド再生も、動画のデコードも、
セーブデータの暗号化もサポート外だしな。
配色デザインもしてくれないし、メッシュ、ジオメトリの生成もしないし、2Bを笑顔にしてもくれないし、声もだせないし、スキンメッシュも簡単にできるAPIなんかない。
可愛いキャラを作ってもくれない。
スカートの布を綺麗に捲ってもくれません。 GLで作られたゲームはMinecraftとDoomぐらいしか思いつかないや
ニーアとかFFもwindowsだとDirectXだしpsだと別のapiだろうし スマホ向けケームはほとんどGLだったんじゃね?
今はVulkanとかMetalかもしれんけど New SDK released for Vulkan 1.1!
Please note --- this new SDK supports Vulkan 1.1.70, and is backward-compatible with Vulkan 1.0.70. 動かせないコードからどの拡張ライブラリ入れれば動かせるってことはわかる? glulookatのパラメータいじくって視点動かそうかと思ってるんだけど、最後の3引数の上方向ってどうやって決めればええのか教えてくれんか
例えば原点中心、半径1の球を(0, 0, 2)から見てるとするじゃない。そうすると当然glulookat(0, 0, 2, 0, 0, 0, 0, 1, 0)になるじゃない
でもこれで仮に視点をX軸中心に45度回転させたとして、(0, √2、√2)から原点を眺めるわけだけどこの場合上ってどう決めればいいんかな
他にも90度だったらようは真下向くことになるのに上方向(0, 1, 0)じゃないよなとか
基本的な質問で悪いんだが色々調べてもわからんかったから誰か頼む >>854
Please noteってRelease noteの間違いか? >>856
視線ベクトル用の変換行列で
上ベクトルを変換させれば良いだけ
カメラのパラメータとして
視線ベクトルを持たせるんではなく
姿勢行列(横、上、前)を持たせるとわかりやすい >>856
ビュー行列は、カメラ設置点(ワールド座標系)を原点とした座標系に頂点を変換する作用を持つ。
同時に天地を決定させる。
lookat()の中では、上ベクトル(ワールド座標系)を注視点ベクトルとの外積(法線)を取って、それを三つの「軸」を決めている。
長くなったが、ワールド座標系でみて、上の向きとしたいベクトルを与えればいい。
厳密には、上ベクトルに与えるベクトルが注視点に向けて垂直に向けるべきだが、あんま気にせずともよい。
真面目に計算すると酔う絵になる。 visualstudio2015でglut32.libが開けないんだけど
スペックは
osWindows8
調べたけど全然わからないよ、助けてくれ〜 1>------ ビルド開始: プロジェクト:ConsoleApplication3, 構成:Debug x64 ------
1>LINK : fatal error LNK1104: ファイル 'glut32.lib' を開くことができません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
こんなの出た
リンカーでもパス通してるんだけど 1からコンソールアプリ作り直してやったけどやっぱエラーが出るな
1>------ ビルド開始: プロジェクト:ConsoleApplication1, 構成:Debug x64 ------
1> stdafx.cpp
1> ConsoleApplication1.cpp
1>c:\k013a2065\consoleapplication1\consoleapplication1\consoleapplication1.cpp(10): error C2664: 'void glutInit_ATEXIT_HACK(int *,char **)': 引数 2 を '_TCHAR *[]' から 'char **' へ変換できません。
1> c:\k013a2065\consoleapplication1\consoleapplication1\consoleapplication1.cpp(10): note: 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\k013a2065\consoleapplication1\consoleapplication1\consoleapplication1.cpp(11): error C2664: 'int glutCreateWindow_ATEXIT_HACK(const char *)': 引数 1 を '_TCHAR *' から 'const char *' へ変換できません。
1> c:\k013a2065\consoleapplication1\consoleapplication1\consoleapplication1.cpp(11): note: 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== そういう基本でこける奴は
GLじゃなくてDirect3D使った方が良いと思うぞ
APIとしての難易度は一緒だろうが
Direct3Dの方が情報が遥に得やすいだろうからな >>886
これ解決したわ、freeglutのglut.h freeglut.h freeglut_std.h freeglut_ext.h三つの置き場所8.0に入れたら動いたわ
win8でやってるからWindows Kits/8.0の方に入れなきゃダメだったみたいだ >>857->>858 >>861->>863
ありがとう。正直あまり理解できないけど参考にして頑張ってみる。
そもそも座標系だとか視点だとかねそこら辺で行列云々とかもうちんぷんかんぷんなんだよね……
いやほら1次変換とかで座標を動かすのに行列掛け算するのは知ってるけど、視点だの投影だのとどう行列が絡むんだよみたいな >>873
GPUはデバイス座標系で点を打つデバイスである。
だから、まずは行列を忘れることから始めることをオススメする。
ここを押さえないと、マジックやブラックボックスな理解にしかたどり着かない。 たかが点を打つために行列の使用を強制されるんでしょ 別に行列じゃなくてもいいよ
連立方程式で線形代数計算してるだけだし なんちゃら座標とかなんちゃら行列とか、計算しやすいから使ってるだけで
最終的にxyzが-1〜+1の範囲に収まってる点だけ描画される
直線の中間とか三角形の内部とかはいい感じに計算してくれる
と、こんな認識 3D空間の(x,y,z) → 2D画面の(X,Y) >>877
その通りだね。行列は計算式をコンパクトにまとめた様式に過ぎない。
計算機時代に適した計算方法。
手計算の方が計算回数は少なく、
行列は無駄な計算(結果が計算前と変わらない成分)が含まれやすい。 4x4の同時行列を知って感動したのは、三角関数なしに座標変換できることだったな
最初は狐につままれたような気分だった あーもー座標系ってのがわかんない。座標は座標で一つじゃないか。(0,0,0)は原点だし、(1,0,0)はそこからx軸方向に1進んだとこ。それだけじゃないか……
その座標上の点を動かすのに行列を動かすのは分かる。でも座標が動かない視点移動に行列だのもうちんぷんかんぷん。俺こんな頭悪かったかなぁ。C++やらjavaやらの勉強してるときにこんな詰まったことないよ
>>878
その-1〜+1ってのが全然分かんないんだよね。どっからでてきたその正方形ってなってる
表示されるのは長方形だし、座標はてんでばらばらな位置にあるしわけがわからない -1〜+1ってのはただの取り決めだろ
計算上も都合がいいし、大きすぎても小さすぎても誤差が発生する浮動小数点数を扱う上でも都合がいい
最終的には表示デバイスの個々のピクセルへ反映されるわけだけれども だから844で言ってるけどゲーム数学の本を一冊読め
それで理解できないなら3Dは諦めて2Dに専念しろ >>881
手計算ってのはスカラーでの計算の事を言ってるんだろうけど、スカラーに分解した方が速いなんて事は座標変換に対してはまず有り得ないと言える
それとも本当に手で計算する事を言っているのか… >>886
言葉のあや。
座標変換だけなら4回は変化のない計算が含まれたり、移動だけなら3回。
しかし行列だと必ず16回計算する。
それをマルチコアとストリームで最適化するから見えない、という話。 >>883
デバイス座標系は「比の世界」
ラスタライザがビューポートとレンダリングターゲットのサイズを分けることにも機能がある。おれは便利に使っている。
解ると流石はトップチームの設計と感動するし。 まあ行列の乗算はSIMDと相性が良いし
単純に16回とは言い切れない部分もある >>887
つうか…積和演算又は内積を100回勉強してから出直してこい
「手計算」で16回な訳ないだろ
掛け算足し算合わせて64回だよ
SIMDだと4回で済む >>887
一部同意だけど
PとかMとかRの行列があって順に座標ベクトルに掛けるのが決まってるなら
あらかじめ行列の積をもって置いて計算量減らしたりは出来る
手計算でも減るけどこの辺はごちゃごちゃする気がするんだ >>891
ID違うだろうから今更だけど、計算回数の違いは、
偏に「アルゴリズム(計算式)の形に起因する計算回数の違い」に依存する。
つまり、アルゴリズムがループかシーケンスかの違いね。
この当たりって専門学校でも普通(一般教養の観点で基礎的)に教える分野だと思ったけど違うのかな。
演算子の数で計算量は決定しない。 演算子は最適化できる。
計算量を決定する因子は、行列の列数と行数であり、その数で決定される。
そういう認識から、16回って書いたんだけど。 >>892
だから何で16回なんだよ…
足し算は無視かよ
足し算も含めて64回だよ 行列演算って並列処理向きだよな
行と列の数が決まってて、それぞれを掛けて足すだけだし、個々の要素が他に影響も与えないから先読みもできる
SIMDとかそういう感じなんだろうけど、1っ個ずつ掛け算して足してって逐次処理でやってるわけじゃないからね
個々の要素を並列でガッと掛け算してガッと足し算するだけだから2ステップで終わる感じ?
専用プロセッサで並列処理してるから行列の要素の数とかほとんど影響なんじゃね?
まぁ、GPUじゃなくてCPU側で計算させてる所はそうじゃないだろうけど ■ このスレッドは過去ログ倉庫に格納されています