2017-01-01から1年間の記事一覧

OpenCLで画像処理

今回はOpenCLを用いて画像処理を行ってみたいと思います。下図のように、赤と青を入れ替える処理を実装していきます。 アプリケーションコード clCreateImageでもいいですが、今回はclCreateBufferで実装してみました。BMPの読み書きは下記記事のものを利用…

WebGL2.0でボリュームレンダリング(TypeScript)

下記記事にて、Direct3D11を用いてボリュームレンダリングを実装してみました。 Direct3D11でボリュームレンダリング - 何でもプログラミング今回はWebGL2.0を利用して同様のものを実装してみたいと思います。ボリュームレンダリングの手法やデータは上記記…

Direct3D11でボリュームレンダリング

ボリュームレンダリングの手法はいくつかありますが、今回はもっとも単純な、下図のように長方形のスライスを何枚も重ねて実現したものを実装したいと思います。 ボリュームデータ 下記ページにある、bunnyのデータを利用いたしました。 The Stanford volume…

WebGL(TypeScript)--- 立方体描画&回転

下記記事にて、WebGLを用いて三角形を描画しました。 WebGL(TypeScript)--- 三角形描画 - 何でもプログラミング今回は引き続き、立方体を描画&回転を実装してみたいと思います。上記記事をベースに実装していきますので、解説のない部分は参照をお願いい…

WebGL(TypeScript)--- 三角形描画

今回はWebGLを用いてcanvasに三角形を描画してみたいと思います。ライブラリを用いず、一から実装してみます。 HTMLの準備 表示のため、下記htmlを用意しました。canvas要素にWebGLで描画します。 <html> <body> <canvas id="gl_canvas" width="100" height="100"></canvas> <script src="script.js"></script> </body> </html> Shader作成関数 Vertex ShaderのコードとFragment Sh…

Direct2D --- 画像読み込み

Direct2Dにおいて画像ファイルを読み込んで表示する場合、Windows Imaging Component (WIC)を利用します。今回は実際にそれを実装してみたいと思います。 画像ファイルを32bitRGBAで読み込み まずIWICImagingFactoryを作成し、factory経由でデコードを行いま…

SDL導入

画像処理コードの確認の際、C++で簡単にウィンドウを表示したいと思い、SDLを少し使ってみました。 SDLダウンロード 下記ページよりdllをダウンロードします。 Simple DirectMedia Layer - SDL version 2.0.7 (stable) shared_ptrに変換する関数定義(任意)…

複数のキーを利用できるConditionalWeakTableクラス

C#

下記記事にて、2つのキーを利用できるWeakTableを実装してみました。 2つのキーを利用できるConditionalWeakTableクラス - 何でもプログラミング今回は3,4個と拡張しやすいように、複数個のキーを利用できるWeakTableを実装してみたいと思います。 Keysク…

2つのキーを利用できるConditionalWeakTableクラス

C#

.NETのConditionalWeakTableは、キーを弱参照で保持し、キーがGCされたときに自動でキーと値がRemoveされるようになっています。しかし、キーとして複数の参照を持ち、参照のうちどれかがGCされたらRemoveを行うといった使い方はできません。今回は複数の参…

Garbage Collectionを検知する(C#)

C#

通常のプログラミングにおいて、いつGCされたか気にする必要はありませんが、極まれにGCのタイミングで処理をしたい時があります(設計で回避するべきではありますが…)今回はGCを検知する方法を調べてみました。 GC.WaitForFullGCComplete GCクラスの関数を…

F#でメモ化(ConditionalWeakTable)

F#

プログラムの高速化のため、一度計算した値を再利用することはしばしばあります。しかし結果を状態として保存する必要があるため、F#では少し扱いにくいです。そこで、ある関数を結果を再利用する関数に変換する、memoize関数を定義してみたいと思います。 m…

ネストしたレコードの更新(Functional lenses)

F#

下記記事にて、リフレクションを用いてネストしたレコードの更新を実装してみました。 ネストしたレコードの更新 (F#) - 何でもプログラミング今回はFunctional lensesを利用して同様の内容を実装してみたいと思います。 Lens型定義 Lens型は対象オブジェク…

Direct2D 独自Effectの作成(PixelShader利用)

下記記事にて、独自のEffectを作成しました。 Direct2D 独自Effectの作成 - 何でもプログラミングEffectの効果自体は、組み込みのID2D1OffsetTransformを利用していたので、今回は独自の効果(PixelShader)を定義してみたいと思います。下図のように、青と…

Direct2D 独自Effectの作成

下記の記事にて、Direct2Dの組み込みのEffectを利用してみました。 Direct2D Effectの利用 - 何でもプログラミング今回は独自のEffectを作成してみたいと思います。組み込みで用意されているOffset効果を利用して、描画結果をずらしてみます。本記事は上記記…

Direct2D Effectの利用

下記記事にて、ID2D1DeviceContextを利用して楕円を描画するところまで実装しました。 Direct2D導入(ID2D1DeviceContext) - 何でもプログラミング今回はID2D1DeviceContextで利用できるようになったEffectを実装してみたいと思います。上記記事で描画した…

Direct2D導入(ID2D1DeviceContext)

下記記事にて、ID2D1HwndRenderTargetを利用してDirect2Dを利用してみました。 Direct2D導入(ID2D1HwndRenderTarget) - 何でもプログラミングDirect2D 1.1からは、ID2D1DeviceContextを利用して実装するようになっています。今回はID2D1DeviceContextを用…

Direct2D導入(ID2D1HwndRenderTarget)

今回はDirect2Dを用いて、下記のような描画を行うところまで実装してみたいと思います。 ウィンドウ生成、表示関数 Direct2Dの描画先として、通常のWindowsのウィンドウを作成、実行する関数を準備します。内容は一般的なもので、特に変わったものではありま…

glTFファイルの読み込み(WPF3Dで表示)

3Dデータ用のフォーマットは3dsやCOLLADA等たくさん存在しますが、2015年にKhronos GroupよりglTFというフォーマットが公開されました。 GitHub - KhronosGroup/glTF: glTF – Runtime 3D Asset DeliveryJSONベースで記述されていますが、頂点データなどは別…

WPFのクラスで3Dプログラミング

WPFで3Dプログラミングをする場合、通常は裏でDirect3Dを用意してレンダリングを行います。ただ、とても簡単な3D描画を行いたい場合は、WPFが用意する3D描画クラスを利用することができます。今回は簡単な実装をしてみたいと思います。 アプリケーション 今…

JavaScript(ES6)でElm Architecture(Virtual-DOMなし) --- 可変個コントロール

下記記事にてJavaScriptにElmのModelとUpdateの機構を取り入れてみました。 JavaScript(ES6)でElm Architecture(Virtual-DOMなし) - 何でもプログラミング今回は引き続き、可変個のコントロールに対応してみたいと思います。 アプリケーションコード カウン…

JavaScript(ES6)でElm Architecture(Virtual-DOMなし)

Elm自体がJavaScriptを生成するものなので実際には利用することはないと思いますが(さらに生のJavaScriptがよければReact.jsがあります)、ElmのModelとUpdateの仕組みを生のJavaScriptで実装してみました。WPFとC#で実装されたものは、下記記事にて参照で…

WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール --- データによりコントロールの種類変更

下記記事にて可変個のコントロールを表示できるよう実装しました。 WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール - 何でもプログラミングただし、すべてのコントロールが同じで個数のみが可変であったため、今回は入力データによっ…

Throttle(一定時間リクエストがなければ実行をする)の実装

スライダーなどから大量のリクエストが送られてきたときに、全て処理する必要がない場合、一定時間リクエストがなければ最新の値で処理を行うことがあります。ReactiveExtensionにもThrottleオペレータは用意されていますので、普段はこれを利用するので問題…

WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール

下記記事にてXamlを利用しないElm Architectureを実装しました。 WPFでElm Architecture --- Xaml利用しない版 - 何でもプログラミングただし、固定個のコントロールにしか対応していませんでした。今回はGridなどのChildrenを動的に変更できるよう実装して…

WPFでElm Architecture --- Xaml利用しない版

下記記事にて、ViewModelまでをElm Architectureで実装し、Xamlとバインディングしてアプリケーションを作成する方法を紹介しました。 Elm Architectureを利用したMVVM --- C# WPF - 何でもプログラミング今回はXaml部分をC#側で実装したものを作成してみた…

既存のDependencyPropertyの変更を検知する

自前でDependencyPropertyを実装する場合は、Register時にPropertyMetadataを渡すことで、値の変更時にコールバックを呼び出すことが可能となります。しかし既存のDependencyPropertyの場合はすでにRegisterされているため、変更を検知するには別のアプロー…

スライダー等からの大量リクエストの、最新値のみを別スレッド処理する

C#

下記のような、スライダーの存在するアプリケーションを作成し、スライダーの値が変わる度に何かの処理をするとします。 もしこの処理が重たい場合、普通に実装しただけでは、UIのレスポンスが悪くなってしまいます。 slider.ValueChanged += (s, e) => Thre…

Functional Reactive Programming + MVVMでのUserControl --- C# WPF

下記記事にてFRPライブラリのSodiumとWPFを連携させてみました。 Functional Reactive Programming + MVVM --- C# WPF - 何でもプログラミング今回はUserControlでも利用できるよう実装してみたいと思います。 アプリケーションコード いつも通り、カウンタ…

Functional Reactive Programming + MVVM --- C# WPF

下記記事にて、Functional Reactive ProgrammingライブラリであるSodiumとWPFを連携させました(F#) SodiumでFunctional Reactive Programming (F#) --- WPF連携 - 何でもプログラミング今回は、C#にてSodiumとWPFを連携させてみたいと思います。 アプリケ…

Elm Architectureを利用したMVVMでのUserControl --- C# WPF

下記記事にて、C#でElm Architectureを利用してWPFアプリケーションを作成しました。 Elm Architectureを利用したMVVM --- C# WPF - 何でもプログラミング今回はElm ArchitectureでUserControlを実装してみたいと思います。F#版での実装は下記記事を参照して…