総集編:Lunaインターフェース

OpenGLプログラミングメモ内検索 / 「総集編:Lunaインターフェース」で検索した結果

検索 :
  • 総集編:Lunaインターフェース
    総集編という事で、Windows XP の Luna インターフェースで表示してみます。 .manifest ファイルを作成する方法もありますがプログラムに直接、コードを 追加する方法を紹介しておきます。  #pragma comment(linker, /manifestdependency \ type= win32 \   name= Microsoft.Windows.Common-Controls \   version= 6.0.0.0 \   processorArchitecture= x86 \   publicKeyToken= 6595b64144ccf1df \   language= * \ ) 上記のコードをプログラムに追加すると簡単にビジュアルスタイルに変更できます。 Windows Vista からは aero というスタイルもあるみたいですが...
  • メニュー
    Menu トップページ コメント板 GL Wrapper 総合サイト 初めに なぜOpenGLを使うのか? 設定の仕方 困った時は 考察 PC用語の独自調査 GitHubの使い方 Visual Studio 2022 DE Visual C++ 2015 Visual Studio 2017 Expressを入手する MESH VIEW(メッシュビューア) チュートリアルリンク ▼固定機能編へ ▼固定機能 スタティックメッシュ編へ ▼固定機能 階層メッシュアニメーション編へ ▼固定機能 スキニング編へ ▼シェーダー GLSL編へ ▼シェーダー 画像フィルタ偏へ ▼3Dライブラリ編 Irrlicht編へ ▼3Dライブラリ編 Ogre編へ ▼当たり判定 2D編へ ▼当たり判定 3D編へ ▼物理演算 Bullet Physicsへ ▼物理演算 ...
  • 音声ファイル再生(.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...
  • 再生位置の取得
    現在の再生位置をミリ秒で取得します。 メインループを別スレッドで作成し、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, ...
  • 再生位置の設定
    再生位置を設定します。 今回はスペースキーで一時停止し、再生位置を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(...
  • 再生終了時間の取得
    今回はメディアの再生終了時間を取得します。 再生が終わる時間がわかればループ再生の処理なども可能になります。   #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, ...
  • .wavを再生する(DirectMusic)
    DirectInput の時と同じようにウインドウハンドルさえ取得できれば DirectMusic を freeglut と組み合わせて使用できます。 DirectMusic は現在は更新されておらず廃止予定?だそうです。 Windows7 では 32bit 版では DirectMusic を使用できますが 64bit 版にはありません。(XPモードなら使用できる?) いずれにしても、DirectMusic を使い続ける事は推奨できません。 今回のプログラムは DirectX SDK August2007 の参照設定を 使用しています。 *(2014.3.28追記) Windows8においてもWindows7同様の状態です。 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω...
  • .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...
  • スムースシェーディング
    スムースシェーディングです。 とは言っても、OpenGLではデフォルトでスムースシェーディングをする設定に なっているので何も設定せずともスムースシェーディングで描画されるのですが フラットシェーディングやワイヤーフレーム表示と切り替えるには glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); でポリゴンを塗りつぶし設定にして glShadeModel(GL_SMOOTH); を設定します。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //青 GLfloat aqua[...
  • フラットシェーディング
    フラットシェーディングです。 glShadeModel(GL_FLAT); を設定します。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //青 GLfloat aqua[] = { 0.0, 0.0, 1.0, 1.0 }; //ライトの位置 GLfloat lightpos[] = { 200.0, 1000.0, -500.0, 1.0 }; void display(void) {  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  gl...
  • 再びキーフレーム
    長らく道を逸れましたが、ここで再びキーフレームに戻ります。 .Xのアニメーションキーのキータイプ情報 0…回転  w,x,y,zの順にクォータニオンデータ 1…拡大縮小 x,y,zの順に拡大縮小データ 2…平行移動 x,y,zの順に平行移動データ 4…合成行列 回転、拡大縮小、平行移動行列が掛け合わされた4×4行列データ まず、最初に知っておかなくてはならない事があります。 それは、当サイトで使用している Cyberdelia は、合成行列タイプの アニメーションデータは階層構造が正しく生成できないという事です。 詳しくは Cyberdelia に付属のヘルプを参照して下さい。 とは言っても、合成行列でないタイプの方は正しく出力されますので、 それを元に合成行列を作成し、単純なキーフレームアニメーションを表示して みたいと思います。 とりあえず、平行移動行列だけに対応したプログラムを作成...
  • ジョイパッドの状態を取得(DirectInput)
    ウインドウハンドルを取得して DirectInput を使用します。 『ウインドウハンドルさえ取得できれば、何でもできる!!』(アントニオ猪木風) 冗談はさておき、ウインドウハンドルが取得できれば freeglut と DirectInput を 組み合わせて使用する事ができます。 今回のプログラムは青い四角形をジョイパッドの方向キーで移動できます。 DirectInput に対応しているジョイパッドが無いと動作しません。 DirectInput は DirectX8 で更新が停止しており、今後は XInput の使用を マイクロソフトが推奨しています。 *(2014.3.28追記) 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω^;) プロジェクトのプロパティで「C/C...
  • ディスプレースメントマップ
    ディスプレイスメントマップです。 右がディスプレイスメントマップで、左がバンプマッピングです。 右の方はポリゴン形状が変化しているのに対して左は1枚のポリゴンです。 実際に形状が変化しているので非常にリアルな表現ができます。 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 ...
  • ワイヤーフレーム表示
    ワイヤーフレーム表示です。 それっぽくするために白を割り当てました。 本当であればライトの効果を切ると正にワイヤーフレームとなるのですが 今回は球をわかりやすくするためにライトはそのままです。 DirectXと違い、四角ポリゴンのワイヤーが描画できます。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //白 GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 }; //ライトの位置 GLfloat lightpos[] = { 200.0, 1000.0, -500.0, 1....
  • .MQOローダ(ワイヤーフレーム表示編)
    ワイヤーフレーム表示です。 最初、 glDrawArrays を使って描画したら遅くて実用的ではありませんでした。 そこで色々、思考錯誤して glMultiDrawArrays を使ったら、割りとそれなりの 速度で描画できるようになったので公開します。   PNG.h #include lodepng.h //テクスチャクラス class TEXTURE{ protected  LodePNG_Decoder decoder;//デコーダ  unsigned char* buffer;//バッファ  size_t buffersize, imagesize;//サイズ public  TEXTURE();  TEXTURE(const char* FileName);//コンストラクタ  void LOAD_PNG(const char* FileName);//PNG読み込み ...
  • 頂点シェーダー
    頂点シェーダーは、頂点情報を受け取り色々と処理をしてフラグメントシェーダーに 情報を渡します。 頂点シェーダーでは頂点の位置を操作したり、受け取った頂点カラーを変化させたり 光源計算を頂点単位で計算したりします。 ここでは、固定機能と頂点シェーダーで全く同じ位置で四角形を描画します。 ところが、頂点シェーダーに渡された頂点位置は  + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0) によって、X方向に150ずれて表示されます。   頂点シェーダー(vertex.shader) void main(void) {  gl_Position = gl_ModelViewMatrix * gl_Vertex + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0);//頂点座標の出力  gl_FrontColor = ...
  • Visual Studio 2017 Expressを入手する
    Visual Studio Express 2017 for Windows Desktop Visual Studio Express 2017 for Windows Desktop は利用条件が緩いので 今でも使っている方がいるのではないでしょうか? 今は Microsoft のダウンロードセンターからは入手できなくなっています。 でも Visual Studio Installer を使うと今でもインストールできるようです。 やり方ですが、ダウンロードセンターから Visual Studio Professional.exe 等の Visual Studio Installer を入手し、コマンドラインで ①Visual Studio Professional.exe 等のパスを入力 ②スペースキーでスペースを入力 ③以下のコマンドをコピーしてペースト...
  • PC用語の独自調査
    X86(32bit),X64(64bit) x86(32ビットプロセッサー)は最大物理メモリが4GBと限られているのに対し、x64(64ビットプロセッサー)は 8GB、16GB、中には32GBの物理メモリを扱えるものもあります。 また、64ビットコンピューターは、32ビットプログラムと64ビットプログラムの両方を使用することができます。 インテルの初の32ビットCPUは 80386 で、その後継が 80486 ですが、後ろの数字『86』を残し前の数字を省略して 『x86』と呼ぶようになりました。 80486 の後継は Pentium で、Pentium から名称に数字の86が使われなくなりましたが、それからも32ビットCPUは 『x86』と呼びます。 8bit→2^8=256Byteのメモリが管理できる 16bit→2^16≒64KBのメモリが管理できる ...
  • 色の反転
    色を反転させます。 ファイル main.cpp lodepng.cpp lodepng.h PNG.h GLSL.h vertex.shader flagment.shader sample.png vertex.shader varying vec2 pos; void main(void) {     pos = gl_Vertex.xy;     gl_Position = ftransform(); } flagment.shader uniform sampler2D image; uniform int img_Width, img_Height; varying vec2 pos; void main(void) {     vec2 texCoord = vec2(pos.x / float(img_Width), pos.y / float(...
  • GLSLとの変数のやり取り
    GLSL に値を渡すには glGetUniformLocation を使用して シェーダー側の変数のIDを取得します glUniform1f 等でそのIDの変数に値をセットします。 vertex.shader  //OpenGLから受け取る変数 uniform float factor; vec4 v4 = vec4(0.0, 0.0, 0.0, 0.0);   void main(void) {  v4.x=factor;  gl_Position = gl_ModelViewMatrix * gl_Vertex + gl_ModelViewMatrix * v4;//頂点座標の出力  gl_FrontColor = gl_Color;//そのまま出力 } flagment.shader   //OpenGLから受け取る変数 uniform float flagment; vec4 ...
  • タイマーイベント
    タイマーイベントです。 コールバック関数として登録した後、関数自身が次のタイマーイベントを 設定する事で持続的にイベントが発生します。 条件判断文でイベントを終了させたり次のタイマーイベントの発生間隔を 変えたりできます。 ファイル 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...
  • テッセレーション
    テッセレーションです。 面を再分割してくれます。 今回のプログラムはスペースキーを押すとテッセレーションで表示します。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include stdio.h #include GL/freeglut/freeglut.h #include vector using namespace std; #define WIDTH 320 #define HEIGHT 240 //頂点情報用 struct vector3d{  double x;  double y;  double z; }vec3d; vector vector3d vertex; //テッセレータオブジェクト GLUtess...
  • フラグメントシェーダー
    フラグメントシェーダーです。DirectXではピクセルシェーダーと呼ばれる物です。 フラグメントシェーダーではピクセル単位で色々な処理ができます。 今回は頂点シェーダーで描画位置をずらし、フラグメントシェーダーで色を反転させます。 全く同じ位置で、全く同じ色で描画するプログラムがシェーダーによって変化させられています。   頂点シェーダー(vertex.shader) void main(void) {  gl_Position = gl_ModelViewMatrix * gl_Vertex + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0);//頂点座標の出力  gl_FrontColor = gl_Color;//そのままフラグメントシェーダーへ } フラグメントシェーダー(flagment.shader) void main() {  gl...
  • .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...
  • GLSL:マルチテクスチャ
    マルチテクスチャです。 今回のプログラムは地球の地表テクスチャと雲のテクスチャを合成し、 地表よりも雲を遅れて回転させています。 マウスの左ドラッグで視点を変更できます。 画像はNASAがフリーで配布している物を縮小して使用しています。 earth.png cloud.png vertex.shader varying vec3 P; varying vec3 N; void main(void) {   P = vec3(gl_ModelViewMatrix * gl_Vertex);   N = normalize(gl_NormalMatrix * gl_Normal).xyz;   gl_TexCoord[0] = gl_MultiTexCoord0;   gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord0;  ...
  • LibSynth++ .mid再生編
    LibSynth++ について分かった事。 作者の HP が閉鎖された上に、既に完成しているライブラリは VisualStudio2008 でコンパイルされている。それ故、完成済みの LibSynth++.lib を使うしかないので VisualStudio2008 でしか LibSynth++.lib を使ったプログラムは作成できない。 *2014/4/29追記 LibSynth++.lib のソースコードは公開されているのでVisualStudio2012で コンパイルし直すとVisualStudio2012で使えるようになる。 VisualStudio2008の場合はプロジェクトのプロパティ、リンカの入力の 特定のライブラリの無視に LIBCMTD;msvcprtd を加える。 VisualStudio2012の場合は、そのままでも動作する。 以下のプログラムで波形は作成できていると...
  • 文字列描画
    文字列を描画します。 文字列となるとDirectXでもOpenGLでも普通の方法は用意されていません。 GDIを使うと途端に遅くなるからです。 多くの場合、高速化のために自前の画像ファイルで文字を用意したりしていますが、 英数字ならまだしも日本語となると色々と問題がでてきます。 そこで wglUseFontBitmapsW という、文字をビットマップのディスプレイリスト で作ってくれる関数があるので、それを使います。 ここでいきなりクラスが登場していますが、初心者向けに解り易くしたつもりです。 とても便利なので使い方を覚えておきましょう。 ちなみに解放とかは省略、関数が成功したかどうかは if で調べていません。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStar...
  • ストリーミング再生(.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)...
  • .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...
  • マウスイベント
    マウスイベントです。 glut ではマウスホイールは対応していませんでしたが freeglut ではマウスホイールのスクロールを検出できます。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdlib.h #include string using namespace std; wstring wstr=L ; wchar_t buf[255]; #define WIDTH 400 #define HEIGHT 320 int MouseX,MouseY; bool M_left=false; bool M_right=false; bool ...
  • GLSL:テクスチャマッピング
    GLSLでテクスチャを描画します。 vertex.shader   //フラグメントシェーダーに渡す変数   varying vec3 P;//位置ベクトル   varying vec3 N;//法線ベクトル    void main(void)   {     P = vec3(gl_ModelViewMatrix * gl_Vertex);     N = normalize(gl_NormalMatrix * gl_Normal).xyz;     gl_TexCoord[0] = gl_MultiTexCoord0;     gl_Position = ftransform();   } flagment.shader   //頂点シェーダーから受け取る変数   varying vec3 P;//位置ベクトル   varying vec3 N;//法線ベクトル   uniform...
  • バンプマッピング
    バンプマッピングです。 右はバンプマップ無しで左がバンプマップ有りの状態です。 バンプマッピングは見る角度によっては思ったような効果は出ません。 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...
  • 固定機能:グレースケール
    グレースケールです。 輝度値 = 0.299 * Red + 0.587 * Green + 0.114 * Blue で変換できます。 ファイル main.cpp lodepng.cpp lodepng.h PNG.h sample.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #include PNG.h #define WIDTH 640 #define HEIGHT 480 GLuint texName[2]; TEXTURE *texture[2]; void display(void) {  glClear(GL_COLOR_BUFFE...
  • 環境マッピング
    環境マッピングです。 正面の球に部屋を反射させて描画します。 room.xは、ここからダウンロードできます。 右クリックして、名前を付けてリンク先を保存してください。 wall.png vertex.shader varying vec3 P; varying vec3 N; varying vec4 Reflect;  uniform mat4 ViewTranspose;//ビュー変換だけのモデルビュー行列の転置行列 void main(void) {   P = vec3(gl_ModelViewMatrix * gl_Vertex);   N = normalize(gl_NormalMatrix * gl_Normal);   vec3 incident = normalize(P);//入射視線ベクトル   vec3 reflect0 = reflect(incident...
  • 固定機能との違い
    固定機能とプログラマブルシェーダーでは何がどう違うのでしょう。 固定機能ではフラットシェーディングやグーローシェーディング(スムースシェーディング)、 ワイヤーフレーム表示程度しかありませんでした。 擬似的にトゥーンシェーディングっぽく表示する事もできますが、トゥーンシェーディング とは全然品質が違います。 固定機能というのは、あらかじめ用意された範囲内で簡単手軽に機能を切り替えたり 描画に関する事を全て 『用意された中から選んで設定する』 という物でした。 簡単手軽ですが、グラフィックスで表現できる幅が文字通り固定されています。 そこで、より幅広いグラフィックスを表現するためにプログラマブルシェーダーが登場しました。 ここでは、シェーダー使用の描画とシェーダー未使用の描画をしてみました。 左が固定機能パイプラインで描画、右がシェーダーで色を反転させて描画した物です。 シェーダーファイルの...
  • 床面反射
    床面反射です。 床面を半透明で描画し、オブジェクトを床面を境にして 反対側にも描画する事で疑似的に映り込みを表現しています。 brick.png marble.png  vertex.shader varying vec3 P; varying vec3 N; void main(void) {   P = vec3(gl_ModelViewMatrix * gl_Vertex);   N = normalize(gl_NormalMatrix * gl_Normal).xyz;   gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;   gl_Position = ftransform(); } flagment.shader varying vec3 P; varying vec3 N; uniform sam...
  • 投影マッピング
    投影マッピングです。 プロジェクターで投影させたようにテクスチャを張れます。 proj.png 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 sampler; void main(void) {  ...
  • PBO
    PBOです。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #include gl/glew.h #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 struct ImageData{     int width;     int height;     int Channels;     unsigned char *imageData; }Image = {512,512,4,0}; int a=0; GLuint texId;//テクスチャ用ID GLuint PboId[...
  • 設定の仕方
    Visual Studio 2022 Community のインストール Visual Studio 2022 Community https //visualstudio.microsoft.com/ja/downloads/ こちらから、Visual Studio 2022 Community をインストールしてください。 デフォルトだと開発環境の背景色が『濃色』になっていて見にくいので『淡色』に変更します。 ツール→オプションの環境→全般の配色テーマを『淡色』にします。 これで昔ながらの見やすい開発環境になりました。 Visual Studio 2012 Express for Windows Desktop のインストール Visual Studio 2012 Express for Windows Desktop http //www...
  • .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...
  • 線形補間
    さて、前回の「再びキーフレーム」では箱が瞬間移動してしまって いました。 補間がされていないためです。 DirectX SDK 付属のビューワーでは滑らかにアニメーションが 補間されています。 今回はキーフレームとキーフレームの間を線形補間してみようと思います。 ベクトルAとベクトルB間の補間は、求める値をIとすると、 で求める事ができます。 ここでのtは現在のキー位置のパラメーターです。 尚、 0 ≦t≦ 1 で、tが0の時はAと同じ値、tが1の時はBと同じ値に なります。 前回と同じくsample2.xを表示しています。 font.h #pragma once class GLFONT { public  HFONT Hfont;  HDC Hdc;  GLFONT(wchar_t *fontname, int size);  void DrawStringW(int x,in...
  • 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; ...
  • .MQOを自力で読み込んでみる3(表示編)
    今回は取りあえず、頂点配列で表示してみます。 .MQO の頂点データはインデックスになっていますが UV座標のデータは インデックスにはなっていないので glDrawElements を使うとテクスチャが めちゃくちゃになってしまいます。 仕方が無いので glDrawArrays 用に配列データを作成し直して描画 する事にしました。 今回は取りあえず表示するだけという事で法線やライトなどは省略し、VBOにもしていません。 それとテクスチャに使える画像形式はPNGのみです。今の所。 今後はワイヤーフレーム表示とかにも挑戦してみます。    PNG.h #include lodepng.h //テクスチャクラス class TEXTURE{ protected  LodePNG_Decoder decoder;//デコーダ  unsigned char* buffer;//バッファ  ...
  • フォグ
    フォグです。 vertex.shader  //フラグメントシェーダーに渡す変数  varying vec3 P;//位置ベクトル  varying vec3 N;//法線ベクトル   void main(void)  {    P = vec3(gl_ModelViewMatrix * gl_Vertex);    N = normalize(gl_NormalMatrix * gl_Normal);    gl_FogFragCoord = abs(P.z);//フォグ座標    gl_Position = ftransform();  } flagment.shader  //頂点シェーダーから受け取る変数  varying vec3 P;//位置ベクトル  varying vec3 N;//法線ベクトル  uniform int fogMode;   void main(void...
  • 固定機能:鏡面反射
    鏡面反射です。 glLightfv(GL_LIGHT0, GL_SPECULAR, SpecularLight); でスペキュラーライトを設定し、 glMaterialfv(GL_FRONT, GL_SPECULAR, specular); でスペキュラーの反射を設定し、 glMaterialf(GL_FRONT,GL_SHININESS,8); でスペキュラーの指数を設定します。 シェーダーで言うと頂点シェーダーで処理したような品質になります。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //回転用...
  • .Xの階層メッシュアニメーションを読み込んでみる3
    平行移動と同じようにして拡大縮小も線形補間してみました。 新規に作成した sample3.x を表示しています。   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,      ...
  • メニューを表示する(64ビット)
    FreeGlut のウインドウハンドルを取得してウインドウプロシージャを置き換えると win64api のメニューが使えます。 一応、32ビットと64ビットの両方に対応するプログラムにしておきました。 resource.h #pragma once #define IDR_MENU1  100 #define ID_EXIT   101 #define ID_TEST   102 #define ID_A   103 #define ID_B   104 #define ID_Menu   105 #define ID_Whats  106 #define ID_Help   107 menu.rc #include resource.h IDR_MENU1 MENU BEGIN POPUP File BEGIN MENUITEM Exit , ID_E...
  • 3D:AABBとAABB
    バウンディングボックス AABBです。 これは2Dの矩形を3Dにそのまま拡張した物です。 AABBは回転すると使えません。     #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; float y = 0.0f; bool flag = false; bool flag2 = false; //ライトの位置 GLfloat lightpos[] = { 200.0, 300.0, -500.0, 1.0 }; //3つのベクトル struct ...
  • メニューを表示する
    FreeGlut のウインドウハンドルを取得してウインドウプロシージャを置き換えると win32api のメニューが使えます。 resource.h #define IDR_MENU1  100 #define ID_EXIT   101 #define ID_TEST   102 #define ID_A   103 #define ID_B   104 #define ID_Menu   105 #define ID_Whats  106 #define ID_Help   107  menu.rc #include resource.h IDR_MENU1 MENU BEGIN     POPUP File     BEGIN         MENUITEM Exit ,    ID_EXIT     END     POPUP Test     BEGIN   ...
  • プログレスバーを表示する
    プログレスバーを表示します。 resource.h #define IDR_MENU1  100 #define ID_EXIT   101 #define ID_TEST   102 #define ID_A   103 #define ID_B   104 #define ID_Menu   105 #define ID_Whats  106 #define ID_Help   107 #define ID_STATUS  108 menu.rc #include resource.h   IDR_MENU1 MENU BEGIN     POPUP File     BEGIN         MENUITEM Exit ,    ID_EXIT     END     POPUP Test     BEGIN         MENUITEM てすつ ,    I...
  • @wiki全体から「総集編:Lunaインターフェース」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索