OpenGLプログラミングメモ内検索 / 「再生終了時間の取得」で検索した結果
-
再生終了時間の取得
今回はメディアの再生終了時間を取得します。 再生が終わる時間がわかればループ再生の処理なども可能になります。 #pragma comment (lib, strmiids.lib ) #include windows.h #include string #include dshow.h using namespace std; #define FileName TEXT( test.mid ) IGraphBuilder *pGB; IMediaControl *pMC; IMediaSeeking *pMSeek; long length,end; HWND hwnd; HDC hdc; wchar_t buf[256]; wstring str; //ミリ秒表示用 wchar_t* L2A(long a) { _ltow_s(a/100000, buf,256, ...
-
メニュー
...得 再生位置の設定 再生終了時間の取得 ▲▲▲▲▲
-
再生位置の取得
現在の再生位置をミリ秒で取得します。 メインループを別スレッドで作成し、TextOut 関数で再生時間を表示します。 #pragma comment (lib, strmiids.lib ) #include windows.h #include string #include dshow.h using namespace std; #define FileName TEXT( test.mid ) IGraphBuilder *pGB; IMediaControl *pMC; IMediaSeeking *pMSeek; long length; HWND hwnd; HDC hdc; wchar_t buf[256]; wstring str; //ミリ秒表示用 wchar_t* L2A(long a) { _ltow_s(a/100000, buf,256, ...
-
ストリーミング再生(.wav)(OpenAL)
OpenAL で .wav をストリーミング再生します。 #pragma comment(lib, OpenAL32.lib ) #pragma comment(lib, alut.lib ) #include stdio.h #include AL/alut.h #include vector #include iostream #include fstream using namespace std; class WaveFile{ public ~WaveFile(){ fp.close(); } bool Open(const char *path); int Read(void *out, size_t size); bool IsEnd()const{return (0==LoadedSize)...
-
再生位置の設定
再生位置を設定します。 今回はスペースキーで一時停止し、再生位置を500ミリ秒の所までシークします。 リターンキーで再生を再開します。 #pragma comment (lib, strmiids.lib ) #include windows.h #include string #include dshow.h using namespace std; #define FileName TEXT( test.mid ) IGraphBuilder *pGB; IMediaControl *pMC; IMediaSeeking *pMSeek; long length; long set=50000000;//500ミリ秒から HWND hwnd; HDC hdc; wchar_t buf[256]; wstring str; //ミリ秒表示用 wchar_t* L2A(...
-
.midを再生する(DirectMusic)
DirectMusic の場合、.wav の再生と特に何の変更もなく .mid が再生できます。 ファイル名を変えるだけです。 Segment- SetParam( GUID_StandardMIDIFile, 0xFFFFFFFF, 0, 0, NULL ); を追加していますが、特に追加せずとも普通に再生してくれます。 *(2014.3.28追記) 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω^;) プロジェクトのプロパティで「C/C++」の「追加のインクルードディレクトリ」に $(DXSDK_DIR)Include を追加するとビルドが通るようです。 ファイル main.cpp sample.mid (自分で用意して下さい) main.cpp #pragma...
-
.wavを再生する(DirectMusic)
DirectInput の時と同じようにウインドウハンドルさえ取得できれば DirectMusic を freeglut と組み合わせて使用できます。 DirectMusic は現在は更新されておらず廃止予定?だそうです。 Windows7 では 32bit 版では DirectMusic を使用できますが 64bit 版にはありません。(XPモードなら使用できる?) いずれにしても、DirectMusic を使い続ける事は推奨できません。 今回のプログラムは DirectX SDK August2007 の参照設定を 使用しています。 *(2014.3.28追記) Windows8においてもWindows7同様の状態です。 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω...
-
音声ファイル再生(.wav,.mid等)
DirectShowを使って音声ファイルを再生してみます。 DirectShowはフィルタ(コーデック)をインストールするとかなりの ファイル形式を再生する事ができます。 .ogg もフィルタをインストールしたら再生できました。 #pragma comment (lib, strmiids.lib ) #include windows.h #include dshow.h #define FileName TEXT( test.mid ) IGraphBuilder *pGB; IMediaControl *pMC; void Init() { //COMを初期化 CoInitialize(NULL); //FilterGraphを生成 CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC, IID_IGrap...
-
.midを再生する(mciコマンド)
mciコマンドを使用して midi を再生します。 他にも様々な音声ファイルや動画なども再生できますが、 今回は midi だけです。 ファイル main.cpp sample.mid (自分で用意して下さい) main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, winmm.lib ) #include windows.h #include mmsystem.h #include GL/freeglut/freeglut.h #include stdio.h #define WIDTH 320 #define HEIGHT 240 MCI_OPEN_PARMS mop; class GLFONT { public HFON...
-
.wavを再生する(win32API)
Win32API の PlaySound を使用して .wav を再生します。 glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS); を 指定すると freeglut の場合、 glutMainLoop(); から戻ってくる事が可能です。 いつも解放はOSまかせにしている管理人ですが、今回は解放コードも記述しました。 ファイル main.cpp sample.wav (自分で用意して下さい) main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, winmm.lib ) #include windows.h #include mmsystem...
-
ジョイパッドの状態を取得(DirectInput)
ウインドウハンドルを取得して DirectInput を使用します。 『ウインドウハンドルさえ取得できれば、何でもできる!!』(アントニオ猪木風) 冗談はさておき、ウインドウハンドルが取得できれば freeglut と DirectInput を 組み合わせて使用する事ができます。 今回のプログラムは青い四角形をジョイパッドの方向キーで移動できます。 DirectInput に対応しているジョイパッドが無いと動作しません。 DirectInput は DirectX8 で更新が停止しており、今後は XInput の使用を マイクロソフトが推奨しています。 *(2014.3.28追記) 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω^;) プロジェクトのプロパティで「C/C...
-
.wav再生(OpenAL)
OpenAL で .wav をループ再生します。 このプログラムは .wav を全部読み込んで再生するので メモリを多く使います。 #pragma comment(lib, OpenAL32.lib ) #pragma comment(lib, alut.lib ) #include stdio.h #include AL/alut.h void main (int argc, char **argv) { ALuint buffer, source; alutInit( argc, argv); buffer = alutCreateBufferFromFile( sample.wav ); alGenSources(1, source); alSourcei(source, AL_BUFFER, buffer); alSourcei(source...
-
再生速度の変更
データはそのままでサンプリングレートをいじるだけで 再生スピードを変えます。 #include stdio.h #include stdlib.h #include string.h #define FileName Warp1_ste.wav //適当な曲を探して下さい。 #define Speed 0.5 //再生スピードの倍率 // defines #define STR_RIFF RIFF #define STR_WAVE WAVE #define STR_fmt fmt #define STR_data data #define WAV_MONAURAL 1 #define WAV_STEREO 2 #pragma pack(push,1) struct WaveFileHeader...
-
ODE:箱の自由落下と地面との衝突判定
箱が上から落ちてきて、地面でバウンドします。 値を設定するだけで、後は勝手にシミュレーションしてくれます。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, ode_doubled.lib ) #include GL/freeglut/freeglut.h #include ode/ode.h #include vector using namespace std; #define WIDTH 320 #define HEIGHT 240 #define ODE_MAX_CONTACTS 1024 //ライトの位置 GLfloat lightpos[] = { 2.0, 4.0, 1.0, 0.0 }...
-
LibSynth++ .mid再生編
LibSynth++ について分かった事。 作者の HP が閉鎖された上に、既に完成しているライブラリは VisualStudio2008 でコンパイルされている。それ故、完成済みの LibSynth++.lib を使うしかないので VisualStudio2008 でしか LibSynth++.lib を使ったプログラムは作成できない。 *2014/4/29追記 LibSynth++.lib のソースコードは公開されているのでVisualStudio2012で コンパイルし直すとVisualStudio2012で使えるようになる。 VisualStudio2008の場合はプロジェクトのプロパティ、リンカの入力の 特定のライブラリの無視に LIBCMTD;msvcprtd を加える。 VisualStudio2012の場合は、そのままでも動作する。 以下のプログラムで波形は作成できていると...
-
.ogg再生(OpenAL)
OpenAL で .ogg を再生します。 #pragma comment ( lib, libogg_static.lib ) #pragma comment ( lib, libvorbis_static.lib ) #pragma comment ( lib, libvorbisfile_static.lib ) #pragma comment ( lib, OpenAL32.lib ) #include vorbis/vorbisfile.h #include windows.h #include al.h #include alc.h #include stdio.h #define NUM_BUFFERS 32 #define BUFFER_SIZE 4096 void main() { ALCdevice *device; ...
-
.wav再生(DirectSound)
DirectSound で .wav を再生します。 これまでと同様にウインドウハンドルを取得すれば freeglut と DirectSound を組み合わせて使用できます。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, winmm.lib ) #pragma comment(lib, dsound.lib ) #include GL/freeglut/freeglut.h #include mmsystem.h #include dsound.h #include stdio.h #define SAFE_RELEASE(p) {if(p){(p)- Release();(p)=NULL;}}//安全に解放する #define Fi...
-
ジョイパッドの状態を取得(Win32API)
Win32API の joyGetPosEx を使ってジョイパッドの状態を取得します。 認識できるコントローラーは管理人が試した所、4つまで出来ました。 JOYSTICKID2+1で3つめのコントローラー、JOYSTICKID2+2で4つめのコントローラーとなります。 今回のプログラムは、オレンジの四角形をジョイパッドの方向キーで移動させます。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, winmm.lib ) #include windows.h #include mmsystem.h #include GL/freeglut/freeglut.h #define WIDTH 320 #...
-
キーボードの状態を取得
GLUT では glutKeyboardFunc 等でコールバック関数として キー入力を調べる関数を登録する事もできますが、5キー以上の 同時入力を検知する事ができないので WindowsAPI を使用します。 今回のプログラムではリターンキー、スペースキー、矢印キーを入力すると 画面の色が変わります。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include windows.h #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 BYTE KeyTbl[256]; void display(void) { glClear(GL_COLOR...
-
ジョイパッドの状態を取得(XInput)
Xinput を使ってジョイパッドの情報を得ます。 現在は対応コントローラーが少ないですが、これからは増えてこの規格が標準に なるでしょう。多分。(マイクロソフトが、そうしたいらしいので。) どう見ても DirectInput の方が高機能ですが、これからは XInput を使いましょう。 Xbox 360 Controller Emulator なる物もあるので Xbox 360 のPC用コントローラーを 持っていなくとも対応させる事はできます。 今回のプログラムはアナログ、デジタルの方向キーで緑の四角形を移動させます。 XInput 対応コントローラーかエミュレータでなければ動きません。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #prag...
-
階層構造
今回、階層構造を作ってアニメーションするために、色々なソフトを試してみたのですが、http //www.vixar.jp/cyberdelia/ こちらの Cyberdelia というソフトがメタセコイアのファイルとも相性が良く最もシンプルで 操作性も良かったので Cyberdelia を使う事にします。 .X のアニメーションを作成できるソフトは他にもたくさんあるのですが、階層メッシュアニメーションだけを 出力するソフトはおそらく Cyberdelia だけではないでしょうか。詳しく調べていないので他にもあるかも しれませんが。 まず、メタセコイアで↓の図のような戦車を作成します。 戦車は 『本体』 と 『砲台』 と 『砲身』 から出来ていてそれらは のような親子関係を持っています。 それを Cyberdelia で読み込んで階層構造を設定し、アニメーションを作って .X形式で保...
-
フルスクリーンで起動する
フルスクリーンで起動します。 GLUT にはゲームモードというのがあり、これを使うと簡単にフルスクリーンにできます。 ゲームモードを使う場合は glutCreateWindow を使ってはいけません。 強制終了してしまいます。 サンプルプログラムはESCキーを押すと終了します。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSwapBuffers(); } void idle(void) { glutPostRedisplay(...
-
続ボーンデフォーム
前回の続きです。 まずはマテリアルを設定します。 左側にあるマテリアルパネル上で右クリックします。 新規マテリアルを選択するとマテリアルウインドウが 出てくるので、そのまま閉じます。 オブジェクトパネルの Root obj1 を選択します。 メニューの ポリゴン 選択マテリアルをセット を選択します。 これでマテリアルが設定されました。 それでは早速ボーンアニメーションを作成してみましょう。 左側にあるアニメーションパネル上で右クリックします。 新規アニメーションを選択するとアニメーションウインドウが 出てくるので、そのまま閉じます。 下側の1~29までの数値が書いてある所がキーフレームです。 キーフレームの隣の 1.000 となっている所を 0.000 にしてEnterを押します。 キーフレームの 0 の所を選択します。 オブジェクトパネルの Joint2 を選択します...
-
ボーンデフォーム
表示メニューの正射影を選択して正射影(Ortho)にします。 表示メニューの正面を選択して真正面から見た図にします。 ポリゴンツールを押してモデルの全体を確認します。 ジョイントツールを押します。 この状態でモデルビュー上を左クリックするとジョイントが作成できます。 デフォルトではジョイントの表示が小さいので大きくします。 ファイル シーン設定を選択します。 表示半径のジョイントを8にしてOKボタンを押します。 最初のジョイントをモデル下部に作成し、次のジョイントをモデル中心より 少し下に作成します。 すると一つ目のボーンが出来上がりました。 続けて、モデル上部より少し下にジョイントを作成し、完成です。 完成したら選択ツールを押してジョイントツールを終了します。 オブジェクトパネルのobj1とJoint1をShiftキーを押しながら選択します。 オブジェクトメニューのスムーズスキ...
-
C++/CLI:メニュー
基本プロジェクトにメニューを配置します。 「ここへ入力」となっている所をクリックして「ファイル」と 入力します。 今回は適当に、それらしいメニューアイテムを入力してみます。 ビルドして実行してみましょう。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace Project1; [STAThreadAttribute] int main(){ MyForm ^form1 = gcnew MyForm; form1- ShowDialog(); return 0; } MyForm.h #pragma once namespace Project1 { using namespace Sys...
-
LibSynth++ 解析編
では、早速 LibSynth++ の使い方を探ってみたいと思います。 http //www5.atpages.jp/~my04337/ tomoteruの生成物倉庫 の 初代LibSynth++ のページにある *LibSynth++ AlphaTest Rev.18 LibSynth++ – Header,Lib(Visual Studio2008用) から LibSynthPP.cab をダウンロードします。 解凍して Include フォルダにある LibSynth++.h を見てみましょう。 ざっと見た所、 ~90行まで 定数定義 ~296行まで メッセージ制御系 ~484行まで バッファ処理系 ~601行まで 双二次フィルタ系 ~636行まで WaveTable ~709行まで オシレータ ~931行まで midiパーサ系 ~1163行まで オシレータ系 ~165...
-
固定機能編:おわりに…
ここまで、スキンメッシュアニメーションを解説してきましたが、 スキンメッシュアニメーションの実装方法は人それぞれ。 当サイトで解説したやり方だけではない事を頭の片隅に入れておいて 下さい。 3Dモデルのファイル形式に関しても、今回はDirectXのXファイルを 使用しましたが、実際のゲームやアプリ制作での場合は、 3Dモデルのファイル形式そのものを自作するのが1番です。 これで、固定機能編は終了です。
-
右メニュー
更新履歴 取得中です。
-
JPEG画像を表示する
JPEG画像を読み込んで表示します。 フルカラーとグレースケールのみサポートしています。 かなりデータサイズを小さくできるので広く使われています。http //www.ijg.org/こちらのサイトでフリーのJPEGライブラリのソースコードが配布されています。 libjpeg.lib を作成してください。作り方はgoogleなどで検索して作って下さい。 jpeglib.h , jconfig.h , jmorecfg.h , libjpeg.lib をプロジェクトのフォルダに設置して下さい。 これでJPEGを読み込む準備が整いました。 ファイル main.cpp jpeglib.h (配布先サイトから入手して下さい) jconfig.h (配布先サイトから入手して下さい) jmorecfg.h (配布先サイトから入手して下さい) libjpeg.lib (自分で作成して下さい) ...
-
MASM32を使ってみる
MASM32 http //www.masm32.com/ こちらで MASM32 をダウンロードしてインストールしてください。 『機械語』(マシン語)やアセンブラと聞くと、ただ単に『凄い』とか『速い』とかイメージする方が いると思いますが、あまり過度な期待はしない方が良いです。 グラフィックやサウンドなどは逆に面倒くさいとか、簡単にできないとかで詰む可能性の方が高いです。 パソコンの世界にグラフィックやサウンドをもたらしたのはFortran? あるいは BASIC の方なのではないでしょうか? ただ、インラインアセンブラとかで計算のみを高速化の目的で使う場合は、実に有効です。 覚えておいて損は無いと思います。 main.cpp //#pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pra...
-
タイマーイベント
タイマーイベントです。 コールバック関数として登録した後、関数自身が次のタイマーイベントを 設定する事で持続的にイベントが発生します。 条件判断文でイベントを終了させたり次のタイマーイベントの発生間隔を 変えたりできます。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #define WIDTH 320 #define HEIGHT 240 int time=0; wchar_t buf[255]; class GLFONT { public HFONT Hfont; HDC Hdc; GLFONT(wchar_t *fontna...
-
リッチテキストエディットコントロールを表示する
リッチテキストエディットです。 頑張ればWordもどきも作れるかも知れませんね。 resource.h #define IDR_MENU1 100 #define IDM_END 101 #define IDM_FONT 102 #define ID_STATUS 108 menu.rc #include resource.h IDR_MENU1 MENU DISCARDABLE BEGIN POPUP ファイル BEGIN MENUITEM 終了 , IDM_END END POPUP 編集 BEGIN MENUITEM フォントの変更 , IDM_FONT END END main.cpp #pragma comment(l...
-
分割ウインドウ
二つのエディットコントロールを使ってウインドウを分割したように 見せます。 この類の処理はSDKを使うとサイズ変更などの度に再描画が発生し チラついてしまいますのでGUIを自作するのが良いかもしれません。 resource.h #define IDR_MENU1 100 #define ID_EXIT 101 #define ID_ERASE 102 #define ID_SHOW 103 #define ID_STATUS 104 #define IDC_EDIT1 105 #define IDC_EDIT2 106 menu.rc #include resource.h IDR_MENU1 MENU BEGIN POPUP File BEGIN MENUITEM Exit , ID_EXIT END P...
-
バンプマッピング
バンプマッピングです。 右はバンプマップ無しで左がバンプマップ有りの状態です。 バンプマッピングは見る角度によっては思ったような効果は出ません。 brick128.png bump128.png vertex.shader //フラグメントシェーダーに渡す変数 varying vec3 P;//位置ベクトル varying vec3 N;//法線ベクトル varying vec3 T;//接線ベクトル varying vec3 B;//従法線ベクトル attribute vec3 tangent;//OpenGLから void main(void) { P = vec3(gl_ModelViewMatrix * gl_Vertex); N = normalize(gl_NormalMatrix * gl_Normal); T = normalize(gl_NormalM...
-
3D:OBBとOBB
OBBです。 バウンディングスフィアの応用で中心位置と半径を使い、 内積と外積を駆使して当たり判定を行います。 font.h #pragma once class GLFONT { public HFONT Hfont; HDC Hdc; GLFONT(wchar_t *fontname, int size); void DrawStringW(int x,int y,wchar_t *format, ...); }; //コンストラクタ フォント作成 GLFONT GLFONT(wchar_t *fontname, int size) { Hfont = CreateFontW( size, //フォント高さ 0, //文字幅 0, //テキストの角度 0, ...
-
OpenGLのバージョンとGPUの情報を得る
OpenGLのバージョンとGPUの情報を取得します。 ファイル main.cpp main.cpp #include stdio.h #include GL/freeglut/freeglut.h int main(int argc, char *argv[]) { glutInitWindowPosition(10, 10); glutInitWindowSize(10, 10); glutInit( argc, argv); glutCreateWindow( Check OpenGL ); printf( OpenGLのバージョン %s\n ,glGetString(GL_VERSION)); printf( ハードウェアベンダー %s\n ,glGetString(GL_VENDOR)); printf( GPU %s\n ,glGetStr...
-
3D:球と球
バウンディングスフィアです。 3Dの当たり判定では最も計算コストが少なく、簡単に実装できるため 多用されます。 仕組みですが、まず、球の中心位置と球の半径を設定します。 そして、球と球の中心間の距離が互いの半径の合計値以下であれば 接触していると判断できます。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #include math.h #define WIDTH 320 #define HEIGHT 240 //平行移動用 float x = 0.0f; bool flag = false; //3つのベクトル struct Vector3f{ float x; float y; ...
-
画像を表示する(glpng)
先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると struct IDirectDrawSurface7; なる表記があります。 内部で DirectX7 を使用しているようです。 OpenGLなのにDirectXは使いたくない!!とか、 WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を 使った方法も記載しておきます。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #include gl/glpng.h #define WIDTH 320 #define HEIGHT 240 pngInfo info; GL...
-
C++/CLI:フォルダダイアログ
基本プロジェクトにフォルダーブラウザダイアログを追加します。 フォルダーブラウザダイアログ起動用にボタンを配置します。 ボタンの TEXT を「フォルダを参照」にします。 ボタンをダブルクリックして以下のコードを追加します。 folderBrowserDialog1- ShowDialog(); //取得したフォルダ名 String^ FileName = folderBrowserDialog1- SelectedPath; ビルドして実行してみましょう。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace Project1; [STAThreadAttribute] ...
-
水面
水面と集光模様です。 vertex.shader //フラグメントシェーダーに渡す変数 varying vec3 P;//位置ベクトル varying vec3 N;//法線ベクトル void main(void){ P = vec3(gl_ModelViewMatrix * gl_Vertex); N = normalize(gl_NormalMatrix * gl_Normal); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_Vertex; gl_Position = ftransform(); } flagment.shader //頂点シェーダーから受け取る変数 varying vec3 P;//位置ベクトル varying vec3 N;//法線ベクトル uniform sampler2D s...
-
PNG画像を表示する(glpng)
先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると struct IDirectDrawSurface7; なる表記があります。 内部で DirectX7 を使用しているようです。 OpenGLなのにDirectXは使いたくない!!とか、 WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を 使った方法も記載しておきます。 ファイル main.cpp sample.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #include gl/glpng.h #define WIDTH ...
-
C++/CLI:ファイルダイアログ
基本プロジェクトにオープンファイルダイアログを配置します。 フォーム上には何も表示されず、フォームデザイナの下の方に オープンファイルダイアログコントロールが表示されます。 オープンファイルダイアログを起動するには何かアクションが必要なので ボタンも配置します。 ボタンの TEXT を「ファイルを開く」にします。 ボタンをダブルクリックして以下のコードを追加します。 //ファイルフィルタ openFileDialog1- Filter = 画像ファイル(*.bmp,*.jpg,*.png,*.tif,*.ico)|*.bmp;*.jpg;*.png;*.tif;*.ico ; openFileDialog1- ShowDialog(); //取得したファイル名 String^ FileName = openFileDialo...
-
スキンメッシュアニメーションの作成
スキンメッシュアニメーションのXファイルの中身を見てみると言っても、 まずは作成しなければなりません。 スキンメッシュアニメーションを作成するソフトとして、 ToyStudio や エルフレイナ 等がありますがどちらもシェアウェアです。 また、各種市販の3DCGソフトウェアでも作成できますが、なるべくお金の かからない方法で作成したいです。 そこでカンパウェアの RokDeBone2 を使わせて頂く事にします。 *( RokDeBone2 ver5.5.2.7 以降を使用して下さい。)http //ochakkolab.moo.jp/ この RokDeBone2 は、XBOX360の周辺機器である Kinect を用いると モーションキャプチャーの機能を使う事もできます。すごいですね。 *(2012/3/2追記) …と思ったんですが、RokDeBone2 での読み込みプログラムを作成...
-
PhysX:セットアップ
NVIDIA PhsyX についての解説です。 NVIDIA PhsyX は良く間違われますが CUDA とは違います。 CUDA は Compute Unified device Architecture の略で NVIDIA社の GPU に対する GPGPU を目的とした フレームワークまたは統合開発環境の事です。 GPU を動作させるためのプログラミング・モデル、およびプログラミング言語(CUDA-C)とそのコンパイラ、ライブラリを言います。 PhsyX は物理エンジンのSDKです。 NVIDIA PhsyX SDK 5.0.2 (2023/9/24最新) https //github.com/NVIDIA-Omniverse NVIDIA PhysX SDK 4.1 https //github.com/NVIDIAGameWorks 内の、 h...
-
困った時は
当サイトのプログラムが正常に動作しない場合 まずは OpenGL とグラフィックスカードのドライバを最新のものにして下さい。 それでも解決しない場合はコメント板にて連絡を下さい。 コンソール画面を消す #pragma comment(linker, "/SUBSYSTEM WINDOWS /ENTRY mainCRTStartup") 以前のVisual Studio 2012辺りまでは、このプラグマでコンソール画面を消す事ができました。 もちろん今でも可能なのですが、現在のVisual Studio 2022ではデフォルトでプロジェクトの プロパティ、リンカーのシステムのサブシステムの項目が『コンソール (/SUBSYSTEM CONSOLE)』 になってしまっています。 これでは最初からプラグマコメントが入力されているので除去できません。 ...
-
固定機能:テクスチャマッピング
テクスチャマッピングと言っても、『画像を表示する』のチュートリアルで既にやっています。 ただ、今回は、より踏み込んでテクスチャのST座標を回転してみます。 それには、テクスチャマトリックスを使用します。 マトリックスと言えば、glMatrixMode(GL_PROJECTION); とか、glMatrixMode(GL_MODELVIEW); が、あるように glMatrixMode(GL_TEXTURE); というテクスチャ用のマトリックスモードがあります。 このテクスチャ空間も,物体の空間 (x, y, z, w) と同じように4次元 (s, t, r, q)で用意されていて、 移動、回転、拡大縮小などの行列を適用できます。 ファイル main.cpp sample.png main.cpp #pragma comment(linker, /SUBSYSTEM WIN...
-
文字列描画
文字列を描画します。 文字列となるとDirectXでもOpenGLでも普通の方法は用意されていません。 GDIを使うと途端に遅くなるからです。 多くの場合、高速化のために自前の画像ファイルで文字を用意したりしていますが、 英数字ならまだしも日本語となると色々と問題がでてきます。 そこで wglUseFontBitmapsW という、文字をビットマップのディスプレイリスト で作ってくれる関数があるので、それを使います。 ここでいきなりクラスが登場していますが、初心者向けに解り易くしたつもりです。 とても便利なので使い方を覚えておきましょう。 ちなみに解放とかは省略、関数が成功したかどうかは if で調べていません。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStar...
-
マテリアルの設定
glEnable(GL_LIGHTING); でライトを有効にしていない時は、glColor4f(赤,緑,青,アルファ); で色を付けていました。 しかし、3Dモデルをそれでやってしまうとのっぺりした、ただの塗りつぶしになってしまいます。 ライトを有効にしている時に、3Dモデルがどのような光の色を反射するか設定するには glMaterialfv(適用する面,光源の種類,反射する色); で材質を設定してあげます。 今回は一定時間でマテリアルを変更するプログラムを作ってみました。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdlib.h #define ...
-
バイリニアフィルタリング
バイリニアフィルタリングです。 glTexParameteri に GL_LINEAR を設定するだけで使用できます。 ファイル main.cpp lodepng.cpp lodepng.h maptip.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #include string #include lodepng.h using namespace std; #define WIDTH 320 #define HEIGHT 240 GLuint Tex[2]; void Draw(float x,float y,float w,float h...
-
アルファテスト
アルファテストです。 アルファテストとはイメージデータのアルファ値を調べて描画するか しないかを決めるためのものです。 今回は GL_GREATER を指定しているので glAlphaFunc(GL_GREATER, alpha); の alpha より透明度が大きいピクセルを描画します。 今回のプログラムはしばらくするとアルファ値に応じて画像が切り抜かれていきます。 ファイル main.cpp lodepng.cpp lodepng.h test.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include lodepng.h #define WIDTH 320 #defin...
-
@wiki全体から「再生終了時間の取得」で調べる
更新順にページ一覧表示
|
作成順にページ一覧表示
|
ページ名順にページ一覧表示
|
wiki内検索