変換行列の受け渡し頂点シェーダへの変換行列の受け渡しの方法は二つ。頂点0から始まります。&rarr;1つの三角形です。gl_ModelViewMatrixやgl_ProjectionMatrixでOpenGLの行列にアクセス出来る。これらはglUniformMatrix4fvで設定する必要が無い。自分のプログラム内で行列を用意してglUniformMatrix4fvでGPUへ転送する。Matrixを計算するコードを自前で書くのも間抜けなのでhttps://www.khronos.org/opengl/wiki/GluPerspective_codeなどをコピペすると良い。glEndが大好きなのだけれどそろそろモダンOpenGLにも触っておかないとまずいということでVBOと頂点シェーダとフラグメントシェーダの基礎を触っておく。http://www.opengl-tutorial.org/jp/beginners-tutorials/tutorial-2-the-first-triangle/ややこしいのは、VBO(=頂点バッファ)のコードと頂点シェーダ関連コードが、直接的な関連性が低いのに密接に絡み合っているところ。CPU側ソースコードglut初期化コードglutを使わないのなら勿論必要ない。glewを使うのでその初期化が必要。余談だけれどもgl.hを使うのならinclude順はglew.h→gl.hとなる。windowsではgl.hの前にwindows.hを入れなければならない。<gl/GL.h>のような順番になる。この例ではglutだけなのでgl.hは自分でincludeしない。glut.hの中でgl.hがincludeされているので、順番はglew.h→glut.hでなければならない。glew.hと言われる。link_program();}頂点データとバッファの作成コード今までglBegin~glEndで囲んでいたデータを配列として作成して先にGPUへ転送しておく。GL_STATIC_DRAW);}頂点シェーダの準備クソ長く見えるがやっていることは1glCreateShaderでシェーダのIDを作成2glShaderSourceでシェーダのソースコードをシェーダに教える3glCompileShaderでシェーダをコンパイル4glGetShaderivでシェーダのコンパイルに成功したかを確認5glGetShaderInfoLogでエラー内容を確認だけで本質的には十行程度。ファイル読み込み部がコードの長さを異常に長くみせている。本質とは直接関係ないのに。ファイルから頂点シェーダを読み込みます。OpenGL命令は一つも無い。頂点シェーダをコンパイルします。頂点シェーダをチェックします。}}あとエラー処理が行数を嵩張らせている。普通(?)OpenGLで描画とかするときに、エラーを無視してもなんとなく上手く動いているように見えることも多いけれど、シェーダのコンパイルをする以上、コンパイルエラーをちゃんと見ないとデバッグ出来ないのでエラー処理はちゃんと入れないとまずい。これはエラーを見る癖をつけましょうとかの精神論ではなく、見ないと何故動かないのかが全くわからないから省きようがない。頂点シェーダとの違いは、読み込むファイルと、glCreateShaderに渡す定数がGL_FRAGMENT_SHADERになっているところぐらいで、ほぼ同じ。ファイルからフラグメントシェーダを読み込みます。フラグメントシェーダをコンパイルします。フラグメントシェーダをチェックします。}}プログラムのリンク頂点シェーダとフラグメントシェーダのセットをProgramとして一つに束ねる。プログラムをリンクします。プログラムをチェックします。(verts.sh)拡張子は何でもいい。shだとシェルスクリプトと勘違いしそうなら.verts、.fragsなどでいい。闘うITエンジニアの覚え書きWordPressで上記文字を入力したところなぜか記事の保存ができなかったので、実験2は画像にしている。}結果[C:][日本語表示フォルダ][test][contains]注意mblenはlocaleの影響を受けるのでsetlocaleする。しない場合、’表’が1byteとしてカウントされてしまう。strtok版strtokによる分割プログラムstrtokを使った典型的なsplitの結果をstringのvectorに格納する。ありきたりだがとりあえず此が一番事故がない。fgetsで一行読み込むfgetsで一行取得するサンプルは多数あるのだけれど一行がバッファサイズ超えたらどうするのというサンプルがあまりなかった。いうか意味をなさないのだろうけれど。関数本体バッファサイズが小さいので大抵は一行に収まりきらず複数回fgetsが走る。fgetsがnullptrを返すか、読み込んだ文字列の最後が”\n\0′′という並びの時だけループを抜ける。}}fgetsの挙動と改行の削除fgetsは改行までを一行と見なして読み込む。改行が最後に入るのだが入らないこともあるのでこの方法をとる。改行文字を読み取ると仮定しないバッファサイズが10,読み込み文字がそれぞれ以下の時のfgetsで読み込まれる内容。二回にわたって読み込む。一回目に改行は入らない。二回にわたって読み込む。一回目に改行は入らない。となりnull終端C++のstring型に結合するように変更このままでは結局引数txtの要素数に依存してしまうので、結果をどんどんstring型変数へ結合していく。str;//コピーコスト?知らん。}もっともこれをやりだすとそもそもfgetsを使う必要云々という議論に発展する気がする。fstreamは嫌いだ。)2自然ソート3必要ならcharへ変換というステップで行います。(核心)この記事の核心自然ソートです。前提として、ファイル名はstd::vector<std::wstring>で管理されています。StrCmpLogicalWを使う時はShlwapi.hをインクルード、shlwapi.libをリンクします。);}1ファイル一覧取得ファイル名一覧を取得。StrcmpLogicalWがワイド文字専用なので、ファイル一覧の段階からワイド文字で取得します。相互変換プログラム色々とやりようはあるしそこらじゅうに転がってるんですがとりあえず自分が納得するものを作ります。tmps;}使う時はsetlocaleが必要です。IS_HIGH_SURROGATEはWindowsのマクロです。IS_LOW_SURROGATE(ls))こんな感じで定義されています。stringが指す先のマルチバイト文字のバイト数を返す。標準ライブラリのリファレンス注意スレッドセーフではない。スレッドセーフであってほしいときはmbrlenを使うmbstowcs用途マルチバイト文字列をワイド文字列に変換する。