- wxMSW 2.8.12 をインストール
- build\msw で
- nmake -f makefile.vc
…Debug, 静的ライブラリ, UNICODE - nmake -f makefile.vc BUILD=release
…Release, 静的ライブラリ, UNICODE - nmake -f makefile.vc BUILD=release SHARED=1
…Release, 動的ライブラリ, UNICODE
覚え書き集
2013年1月7日月曜日
wxWidget を VC++ でビルド
2012年7月26日木曜日
NetBeans でプロジェクトのライセンスを設定する
プロジェクトのディレクトリ/nbproject/project.properties に次の行を追加する。
project.license=プロジェクトライセンス名
「プロジェクトライセンス名」には、mit, gpl20, gpl30, apache20 などが入る。これは、ツール | テンプレート の中のライセンスフォルダに入っている license-***.txt の *** の部分に相当する。
2012年3月10日土曜日
LWJGL の基本 2 - 入力 (Mouse, Keyboard, Controller)
org.lwjgl.input.Mouse, org.lwjgl.input.Keyboard, org.lwjgl.input.Controller クラスおよびインターフェースは LWJGL の入力を司るクラスです。Mouse と Keyboard は一つしかインスタンスはないと仮定しているらしく、static なメソッドで操作します。Controller は org.lwjgl.input.Controllers からインスタンスを取得して使用します。
それぞれの入力状態は poll() メソッドで更新されます。poll() は Display.update() で自動的に呼ばれますので、その後に入力処理を書きます。
入力状態の処理には大きく分けて二つの方法があります。一つ目は、Mouse.isButtonDown(int index) のようにその時点での状態を取得する方法です。しかしこの方法では、poll() 同士の間で変化した状態を知ることはできません。このときは poll したイベントを舐めて処理します。ただ、MouseEvent や KeyEvent のようなクラスがあるのではなく、それぞれの static なイベント処理メソッドを呼んで処理するのが若干ダサイです。next() メソッドで次のイベントに移動し、getEvent*** メソッドでイベントの属性を取得します。
サンプル
それぞれの入力状態は poll() メソッドで更新されます。poll() は Display.update() で自動的に呼ばれますので、その後に入力処理を書きます。
入力状態の処理には大きく分けて二つの方法があります。一つ目は、Mouse.isButtonDown(int index) のようにその時点での状態を取得する方法です。しかしこの方法では、poll() 同士の間で変化した状態を知ることはできません。このときは poll したイベントを舐めて処理します。ただ、MouseEvent や KeyEvent のようなクラスがあるのではなく、それぞれの static なイベント処理メソッドを呼んで処理するのが若干ダサイです。next() メソッドで次のイベントに移動し、getEvent*** メソッドでイベントの属性を取得します。
サンプル
import java.util.logging.Level; import java.util.logging.Logger; import org.lwjgl.LWJGLException; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; /** * LWJGL のマウス入力のサンプル * * @author Yuki_M */ public class LWJGLInput1 { private static final DisplayMode DISPLAY_MODE = new DisplayMode(640, 480); /** * @param args the command line arguments */ public static void main(String[] args) { LWJGLInput1 main = new LWJGLInput1(); main.start(); } public void start() { try { Display.setDisplayMode(DISPLAY_MODE); Display.create(); } catch (LWJGLException ex) { Logger.getLogger(LWJGLInput1.class.getName()).log(Level.SEVERE, null, ex); System.exit(0); } while (!Display.isCloseRequested()) { Display.update(); pollEvents(); } Display.destroy(); } private void pollEvents() { if (Mouse.isButtonDown(0)) { int x = Mouse.getX(); int y = Mouse.getY(); System.out.println("Mouse Down: " + x + ", " + y); } while (Mouse.next()) { int dx = Mouse.getEventDX(); int dy = Mouse.getEventDY(); System.out.println("Mouse Move: " + dx + ", " + dy); } } }
LWJGL の基本 1 - Display
org.lwjgl.opengl.Display クラスは LWJGL ライブラリの使用するネイティブウィンドウへの static メソッドを持っています。特に重要なものを以下に挙げます。
サンブルコード
- create()
- update()
- destroy()
- setDisplayMode(DisplayMode mode)
サンブルコード
package lwjglexercise1; import java.util.logging.Level; import java.util.logging.Logger; import org.lwjgl.LWJGLException; import org.lwjgl.opengl.*; public class LWJGLExercise1 { private static final DisplayMode DISPLAY_MODE = new DisplayMode(640, 480); /** * @param args the command line arguments */ public static void main(String[] args) { LWJGLExercise1 main = new LWJGLExercise1(); main.start(); } private void start() { try { Display.setDisplayMode(DISPLAY_MODE); Display.create(); } catch (LWJGLException ex) { Logger.getLogger(LWJGLExercise1.class.getName()).log(Level.SEVERE, null, ex); System.exit(0); } while (!Display.isCloseRequested()) { Display.update(); } Display.destroy(); } }
2012年2月24日金曜日
Vine Linux に IPA フォントをインストール
Vine Linux 6
$ sudo apt-get install TrueType-ipafont パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 以下の追加パッケージがインストールされます: TrueType-ipafont-doc TrueType-ipafont-gothic TrueType-ipafont-mincho 以下のパッケージが新たにインストールされます: TrueType-ipafont TrueType-ipafont-doc TrueType-ipafont-gothic TrueType-ipafont-mincho アップグレード: 0 個, 新規インストール: 4 個, 削除: 0 個, 保留: 0 個 20.1MB のアーカイブを取得する必要があります。 展開後に 28.6MB のディスク容量が追加消費されます。 続行しますか? [Y/n] 取得:1 http://updates.vinelinux.org 6/i386/main TrueType-ipafont-doc 3.02-1vl6 [11.3kB] 取得:2 http://updates.vinelinux.org 6/i386/main TrueType-ipafont-mincho 3.02-1vl6 [11.5MB] 取得:3 http://updates.vinelinux.org 6/i386/main TrueType-ipafont-gothic 3.02-1vl6 [8556kB] 取得:4 http://updates.vinelinux.org 6/i386/main TrueType-ipafont 3.02-1vl6 [3322B] 20.1MB を 2s 秒で取得しました (8154kB/s) 変更を適用しています... 準備中 ############################## [100%] 更新/インストール中 TrueType-ipafont-doc-3.02-1vl6.noarch ############################## [100%] TrueType-ipafont-mincho-3.02-1vl6.noar ############################## [100%] TrueType-ipafont-gothic-3.02-1vl6.noar ############################## [100%] TrueType-ipafont-3.02-1vl6.noarch ############################## [100%] 完了
2012年2月19日日曜日
LWJGL の導入
LWJGL (LightWeight Java Game Library) とは、Java でゲームを作るためのライブラリである。OpenGL や OpenAL などの薄いラッパーとなっており、SDL に近いものを感じる。ゲームパッドなども使えるらしい。
日本語の資料が少ないため、Windows 上で、NetBeans で導入の手順を解説したい。ちなみに、最新版は 2012-1-23 にリリースされた 2.8.3 だった。
日本語の資料が少ないため、Windows 上で、NetBeans で導入の手順を解説したい。ちなみに、最新版は 2012-1-23 にリリースされた 2.8.3 だった。
- ダウンロードページから lwjgl-2.8.3.zip, lwjgl-docs-2.8.3.zip, lwjgl-source-2.8.3.zip をダウンロードし、適当なディレクトリに配置する。例として、C:\lwjgl にした。
- lwjgl-2.8.3.zip と lwjgl-source-2.8.3.zip を展開する。 lwjgl-docs は Javadoc が入っているファイルで、展開は必要ない。
- jar にクラスバスを通す
- NetBeans の ツール|ライブラリ から、「新規ライブラリ」
- ライブラリ名を "LWJGL-2.8"、ライブラリの種類を「クラスライブラリ」にして「了解」
- ライブラリのクラスパスに、jinput.jar, lwjgl.jar, lwjgl_util.jar を追加
- ソースに、lwjgl-source-2.8.3.zip を追加
- Javadoc に、lwjgl-docs-2.8.3.zip を追加
- NetBeans のプロジェクトに LWJGL を追加する
- プロジェクトのライブラリに LWJGL-2.8 を追加する
- native に入っている DLL にバスを通す。 プロジェクトのプロパティの「実行」タブの中の、「VM オプション」に "-Djava.library.path=C:\lwjgl\native\windows" を追加。
参考リンク
2012年2月11日土曜日
Windows 7 でスリープから勝手に復帰してしまう件
スリープや休止状態にしても次の瞬間には復帰してしまうので困っていた。
イベントログの Power-Troubleshooter を探すと
デバイスマネージャーから HID キーボードデバイスのプロパティで、「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする」のチェックを外して解決。
イベントログの Power-Troubleshooter を探すと
スリープ解除の原因: デバイス -USB Root Hubということなので、USB デバイスを一個ずつ外してみることに。すると、どうもキーボードが原因らしい。
デバイスマネージャーから HID キーボードデバイスのプロパティで、「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする」のチェックを外して解決。
2012年2月7日火曜日
LibreOffice (OpenOffice) Draw の円(楕円)ツールで中心を指定して描く方法
Alt キーを押した状態にすると、始点が中心になる。
Shift キーを押した状態にすると、楕円ツールは円に、円ツールは楕円になる。
Shift キーを押した状態にすると、楕円ツールは円に、円ツールは楕円になる。
2012年1月6日金曜日
関数テンプレートの明示的インスタンス化
テンプレートあれこれ (3) -- 明示的なインスタンス生成
例
[foo.h]
例
[foo.h]
template <typename T> T mul(T, T);[foo.cpp]
template <typename T> T mul(T x, T y) { return x * y; } template double mul(double, double);
2011年12月1日木曜日
Ruby/SDL のインストール
RubyForge から rubysdl-win32-bin: rubysdl-2.1.1.1-mswin32-1.9.1-p243.zip をダウンロードDLL とかもひと通り入っている
展開して
> ruby install_rubysdl.rb
展開して
> ruby install_rubysdl.rb
2011年11月29日火曜日
OpenCV の cv::subtract 関数で詰まったこと
一方を Scalar にすることはできるが、 Scalar_<float> にすることはできない。
type が一致しないエラーになる。
with OpenCV 2.3.1, Visual C++ 2010 Express, Windows XP
例:
type が一致しないエラーになる。
with OpenCV 2.3.1, Visual C++ 2010 Express, Windows XP
例:
//Scalar_<float> ave; Scalar ave; std::vector<float> data; std::vector<float> sub; ave = cv::mean(data); cv::subtract(data, ave, sub); // ave が Scalar_<float> だとエラー
2011年11月8日火曜日
OpenCV 2.3.1 superpack を VC++ 2010 Express で使用する
C:\opencv にインストールしたとする。
path に入れておく
Visual C++ で使用する設定。
プロジェクトのプロパティ
path に入れておく
- C:\opencv\build\x86\vc10\bin;
- C:\opencv\build\common\tbb\ia32\vc10;
Visual C++ で使用する設定。
プロジェクトのプロパティ
- 全般
- 文字セット: マルチバイト文字セットを使用する(OpenCV は wchar に対応していないため)
- VC++ ディレクトリ
- インクルードディレクトリ: C:\opencv\build\include
- ライブラリディレクトリ: C:\opencv\build\x86\vc10\lib
/* OpenCV 2.3.1 */ #include <opencv2\core\core.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\highgui\highgui.hpp> #ifdef _DEBUG #pragma comment(lib,"opencv_core231d.lib") #pragma comment(lib,"opencv_imgproc231d.lib") #pragma comment(lib,"opencv_highgui231d.lib") #else #pragma comment(lib,"opencv_core231.lib") #pragma comment(lib,"opencv_imgproc231.lib") #pragma comment(lib,"opencv_highgui231.lib") #endif
2011年11月4日金曜日
Point と Mat の相互変換
cv::Vec を使う
Point → Mat
Vec<T, int cn> : public Matx<T, cn, 1> であるから、Point_<T, cn> は Matx<T, cn, 1> に変換できる。
Mat(Matx) で Mat に変換する。
Mat → Point
今のところ Mat_<T>::(r, c) を使って、 Point(Mat_<T>(0,0), Mat_<T>(1,0)) しかわからない。
Vec は, Matx の特別なケースと言えます. Matx は行列を表現しますが, Vec はベクトルを1行の行列として表現します.OpenCV2.1からOpenCV2.2の変更点(ChangeLog)
Vec<T,2> と Point_ は相互に変換可能で, Vec<T,3> と Point3_ も同様です.また, Vec<T,4> は CvScalar やScalar に変換することができます. Vec の要素にアクセスするには, operator[] を利用します.
固定型,固定サイズの行列に対する cv::Matx 型が追加されました.現在の Vec は,Matx から派生します.このクラスは,cv::Mat を使うとオーバヘッドが大きすぎるような,極小さい行列に対して利用されます.Matx と Mat は相互変換が可能です.
Point → Mat
Vec<T, int cn> : public Matx<T, cn, 1> であるから、Point_<T, cn> は Matx<T, cn, 1> に変換できる。
Mat(Matx) で Mat に変換する。
Mat → Point
今のところ Mat_<T>::(r, c) を使って、 Point(Mat_<T>(0,0), Mat_<T>(1,0)) しかわからない。
2011年9月26日月曜日
MFC の SendMessage
class CHogeDoc : CDocument で、
UpdateAllViews を SendMessage を使って呼び出したいのだが、どうすればいいのか?
CWnd::SendMessage を使うのがいい。
CHogeView にメッセージを登録して、そこから update させる。回りくどい。
ユーザー定義メッセージは手動で登録する。
void CHogeDoc::changed() { ...(処理)... UpdateAllViews(NULL); }が別のスレッドから呼び出されると、CHandleMap が参照できず Assertion failed する。
UpdateAllViews を SendMessage を使って呼び出したいのだが、どうすればいいのか?
CWnd::SendMessage を使うのがいい。
CHogeView にメッセージを登録して、そこから update させる。回りくどい。
ユーザー定義メッセージは手動で登録する。
#define WM_USER_ONCHANGED (WM_USER + 1) Header: class CHogeView { ... afx_msg LRESULT onChanged(WPARAM wParam, LPARAM lParam); } Source: IMPLEMENT_DYNCREATE(CHogeView, CView) BEGIN_MESSAGE_MAP(CHogeView, CView) ON_MESSAGE(WM_USER_ONCHANGED, &CHogeView::onChanged) // ON_COMMAND ではない END_MESSAGE_MAP() ... LRESULT CHogeView::onChanged(WPARAM wParam, LPARAM lParam) { InvalidateRect(NULL); }
2011年9月21日水曜日
Net::HTTP の accept-encoding を指定する。
https://luna.easyjp.net/projects/memo/wiki/ruby/net_http-gzip
Net::HTTP.start(uri.host, uri.port){|http|
opts = {
"Accept-Encoding" => "gzip", # これによりサーバへgzipを要求する
"User-Agent" => "Ruby/Downloader"
}
response = http.get(uri.request_uri, opts)
unless response.is_a?(Net::HTTPOK)
raise "response error!, #{response.code}"
end
if response["Content-Encoding"] == "gzip"
StringIO.open(response.body, 'rb'){|f|
content = Zlib::GzipReader.wrap(f).read
}
use_gzip = true
else
content = response.body
end
}
2011年9月7日水曜日
関数の引数のtop-level qualifierは、関数の型に影響を与えない
http://cpplover.blogspot.com/2008/01/const.html
int add(int x); int main() { printf("%d\n", add(10)); return 0; } int add(const int x) { return c + 1; }
登録:
投稿 (Atom)