PBO

OpenGLプログラミングメモ内検索 / 「PBO」で検索した結果

検索 :
  • 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[...
  • C++/CLI:グループボックス
    基本プロジェクトにグループボックスを2つ配置します。 それぞれのグループボックス上にラジオボタンを2つずつ、 配置します。 ビルドして実行してみましょう。 通常はラジオボタンは1つしか選択できないはずですが、 グループボックスで分けることによって、ラジオボタンの1と2、 3と4が別々のグループとして扱われ、それぞれのグループごとに 選択できるようになります。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace Project1; [STAThreadAttribute] int main(){  MyForm ^form1 = gcnew MyForm;  form1- ShowDialog();  r...
  • VBO
    VBOです。 頂点配列はPC本体のRAM(メモリ)にデータを置いておいて、 描画する時にビデオカードにデータを転送し、それを使って描画していました。 データの少ない物を描画する分には問題ありませんがポリゴン数の多いモデルを 大量に描画したりする時に一々毎回データを転送していてはかなりの無駄が 生じています。 そこで描画を高速化する為にビデオカードのRAMに予めデータを置いておき PC本体から毎回データを転送しなくても良いようにするのがVBOです。 今回のプログラムは頂点配列の解説で使ったプログラムをVBOにしています。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #inclu...
  • グループボックスを表示する
    ...UP|BS_GROUPBOX,                  10,10,240,55,hWnd2,(HMENU)ID_GROUP,hInst,NULL);  HWND hRadio1 = CreateWindow(L BUTTON ,L 上選択肢1 ,WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,                  20,30,100,30,hWnd2,(HMENU)ID_RADIO1,hInst,NULL);  HWND hRadio2 = CreateWindow(L BUTTON ,L 上選択肢2 ,WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,                  120,30,100,30,hWnd2,(HMENU)ID_RADIO2,hInst,NULL);  SendDl...
  • FBO
    FBOです。オフスクリーンレンダリングで使います。 ファイル 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 #include     stdio.h int WIDTH=320; int HEIGHT=240; #define    FBO_WIDTH        256 #define    FBO_HEIGHT        256 GLuint    Tex_Name; GLuint    RenderBuffer; GLuint    FrameBuffer; GLin...
  • メニュー
    ...O(テクスチャ付) PBO FBO 垂直同期ON/OFF OpenGLのバージョンとGPUの情報を得る 秒間60フレーム 簡易輪郭線描画 固定機能 トゥーンレンダリング 固定機能 グレースケール ▲▲▲▲▲ ▼ 固定機能 スタティックメッシュ編 .MQOを読み込んで表示する(GLMetaseq) .MQOを自力で読み込んでみる1(解析編) .MQOを自力で読み込んでみる2(読み込み編) .MQOを自力で読み込んでみる3(表示編)] .MQOローダ(ワイヤーフレーム表示編) .OBJを読み込んでみる1(解析編) .OBJを読み込んでみる2(読み込み編) .OBJを読み込んでみる3(表示編) .Xを読み込んでみる1(解析編) .Xを読み込んでみる2(解析編2) .Xを読み込んでみる3(読み込み編) .Xを読み込んでみる4(表示編) .FBXを読み込んでみる1(解析編) ....
  • VBO(テクスチャ付)
    テクスチャも含めてVBOで描画します。 ファイル main.cpp lodepng.cpp lodepng.h PNG.h sample.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #include gl/glew.h #include GL/freeglut/freeglut.h #include PNG.h #define WIDTH 320 #define HEIGHT 240 GLuint VboId[4];//4つ分 float angle=0.0f; GLuint texID; TEXTURE *texture; //頂点データ 3面を4頂点で作成する 1頂点はx...
  • C++/CLI:ツールバー
    基本プロジェクトにツールバーを配置します。 プロパティの ImageScaling を Width 32、Height 32 にします。 ツールバーの左端にプルダウンメニューがあるので Button を追加します。 ボタンの Image をクリックして各種アイコンを設定します。 *設定の仕方に Visual Studio 2012 のアイコンライブラリーの入手方法が あるので参考にしてください。 今回は、Visual Studio 2012 アイコンライブラリーを Cドライブにインストールし、 C \VS2012 Modern Image Library\x--archive--x\Objects - VS2012\png_format\Office and VS\ にある画像を使いました。 後は適当にボタンとかセパレーターとかを追加しておきます。 ビルドして実行してみましょ...
  • フルスクリーンで起動する
    フルスクリーンで起動します。 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(...
  • バンプマッピング
    バンプマッピングです。 右はバンプマップ無しで左がバンプマップ有りの状態です。 バンプマッピングは見る角度によっては思ったような効果は出ません。 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...
  • プログレスバーを表示する
    プログレスバーを表示します。 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...
  • 総集編:Lunaインターフェース
    ...UP|BS_GROUPBOX,                  170,50,130,110,hStaticWnd,(HMENU)ID_GROUP,hInst,NULL);     hRadio1 = CreateWindow(L BUTTON ,L NARUTO ,WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,                  175,70,100,30,hStaticWnd,(HMENU)ID_RADIO1,hInst,NULL);     hRadio2 = CreateWindow(L BUTTON ,L クレイモア ,WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,                  175,95,100,30,hStaticWnd,(HMENU)ID_RADIO2,hInst...
  • C++/CLI:ツールストリップコンテナ
    基本プロジェクトに ToolStripContainer を配置し、 フォームの四辺にドッキングするをクリックします。 このようになりました。 デフォルトではフォームの四辺の上側にツールバーを置くエリアがあります。 フォームの四辺にあるコンテナパネルをクリックするとツールストリップを 配置するエリアが現れます。 とりあえず、上側のエリアにツールストリップを配置します。 ツールバーにボタンとラベルを追加しました。 ビルドして実行してみましょう。 ツールバーのつまみをドラッグしてフォームの四辺に移動させると ツールバーの位置を変える事ができます。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace ...
  • WAVの一部を抜き出し
    WAVファイルの一部分を抜き出します。 #include stdio.h #include string.h   #define FileName Warp1_ste.wav //適当な曲を探して下さい。   // 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{     char            Riff[4];         // RIFFヘッダ     unsigned int    F...
  • 再生速度の変更
    データはそのままでサンプリングレートをいじるだけで 再生スピードを変えます。   #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...
  • キーボードの状態を取得
    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...
  • サンプリングビット変換
    サンプリングビット数を16Bitから8Bitに変換します。 音質は少し劣化しますがデータサイズは半分になります。 #include stdio.h #include string.h   #define FileName Warp1_ste.wav //適当な曲を探して下さい。   // 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{     char            Riff[4];    ...
  • 左右のチャンネルを操作
      ステレオWAVファイルを読み込んで左右の音を消してみます。 http //taira-komori.jpn.org/freesound.html こちらのサイトで効果音を借りてきました。   #include stdio.h #include string.h   #define FileName Warp1_ste.wav //適当な曲を探して下さい。   // 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 WaveFile...
  • モノラル化
    ステレオWAVファイルからモノラルのWAVファイルにします。 左チャンネルのみと右チャンネルのみ、左右のチャンネルを mixしたものを一度に作成します。 #include stdio.h #include string.h   #define FileName Warp1_ste.wav //適当な曲を探して下さい。   // 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{     char    ...
  • フルスクリーンとウインドウモードの切り替え
    GLUT のゲームモードを使用するとフルスクリーンで起動できました。 しかし、ゲームモードを使用するとウインドウモードにする事はできません。 一般的なゲームアプリではフルスクリーンとウインドウモードを何度も切り替え できるのが普通です。 では具体的にどうするのかというと、GLUT にはそのような機能はありませんので WindowsAPI を使って実装します。 今回のプログラムはスペースキーを押すとフルスクリーンとウインドウモードを交互に 切り替えます。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 640 #define HEIGHT 480 bool ...
  • 分割ウインドウ
    二つのエディットコントロールを使ってウインドウを分割したように 見せます。 この類の処理は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...
  • 球を表示して移動する
    球を表示して平行移動します。 glTranslatef(x,y,z) に値をセットする事で平行移動の行列を適用できます。 glutSolidSphere(半径,経線の分割数,緯線の分割数) で球を表示できます。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //平行移動用 float x = 0.0f; bool flag = false; //緑 GLfloat green[] = { 0.0, 1.0, 0.0, 1.0 }; //ライトの位置 GLfloat lightpos[] = { 200....
  • コンボボックスを表示する
    コンボボックスです。 右にあるボタンを押すとドロップダウンして項目が現れます。   resource.h #define IDR_MENU1 100 #define ID_EXIT   101 #define ID_COMBO  104 #define ID_Help   110 #define ID_STATUS 111 #define IDM_END   114 #define ID_OPTION 115 menu.rc #include windows.h #include resource.h IDR_MENU1 MENU BEGIN     POPUP File     BEGIN         MENUITEM Exit ,                    ID_EXIT     END     MENUITEM Option       ID_OPT...
  • 円錐の表示と拡大縮小
    円錐を拡大縮小表示します。 glScalef(X軸,Y軸,Z軸) で拡大縮小し、 glutSolidCone(底面の半径,円錐の高さ,円の分割数,高さの分割数) で円錐を表示します。 行列の適用順序を間違えると意図している物とは別の状態になってしまいます。 それは、それぞれが原点 (0,0,0) を基準に適用するからです。 一般的には、拡大縮小してから回転し、最後に平行移動すると意図する状態になるでしょう。 (DirectXの場合) *OpenGLの場合は逆順。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 ...
  • ジョイパッドの状態を取得(XInput)
    Xinput を使ってジョイパッドの情報を得ます。 現在は対応コントローラーが少ないですが、これからは増えてこの規格が標準に なるでしょう。多分。(マイクロソフトが、そうしたいらしいので。) どう見ても DirectInput の方が高機能ですが、これからは XInput を使いましょう。 Xbox 360 Controller Emulator なる物もあるので Xbox 360 のPC用コントローラーを 持っていなくとも対応させる事はできます。 今回のプログラムはアナログ、デジタルの方向キーで緑の四角形を移動させます。 XInput 対応コントローラーかエミュレータでなければ動きません。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #prag...
  • メッセージボックスを表示する
    メッセージボックスです。 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       BE...
  • 法線
    法線ベクトルです。面法線とか頂点法線とかがあります。 法線ベクトルとは、2次元ではある線に垂直なベクトル、3次元ではある面に 垂直なベクトルの事です。 三角ポリゴンは、3つの頂点の並びにより面から垂直に出るベクトルが計算できます。 これが面法線です。 面法線は、光の計算をするときや面の表裏を判定する時に使われます。 今回は三角ポリゴンの面法線を強制的に設定してみました。 するとライトの位置やポリゴンの材質、色や視点など全く変えていないにもかかわらず ポリゴンの色が変化します。 これは固定機能パイプラインが描画で使用する面法線が変化させられているために ポリゴンの向きは全く変わっていないのに別の方向を向いているものとして計算されるからです。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENT...
  • 行列:行列の適用
    では、glLoadIdentity(); を glLoadMatrixf(mat); で単位行列を設定するように 置き換えてみます。 チュートリアル 固定機能編 の 球を表示して移動する のプログラムを書き換えてみました。 全く同じに動作しています。 単位行列は GLfloat mat[]={  1,0,0,0,  0,1,0,0,  0,0,1,0,  0,0,0,1 }; という感じで16個の要素を持った変数に格納します。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //平行移動用 float x = 0.0f; bool flag = false; ...
  • ツールバーを表示する
    ツールバーを表示します。 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 #define IDM_NEW    1010 #define IDM_OPEN    1020 #define IDM_SAVE    1030 #define IDM_COPY    1040 #define IDM_PASTE   1050 #define IDM_DELETE  1060 #define IDM_CUT     1070 menu....
  • ズームイン・アウト
    ズームイン・アウトです。 gluPerspective(視野角,アスペクト比, 描画する範囲(最も近い距離,最も遠い距離)); の 視野角を増減させるとズームインとズームアウトと同じ効果があります。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //回転用 float anglex = 0.0f; //オレンジ GLfloat orange[] = { 1.0f, 0.6f, 0.0f, 1.0f }; //赤 GLfloat red[] = { 1.0, 0.0, 0.0, 1.0 }; //ライトの...
  • 行列:平行移動行列
    平行移動行列です。 まず、以下の図を見て下さい。 OpenGL と DirectX では行列の行と列の並びが違います。 ややこしいですね。 しかし、いずれも、13番目の要素がX軸、14番目の要素がY軸、15番目の要素がZ軸の 平行移動成分を表している事に変わりはありません。 glMultMatrixf();を使うと行列を掛け合わせる事ができます。 ではまた、チュートリアル 固定機能編 の 球を表示して移動する のプログラムを 平行移動行列を掛け合わせるように書き換えてみました。 全く同じに動作している事がわかると思います。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIG...
  • 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 }...
  • チェックボックスを表示する
    チェックボックスです。 ラジオボタンと違って複数選択可能です。 resource.h #define IDR_MENU1  100 #define ID_EXIT   101 #define ID_CHECK 104 #define ID_Help   107 #define ID_STATUS  108 #define IDM_END   114 #define ID_OPTION 115 menu.rc #include windows.h #include resource.h IDR_MENU1 MENU BEGIN     POPUP File     BEGIN         MENUITEM Exit ,                    ID_EXIT     END     MENUITEM Option       ID_OPTION  MEN...
  • メッセージボックスを表示する(64ビット)
    メッセージボックスです。 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 #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 てすつ , ...
  • ステータスバーを表示する
    前回と同様にしてステータスバーを表示してみました。 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 ...
  • マウスイベント
    マウスイベントです。 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 ...
  • .MQOを読み込んで表示する(GLMetaseq)
    メタセコイアのモデルデータ .mqo を読み込んで表示してみます。 言わずもがなOpenGLはただのグラフィックライブラリ、モデルデータの読み込みなども 全て自分でコードを書かなくてはなりません。 DirectXの .x 形式や .sdkmesh 形式のようなものと読み込みライブラリがあらかじめ 用意されていると楽ですが、そんなものはありません。 ただ、工学ナビ さんのサイトでmqoの読み込みライブラリ GLMetaseq がありますので 手始めに使ってみましょう。http //kougaku-navi.net/ARToolKit/index.html↑のページから GLMetaseq をダウンロードして、ヘッダファイルとソースファイルを プロジェクトに追加します。 GLMetaseq では glut を使用しているので GLMetaseq.h の227行目の#include をコメントア...
  • .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...
  • メニューを表示する
    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   ...
  • 行列:拡大縮小行列
    拡大縮小行列です。 OpenGL、DirectX 共に行と列の方向が変わっても同じです。 チュートリアル 固定機能編 の 円錐の表示と拡大縮小 のプログラムを置き換えました。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include math.h #define PI 3.1415926 #define WIDTH 320 #define HEIGHT 240 //拡大縮小用 float size = 1.0f; bool flag = false; //水色 GLfloat aqua[] = { 0.0, 1.0, 1.0, 1.0 }; //ライトの位置 GLfloat lightpos[] = { 200.0, ...
  • 隠面消去
    隠面消去です。 デプスバッファ(DirectXではZバッファ)と呼ばれるもので視点からの奥行き情報 を持っているものです。 今回は、これをON/OFFするプログラムを作りました。 最初に黄色のポリゴンが描画されて次に紫のポリゴンが描画されます。 デプスバッファが有効な時は後から描画された紫のポリゴンがきちんと隠れています。 デプスバッファが無効な時は描画の順番通りに描画されます。 右の画像は紫のポリゴンが奥にあるにもかかわらず手前の黄色のポリゴンを覆っています。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 24...
  • 直方体を表示してみる
    直方体を描画します。 少し冗長なコードになりましたがこの方が解りやすいと思います。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //回転用 float angle = 0.0f; //ピンク GLfloat Pink[] = { 1.0, 0.5, 0.5, 1.0 }; //ライトの位置 GLfloat lightpos[] = { 200.0, 500.0, 0.0, 1.0 }; //直方体 void cuboid(float width,float height,float depth) {...
  • ビルボード
    ビルボードです。 ビルボードというのは常に視点(カメラ)を向く板の事です。 古くは樹木や球のポリゴン数を減らすために用いられました。 現在では火花や雪などのパーティクルとして主に使用されます。 ビルボードにはビュー行列を逆行列にする方法もありますが、 今回はもっと簡単に実装できるやり方がありましたので紹介して おきます。 3D空間のビルボードオブジェクトの中心位置を保存しておき、 glLoadIdentity(); して初期化します。 中心位置から画像サイズ分だけ+-してポリゴンを描画すると 行列計算なしでビルボードができます。   ファイル main.cpp lodepng.cpp lodepng.h tree.png map.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainC...
  • BMP画像を表示する
    BMP画像を表示します。 BMPと言っても今回は24bit画像に限定します。 知っての通り、最もポピュラーで広く使われている画像形式ですが BMP形式は種類が複数存在し、データサイズも大きいので 最近では、あまり使われなくなってきました。   ファイル main.cpp sample.bmp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #define WIDTH 320 #define HEIGHT 240 class BMP { public  unsigned long sizeX;  //横  unsigned long sizeY; //縦  char *...
  • リッチテキストエディットコントロールを表示する
    リッチテキストエディットです。 頑張れば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...
  • アップダウンコントロールを表示する
    アップダウンコントロールを表示します。 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 てすつ ,...
  • リストボックスを表示する
    リストボックスです。 複数の項目から選択できます。    resource.h #define IDR_MENU1 100 #define ID_EXIT   101 #define ID_LIST  104 #define ID_Help   110 #define ID_STATUS 111 #define IDM_END   114 #define ID_OPTION 115 menu.rc #include windows.h #include resource.h IDR_MENU1 MENU BEGIN     POPUP File     BEGIN         MENUITEM Exit ,                    ID_EXIT     END     MENUITEM Option       ID_OPTION  MENUITEM ...
  • モーダルダイアログを表示する
    ダイアログが出ている間、ウインドウを操作できなくなるダイアログを モーダルダイアログと言います。 今回はこれを表示してみます。 resource.h #define IDR_MENU1  100 #define ID_EXIT   101 #define ID_Dialog  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 #define ID_TEXT   109   menu.rc #include windows.h #include resource.h IDR_MENU1 MENU BEGIN     POPUP File     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  #define ID_OPEN  109  #define ID_SAVE  110 menu.rc #include resource.h   IDR_MENU1 MENU  BEGIN      POPUP File  ...
  • テッセレーション
    テッセレーションです。 面を再分割してくれます。 今回のプログラムはスペースキーを押すとテッセレーションで表示します。 ファイル 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...
  • @wiki全体から「PBO」で調べる

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