ブログトップ 記事一覧 ログイン 無料ブログ開設

nursの日記 このページをアンテナに追加 RSSフィード Twitter

日々の自分用の備忘録を綴っています。

2018-10-05 GLSLシェーダーコードをVSで快適に編集しよう

GLSLシェーダーコードをVSで快適に編集しよう

やあ子供たち。これからどんどん寒くなるね。風邪などひかないように気を付けような。
さて、おじさんはまたちょっと最近GLSLで遊んでいるんだが、頂点シェーダーやフラグメントシェーダーを編集する際にも、VisualStudio2017であたかもC++のソースを編集するときのように、キーワードやコメントの色が自動でついたり、設定したキーボードショートカットが機能するようにしたかったんだ。

GLSLのシェーダーは、一般的に、C++のソースの中に書いてもいんだけど、ランタイムに処理されることから、一般的には、.vshや、.fshの拡張子でもって、ソースコードとは独立したテキストファイルとして存在させるのが常だよな。

ところがそんな拡張子はVSちゃんは全く知らないのでデフォルトだとキーワードの色付けとか全くされず、コメント付け外しのショートカットも全く機能せず、メモ帳と変わらない感じになってしまうんだわ。っていうか、おじさんの環境では、.vshの方はそうなっていたんだが、.fshの方は、そうなってなかったので、前にどう設定したものか忘れた!

なんてずっと悶々としていたんだが、今日やっとそのやり方が見つかったので、メモしておくぞ。
ではいくぞ。その設定は、それはVisualStudio2017のメニューから、

ツール>オプション>
テキストエディター>ファイル拡張子 

とクリックを進めて辿り着ける画面で、拡張子を、.vsh/.fshとして、エディターを、Microsoft Visual C++にして、「追加」ボタンを押す。そして、.vsh、.fshそれぞれについて、そのような設定が、されていれば、OKというわけさ。

おっとそうだ、よかったらGLSLを誰でも使いやすくするために、おじさんが考えたサバイバルキットVertexAttribArrayHelperについて、この過去記事を見てみてくれ。

ではまたな、チャオ!

2018-09-25 画像形式PNGへの変換(C++で簡単に)

画像形式PNGへの変換(C++で簡単に)

あれ?ここは?電脳意識の中か?。。(ザザッ、、)やあ、俺だよ。
任意の画像形式をPNG形式に変換するツールをC++でお手軽に作りたくなったので、OpenCVで何も考えずに、imreadとimwriteを使って作ったのでそのための最低限のソースを以下にメモってみる。まさにPowered By OpenCV。
(OpenCV 3.4.1使用)

(以下、ヘッダーやライブラリのリンクは、あなたのOpenCV環境による話ですので臨機応変に対応ください。)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <shlwapi.h>
#include "opencv2/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs.hpp"
#pragma comment(lib, "shlwapi.lib")
#ifdef _DEBUG
#define CV_EXT "d.lib"
#else
#define CV_EXT ".lib"
#endif
#pragma comment(lib, "opencv_core340" CV_EXT)
#pragma comment(lib, "opencv_highgui340" CV_EXT)
#pragma comment(lib, "opencv_imgcodecs340" CV_EXT)

using namespace std;

int main(int argc, char* argv[])
{
  if (argc < 2)
  {
    cout << "usage a.exe <image_file_path>" << endl;
    return 0;
  }
  if (PathFileExists(argv[1])==FALSE)
  {
    cout << "could not open file. abort.\n" << endl;
    return 0;
  }
  cv::Mat image;
  // 任意形式の画像を読み込みます。
  image = cv::imread(argv[1], CV_LOAD_IMAGE_COLOR);
  //cv::imshow("hi", image);
  char fn[234];//←まここはお好みで(笑)
  strcpy(fn, argv[1]);
  *PathFindExtension(fn) = '\0';
  strcat(fn, ".png");
  // 元画像と同じ場所にPNG形式として出力します。
  cv::imwrite(fn, image);
  return 0;
}

PNGへの変換目的のためだけに、作ってるプログラムをOpenCV依存アプリにするのも嫌だったので、こういう別個独立お簡単ツールとして作ってみました。

まこれで作ったEXEを起動するBATを書いて、そのショートカットに、変換したい画像をドロップするもよし、そのショートカット(.lnkファイル)を、
for %%i 文の中で呼び出して、全画像ファイル一括バッチ変換!みたいなことしてもいいし。夢も広がるってもんだ。

2018-09-16 パス表記のダブルクォーテーション問題は、BATファイル内で解決しよ

パス表記のダブルクォーテーション問題は、BATファイル内で解決しよう。

やあ子供たち。物理ベースドレンダリングなんかに夢中になってる場合じゃないぞ、今はその時間AIの勉強に使った方が自分への投資になるぞ。なんて思ってるのはおじさんだけかも知れないが。。(どっちに行ってもNVIDIAなのでどっちでもいいという噂もあるが)さて本題に入ろう。

Windowsでは、パスの中にスペースがある場合などに対応するために、パス表記全体を、ダブルクォーテーションで囲むということをしますが、そうやって環境変数などに定義された、パス文字列を、いざプログラムに読み込む際には、さてこのパス文字列が、ダブルクォーテーションつきなのか否かを判断して、前者の場合には、文字列の最初と最後に現れるこのダブルクォーテーション記号を切り落としてやる必要があります。そこで登場するのが、まさかのWin32API、「PathUnquoteSpacesA()」だ。

// image_pathを取得
const char* image_path = getenv(image_env);
// image_pathの両端にあるダブルクォーテーションを削除。
// (image_pathの内容が更新される)
PathUnquoteSpacesA(image_path);

しかし、こんなものを導入しなくてもいい話があるのだ。それは、もうBATファイルの中の時点で、ダブルクォーテーションを予め取っ払ってやればよい。BATファイルの中で、置換構文を使えばよい。

set XX=%X:"=%

そう、つまりこれは、文字列Xの中の、ダブルクォーテーションを全て削除した文字列をXXに返すというものだ。具体的には以下のような使い方だ。

@echo off

set A="patty cake"
set B=patty cake
set C="bakers""" m""an"
set D="bake me a cake as fast as you can"

set X=%A% %B% %C% %D%
set XX=%X:"=%

echo %XX%
pause

上記を単独の、a.batとでもして、実行してみれば結果は以下のようになる。

patty cake patty cake bakers man bake me a cake as fast as you can

冒頭のWin32APIは、文字列の両端にあるダブルクォーテーションしか削除してくれないのだろうか。そんなことは確認してないが、まとにかく、このダブルクォーテーションの文化は煩わしいので、極力BAT側で、問題をとっぱらってやろうという趣旨の記事です。EXEは変えられないけどBATファイルなら末端でいくらでも編集できるからね。今日はこんなところで。チャオ!

2018-07-13 胃カメラの検査したよ

胃カメラの検査したよ

やあ子供たち。おじさんは今回初めて胃カメラの検査をしたので今日はそのメモだよ。
ま発端はバリウムの検査でポリープと疑われる影があるから胃カメラで再検査したらどうよみたいな、よくあるパターンなのかなこれ。今回は近場の評判のよさそうなお医者さんを探してそこでやってもらうことにした。

始まる前はやっぱりいろんな想像をして、「何でも飲み込んでやる」くらいの気持ちでいかないとだめなんだろうなとか、やっぱり途中で咳き込んだりしてパニックみたいになってしまうのだろうかとか。とくに診察台の上で待ってる直前の時なんかはどうしても体が硬くなってしまっていることに気付いたから、お腹や腰のあたりから力を抜く練習をひたすらしたり。

やっぱり一番気になっていたのがチューブの太さなんだけど、今回検査室に入って目に入ってきたのは、直径5〜7ミリくらいのやつだった。1センチくらいのやつを想像していたので、あーこれなら大丈夫かなって一瞬思ったんだ。

今回は眠るとか、そういう本格的な麻酔はなしでお願いしたんだけどそれでも最低限の麻酔はやるみたいでそれは注射とかではなくて、ゼリーを口から入れられてのどのあたりに3分くらい置いてくださいというのをやった後、(このゼリーは若干苦かったがそこそこの味がつけられていた)スプレーを2回くらい喉の奥に吹き付けられるだけのことなんだけど、この麻酔が結構効いて、喉や食堂のあたりが痺れたような感じになってきたんだ。後で思うとこの簡易麻酔が随分といい仕事をしていたのではないかと思う。

するとついに先生が入ってきて、「よろしくお願いします」。わー先生きちゃったよーなんて思ったんだけど、この先生が本当に安心させてくれる言葉をたくさん話してくれるものだから本当にそれも助かったんだけどね。

そこからはよくみるあのカメラのチューブを噛まないようにするためのマウスピースみたいのをつけて、「はい息をとめて」言われたと思ったら、「はいはいもう入っちゃったよ、あとはぼーっとしてるだけでいいからね」。麻酔のおかげか、喉のところにチューブが当たる感覚しかなくてそこから下の食堂の感覚とかは全くもうわからない。ま途中2、3回オエッとなることもあったけど、先生が「もう8割9割終わりました」と言ったかと思うと「はい抜いていくよー、また息をとめておいて」で、全ては終わり。

というわけで、眠らされてやるのもあるみたいだけど、おじさんは次回やることがあったとしても、今回のやつだったら全然大丈夫かなって思ったっていう話。

じゃ、今日はそんなところだ。これから「ハンソロ」の2回目を見に行くから。チャオ!

2018-06-28 Windows10(1803)でフォルダオプション設定やコントロールパネル、共

Windows10(1803)でフォルダオプション設定やコントロールパネル、共用スタートアップを出すやり方

やあ子供たち。Windowsで設定作業を行う場合にはいくつかの決まりきったフォルダや設定画面にアクセスしなくてはならないが、Windows10になってまたまたそれらの出し方やアクセス方法が厄介になってるのでおじさんはここにまとめてメモしておくことにしたよ自分のためにな。

●Windows10(1803)でフォルダオプション設定の出し方

Windows10になってもフォルダオプションを設定したい場合は、当然発生するわけで。たとえば、導入したばかりのマシンで、拡張子が見えなくなっていたり、隠れファイルやフォルダを表示しない初期設定のままになっている場合がそうだね。

開発者として当然拡張子は見えてほしいし、隠れフォルダもちゃんと見えてほしいと思うのは当然のことだよな。そんなときには必ずフォルダオプションの設定をする必要に迫られることになるわけだが、Win10の場合は、ちょっと今までの場所とは違うところに行かないとフォルダオプションは見れない感じになっているぞ。

それは、エクスプローラの左上にある、「ファイル」メニューの中の、「フォルダーと検索のオプションの変更」というのをクリックすることだ。これでフォルダオプションの画面に行けるぞ。

例によって、ひとたびフォルダオプションのダイヤログが開かれてしまえば、あとは旧来のWindowsと同じ作業をやるだけだ。

●Windows10(1803)でコントロールパネルの出し方

簡単だよ、画面左下のCortanaのところに、「control」と打ち込んでみよう。次にまた開くときはもっと楽だぞ。「con」と3文字だけ打ち込んでみるだけで、コントロールパネルが出たよ。一度閉じて、またまた開きたくなったときはもっと楽になってるぞ。Cortanaのところに、「c」と一文字打ち込むだけで、、あら不思議!(おじさんの環境だけかな。ちょっと試してみてくれよな)

●Windows10(1803)で、共用スタートアップフォルダを出す方法

これは簡単。「ファイル名を指定して実行」から、「shell:common start」と打てばいいぞ。その他。「shell:common desktop」などは覚えておくと便利かも知れないぜ。

ではまた今日はこんなところで。チャオ!