OpenGLプログラミングメモ内検索 / 「ボリュームの変換」で検索した結果
-
ボリュームの変換
ボリュームを変えます。 最大値、最小値を超えた場合は音が割れてしまうので なるべく範囲内のボリュームにした方が良いです。 今回はサイン波の生成で作成した.wavの音を0.5倍したので 振幅が半分になっているのがわかると思います。 #include stdio.h #include stdlib.h #include string.h #include algorithm using namespace std; #define INFileName sin.wav #define OUTFileName amp.wav #define AMP 0.5 //倍率 // defines #define STR_RIFF RIFF #define STR_WAVE WAVE #define STR_fmt fmt #...
-
sin波状にボリューム変換
sin波状にボリュームを変化させます。 #include stdio.h #include stdlib.h #include string.h #include algorithm using namespace std; #define INFileName in.wav #define OUTFileName sinamp.wav #define PAI 3.141592653589793 #define Length 0.01 // defines #define STR_RIFF RIFF #define STR_WAVE WAVE #define STR_fmt fmt #define STR_data data #define WAV_MONAURAL 1 #define WA...
-
メニュー
...生成 三角波の生成 ボリュームの変換 sin波状にボリューム変換 左右バランスの変更 カラオケ化 逆再生 WAVを直接再生 エコー ▲▲▲▲▲ ▼ サウンド編 MIDIファイル WindowsメディアプレイヤーのMIDI音源を変えてみる FluidSynthの.libをVisual Studioでコンパイルする FluidSynthでMIDI再生 ZynAddSubFX TiMidity++(TWSYNTH) ▲▲▲▲▲ ▼ サウンド編 OpenAL .wav再生(OpenAL) ストリーミング再生(.wav)(OpenAL) .ogg再生(OpenAL) 3Dサウンド(OpenAL) .mid再生(OpenAL) ▲▲▲▲▲ ▼ サウンド編 DirectSound .wav再生(DirectSound) ストリーミング再生(Direc...
-
幾何変換
幾何変換の解説です。 幾何変換とは、座標変換の ①平行移動 ②拡大、縮小 ③回転 の変換の事です。 今まで使用してきた glTranslatef とか glRotatef 等は アフィン変換と言います。 アフィン変換とは、形を変形させないで平行移動や回転、拡大縮小などの 変換をする事を言います。 スキンメッシュアニメーションは形を変形するアニメーションなので 幾何変換を用います。
-
クォータニオンと回転行列の変換
平行移動、拡大縮小と来たら次は回転です。 しかし、回転行列を単純に線形補間した場合は意図した結果にはなりません。 もちろん、X軸のみとかY軸のみ、Z軸のみの回転情報であった場合は上手くいきますが、 ほとんどのケースでそれらが混載していると思います。 どうすれば良いかと言うと、任意軸回転を線形補間してやると意図する結果になります。 任意軸回転と言えばクォータニオンですね。 2つの回転行列があったとして回転情報をクォータニオンに変換して、それを線形補間し、 補間されたクォータニオンを今度は回転行列に変換してやると2つの回転行列の間を 綺麗に補間できるでしょう。 //#pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include s...
-
左右バランスの変更
音を左右に振ります。 #include stdio.h #include stdlib.h #include string.h #include algorithm using namespace std; #define INFileName sin.wav #define OUTFileName balance.wav #define PAI 3.141592653589793 #define Length 3.00 // defines #define STR_RIFF RIFF #define STR_WAVE WAVE #define STR_fmt fmt #define STR_data data #define WAV_MONAURAL 1 #define WAV_STERE...
-
C++/CLI:ドッキングウインドウ その1
ドッキングウインドウというのは便利ですね。 MFCとかC#やVisual BASICにはドッキングウインドウのコントロールがあるので簡単にプロジェクトに追加して ドッキングウインドウのアプリケーションを作る事ができます。 C++/CLIにはドッキングウインドウのコントロールはありません。。。 ライブラリを使ってドッキングウインドウをしても良いのですが、独自のグラフィックを使っていたりして如何にもライブラリ使いました。。。 という事がバレバレになってしまいます。 そこで今回はドッキングウインドウを自作してみようと思います。 ドッキングウインドウを作るにあたって、パネルコントロールが使えそうなので、これでやってみようと思います。 メニューのファイル、新規作成のプロジェクトを選択します。 CLR 空のプロジェクト(.NET Framework) C++ Windows コンソール を選択して...
-
続ボーンデフォーム
前回の続きです。 まずはマテリアルを設定します。 左側にあるマテリアルパネル上で右クリックします。 新規マテリアルを選択するとマテリアルウインドウが 出てくるので、そのまま閉じます。 オブジェクトパネルの Root obj1 を選択します。 メニューの ポリゴン 選択マテリアルをセット を選択します。 これでマテリアルが設定されました。 それでは早速ボーンアニメーションを作成してみましょう。 左側にあるアニメーションパネル上で右クリックします。 新規アニメーションを選択するとアニメーションウインドウが 出てくるので、そのまま閉じます。 下側の1~29までの数値が書いてある所がキーフレームです。 キーフレームの隣の 1.000 となっている所を 0.000 にしてEnterを押します。 キーフレームの 0 の所を選択します。 オブジェクトパネルの Joint2 を選択します...
-
困った時は
当サイトのプログラムが正常に動作しない場合 まずは OpenGL とグラフィックスカードのドライバを最新のものにして下さい。 それでも解決しない場合はコメント板にて連絡を下さい。 コンソール画面を消す #pragma comment(linker, "/SUBSYSTEM WINDOWS /ENTRY mainCRTStartup") 以前のVisual Studio 2012辺りまでは、このプラグマでコンソール画面を消す事ができました。 もちろん今でも可能なのですが、現在のVisual Studio 2022ではデフォルトでプロジェクトの プロパティ、リンカーのシステムのサブシステムの項目が『コンソール (/SUBSYSTEM CONSOLE)』 になってしまっています。 これでは最初からプラグマコメントが入力されているので除去できません。 ...
-
ODE:セットアップ
Open Dynamics Engine http //www.ode.org/ Open Dynamics Engine の場合は GitHub ではなく Bitbucket ですが、Visual Studio の場合は同じやり方で リポジトリをクローンできます。 (2023/9/24 現在の最新版のバージョンは 0.16.4 です。) Get the source code from BitBucket. となっている所を右クリックして、Bitbucket のリポジトリアドレスをコピーしたら いつものようにVisual Studio 2022 でリポジトリをクローンしてコンパイルするだけです。 GitHub のリポジトリをクローンしてコンパイルする方法は OpenGLプログラミングメモの別ページで新たに作りますのでそちらを参考にして下さい。 ...
-
fluidsynthの.libをVisual Studioでコンパイルする
FluidSynth https //www.fluidsynth.org/ こちらに FluidSynth という、サウンドフォント シンセサイザーがあるので使わせて頂こうと思います。 2023年9月18日現在、最新版の FluidSynth 2.3.2 をダウンロードします。 Recent News の Released FluidSynth 2.3.2 をクリックしてページを移り、 https //github.com/FluidSynth/fluidsynth/releases/tag/v2.3.2 となっている所を クリックします。 64bitは fluidsynth-2.3.2-win10-x64.zip 32bitは fluidsynth-2.3.2-winXP-x86.zip を、ダウンロードして解凍し、Cドライブ C \ に移動させます。 FluidSynth ht...
-
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...
-
C++/CLI:はじめに
では、早速 C++/CLI のアプリケーションを作成してみましょう。 Visual Studio 2012 Express for Windows Desktop を起動します。 ファイル → 新しいプロジェクト を選択し、 VisualC++ → CLR → 空のCLRプロジェクトを選択します。 プロジェクト名は Project1 にしておきます。 プロジェクト → 新しい項目の追加を選択し、 Visual C++ の UI の Windowsフォーム を選択します。 フォームの名前は MyForm.h にしておきます。 すると、このようなフォームデザイナ画面が表示されます。 ツールボックスの Button をクリックしてから MyForm の上で クリックします。 するとフォーム上に button1 が作成されました。 ...
-
設定の仕方
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...
-
Visual Studio 2022 DE Visual C++ 2015
Visual Studio 2022 DE Visual C++ 2015 とは? かつて、Visual Studio 2015 をインストールしようとしてできなかった人が結構居るのではないでしょうか? 何故かインストールに失敗してできなかった人が結構居ると思います。(当サイト管理人もその一人です。。。) Ж できました。。。 Visual Studio 2017 や Visual Studio 2019 、果ては Visual Studio 2022 まであるのに今更何故 2015 なのか? と、思う方は要ると思います。 結論から言うと PhysX の最新版 ver 5.0.2 や ver 4.1 をコンパイルするには Visual C++ 2015でないとコンパイルできないからです。 と、いう訳で Visual Studio 2022 から Visual C++...
-
カラオケ化
完全ではありませんが .wav ファイルからボーカルを除去します。 #include stdio.h #include stdlib.h #include string.h #include algorithm using namespace std; #define INFileName sound.wav #define OUTFileName karaoke.wav #define PAI 3.141592653589793 #define Length 3.00 // defines #define STR_RIFF RIFF #define STR_WAVE WAVE #define STR_fmt fmt #define STR_data data #define WAV_MONAU...
-
Bullet:セットアップ
こちらのページで Bullet Physics が公開されています。 Bullet Physics https //pybullet.org/wordpress/ (2023/9/24 現在の最新版のバージョンは 3.25 です。) Download の所をクリックすると GitHub の中の紹介ページに飛ぶので1階層戻ります。 Bullet Physics SDK の bullet3 の GitHub のリンクを右クリックして、リンクのアドレスをコピーします。 そしていつものように Visual Studio 2022 を起動して起動ウィザードのリポジトリのクローンを選択します。 リポジトリの場所に先ほどの GitHub のリンクのアドレスを貼り付けてクローンボタンを押します。 ソリューションエクスプローラーのフォルダービューをダブルクリッ...
-
C++/CLI:MDI
基本プロジェクトを立ち上げます。 フォームのプロパティの IsMdiContainer を True にします。 プロジェクトに新しい項目を追加します。 Visual C++ の UI の Windowsフォームを選択し、名前を MDIForm.h にして追加ボタンを押します。 MyForm を選択して、Size を Width 640、Height 480 にします。 MyForm.h のコードを表示して、以下のコードを追加します。 // //TODO ここにコンストラクター コードを追加します // Form^ MDIForm = gcnew Form; int childCount=0; childCount++; String^ formText = String Format( MDIForm {0} , child...
-
サンプリングビット変換
サンプリングビット数を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]; ...
-
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 ...
-
2Dと3Dの描画を切り替える
2Dと言っても、今では3Dを平面的に扱って表示しています。 その方が高速だったからです。 そして、なんと言っても2Dを3Dの一部として扱うと、移動、回転、 拡大縮小が自由自在に行える利点もあります。 そこで2Dと3Dを同時に描画しようとした場合、工夫が必要になります。 上手く切り替えてやらないと3Dも2Dも同じように移動、回転、拡大縮小 してしまいます。 それには、まず3Dを描画してから glPushMatrix(); で階層を降ります。 そして2Dを描画して glPopMatrix(); で階層を上がります。 これを繰り返します。 つまり3Dを親階層として2Dを子階層とします。 なので、子階層で何をしようが、親階層には影響が無いのです。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENT...
-
C++/CLI:ツールストリップコンテナ
基本プロジェクトに ToolStripContainer を配置し、 フォームの四辺にドッキングするをクリックします。 このようになりました。 デフォルトではフォームの四辺の上側にツールバーを置くエリアがあります。 フォームの四辺にあるコンテナパネルをクリックするとツールストリップを 配置するエリアが現れます。 とりあえず、上側のエリアにツールストリップを配置します。 ツールバーにボタンとラベルを追加しました。 ビルドして実行してみましょう。 ツールバーのつまみをドラッグしてフォームの四辺に移動させると ツールバーの位置を変える事ができます。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace ...
-
再帰関数
以前、『階層メッシュアニメーション』や『スキンメッシュアニメーション』の読み込みでは 再帰関数を使うと言いました。 入れ子構造になっているデータは入れ子構造の読み出しプログラムで読み込むのが最適です。 その入れ子構造を関数で作る場合に便利なのが再帰関数です。 再帰関数というのは関数が自分自身を呼び出す物です。 しかし、どんな関数でも良い訳ではありません。 必ず、元の場所に戻れるような仕組みになっていなければ、無限に自分自身を呼び出し続け、 スタックオーバーフローのエラーになってしまいます。 駄目な例 #include stdio.h void recursive() { recursive(); } void main() { recursive(); getchar(); } 良い例 #include stdio.h int stack=0; void rec...
-
ステンシルテスト
ステンシルテストです。 ステンシルバッファの値を調べて描画するかしないかを決める事ができます。 画面の切り抜きができるようになります。 ファイル 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.0, 150.0, -500.0, 1.0 }; void SquareF...
-
再生速度の変更
データはそのままでサンプリングレートをいじるだけで 再生スピードを変えます。 #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...
-
.Xのスキンメッシュアニメーションファイルを解析
取りあえず、DirectX SDK に付属するビューワーで再生の確認をします。 本来はスタティックメッシュであるはずの bone1.mqo が、 ウネウネ変形しています。 例によって、テンプレート部分は除去しました。 xof 0303txt 0032 # Global definition. AnimTicksPerSecond { 3000; } # Materials definition. Material Material_1 { 0.800000;0.800000;0.800000;1.000000;; 5.000000; 0.300000;0.300000;0.300000;; 0.000000;0.000000;0.000000;; } # Models definition. Frame Model { FrameTransformMatrix { 1...
-
スキンメッシュアニメーションの原理3
スキンメッシュアニメーションの真髄、頂点に座標変換を 施す処理ですが、具体的には 頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列 という事になります。 スキンメッシュアニメーションの仕組みは ①ボーンが階層アニメーションを行っている。 ②頂点座標データを書き換える。 の次は ③頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列 と、なりそうですが、これで完全ではありません。 詳しくは言いませんが、これだけではモデルがバッキバキに変形してしまいます。 では、どうスムーズに変形させるかと言うと、頂点が各ボーンから受ける影響の 重み(ウェイト)を設定してあげれば良いですね。 解説は次回に回します。
-
メニューを表示する
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 ...
-
再びキーフレーム
長らく道を逸れましたが、ここで再びキーフレームに戻ります。 .Xのアニメーションキーのキータイプ情報 0…回転 w,x,y,zの順にクォータニオンデータ 1…拡大縮小 x,y,zの順に拡大縮小データ 2…平行移動 x,y,zの順に平行移動データ 4…合成行列 回転、拡大縮小、平行移動行列が掛け合わされた4×4行列データ まず、最初に知っておかなくてはならない事があります。 それは、当サイトで使用している Cyberdelia は、合成行列タイプの アニメーションデータは階層構造が正しく生成できないという事です。 詳しくは Cyberdelia に付属のヘルプを参照して下さい。 とは言っても、合成行列でないタイプの方は正しく出力されますので、 それを元に合成行列を作成し、単純なキーフレームアニメーションを表示して みたいと思います。 とりあえず、平行移動行列だけに対応したプログラムを作成...
-
MESH VIEW(メッシュビューア)
MESH VIEW (OPENGL プログラミングメモ) ver1.16 ダウンロードはこちら MeshView ver1.16.zip //////////////////////////////////////////////////////////////////////////// MeshView [OPENGL プログラミングメモ] ver1.16 作者 OPENGLプログラミングメモ ホームページ(OPENGLプログラミングメモ) https //w.atwiki.jp/opengl/ ホームページ2(MeshView) http //www.meshview.jp/ ///////////////////////////////////////////////////////////////////////...
-
ボーンデフォーム
表示メニューの正射影を選択して正射影(Ortho)にします。 表示メニューの正面を選択して真正面から見た図にします。 ポリゴンツールを押してモデルの全体を確認します。 ジョイントツールを押します。 この状態でモデルビュー上を左クリックするとジョイントが作成できます。 デフォルトではジョイントの表示が小さいので大きくします。 ファイル シーン設定を選択します。 表示半径のジョイントを8にしてOKボタンを押します。 最初のジョイントをモデル下部に作成し、次のジョイントをモデル中心より 少し下に作成します。 すると一つ目のボーンが出来上がりました。 続けて、モデル上部より少し下にジョイントを作成し、完成です。 完成したら選択ツールを押してジョイントツールを終了します。 オブジェクトパネルのobj1とJoint1をShiftキーを押しながら選択します。 オブジェクトメニューのスムーズスキ...
-
ボーンオフセット行列
以下は SkinWeights チャンクですが、最後の方にある matrixOffset は ボーンオフセット行列と呼ばれます。 SkinWeights { Joint_2 ; //transformNodeName ボーン名 32; //nWeights ボーンの影響を受ける頂点の数 0, // ↓ vertexIndices ボーンの影響を受ける頂点のインデックス ・ ・ ・ 0.001631, // ↓ weights ボーンの影響を受ける各頂点の重み ・ ・ ・ 1.000000,0.000000,-0.000000,0.000000, // ↓ matrixOffset 0.000000,1.000000,-0.000000,0.000000, //メッシュの頂点をボーン空間に変換する行列 -0.000...
-
メニューを表示する(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...
-
キーフレーム
キーフレームですが、.Xのアニメーションキーのキータイプ情報は 0…回転 w,x,y,zの順にクォータニオンデータ 1…拡大縮小 x,y,zの順に拡大縮小データ 2…平行移動 x,y,zの順に平行移動データ 4…合成行列 回転、拡大縮小、平行移動行列が掛け合わされた4×4行列データ となっています。 回転の情報がクォータニオンになっているのは知っての通り、ジンバルロックを 避けるためです。そして、このクォータニオンは行列を使っています。 キータイプの4が合成行列になっている事もあり、ここから先は行列の知識が 必要になると思います。 そこで、次回からは階層アニメーションからちょっと逸れて、 行列に関する解説に入ります。
-
ツリービューを表示する
ツリービューを表示します。 階層構造を表現するのに便利です。 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_TREEVIEW 1000 menu.rc #include resource.h IDR_MENU1 MENU BEGIN POPUP File BEGIN MENUITEM Exit , ID_EXIT END POPUP Tes...
-
C++/CLI:ラベル
基本プロジェクトのフォームデザイナ画面の Label をクリックして フォームの適当な場所でクリックします。 するとラベルが作成されます。 そのラベルのプロパティの Font を選択します。 するとフォントダイアログが出てくるのでフォントサイズを24辺りにします。 プロパティの Text をクリックして ラベルでーす。に変えます。 ビルドして実行してみましょう。 簡単にスタティックテキストが表示できましたね。 もちろん、プログラムで動的にテキストを変更する事も可能です。 今回のプログラムコードは以下の通りです。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace Project1...
-
リストビューを表示する
リストビューです。 JAVAではテーブルとも呼ばれます。 頑張ればExcelもどきも作れるかもしれませんね。 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_LISTVIEW 1000 menu.rc #include resource.h IDR_MENU1 MENU BEGIN POPUP File BEGIN MENUITEM Exit , ID_EXI...
-
.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...
-
正規化
正規化です。 正規化(normalization)とは、あるベクトルを向きが同じで長さが 1 のベクトルに 変換することを言います。 以下の計算式を使用します。 絶対値(ベクトルの大きさ) |A| を求めるには次のようにします。
-
ズームイン・アウト
ズームイン・アウトです。 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 }; //ライトの...
-
ポップアップメニューを表示する
右クリックでポップアップメニューを表示します。 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 #define ID_1 110 #define ID_2 111 #define ID_3 112 #define ID_popup 113 #define IDM_END 114 menu.rc #include windows.h #include resour...
-
行列:逆行列
逆行列です。 逆行列とは、あるN×N行列があったときと積をとると N×N行列の単位行列になる行列の事をの逆行列と呼び、と書く。 つまり、各種アフィン変換を打ち消して単位行列(初期状態)に戻す行列の事です。 4×4行列の逆行列の公式 の時、逆行列が存在して、 で、求められます。 b は以下のようになります。
-
スキンメッシュアニメーションの原理4
ここまでのおさらいです。 ①、ボーンが階層アニメーションを行っている。 ②、頂点座標データを書き換える。 ③、(頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列) × 頂点ウェイト ④、 ③を影響するボーンの数だけ処理して足す(頂点ブレンド) ⑤、 ④で得られた頂点座標を元に頂点法線を再設定する 以上でスキンメッシュアニメーションの処理は完成です。
-
ワイヤーフレーム表示
ワイヤーフレーム表示です。 それっぽくするために白を割り当てました。 本当であればライトの効果を切ると正にワイヤーフレームとなるのですが 今回は球をわかりやすくするためにライトはそのままです。 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....
-
行列:零行列
零行列です。 零行列は全ての要素が 0 になっているものです。 平行移動行列、回転行列、拡大縮小行列を解説したので、やっと 単位行列の意味が解ります。 まず、平行移動成分を見てみましょう。 X軸、Y軸、Z軸全てが 0 になっていますね。 そして回転成分は cosθ の所は 1 で sinθ と -sinθ の所が 0 に なっています。 θ(シータ)には角度をラジアンに変換したものが入ります。 cos(0) の解は 1 です。 sin(0) の解は 0 です。 -sin(0) の解は 0 です。 つまり、 θ には 0 が入る事になり、回転角度は 0°という事になります。 X軸、Y軸、Z軸全てが 0 になっていますね。 そして、拡大縮小成分は見ての通り、全ての軸が 1 となっています。 つまり、拡大率は 1倍 という事ですね。 仮に零行列を掛け合わせると全てが 0 になってしま...
-
コメント板
簡易掲示板です。 何かありましたらコメントを。 てすと -- 管理人 (2010-03-22 11 30 06) directXのホウノライブラリは開発中止になったんですか? -- 人間 (2010-09-26 23 25 06) OpenGL最近勢いづいてていい感じですね。C#+OpenTKの開発のしやすさもなかなかすごいし、ゲーム業界もOpenGLにシフトしないかな。 -- shocker (2010-09-29 02 37 52) カンリニンサァァアアーーーン -- 人間 (2010-10-05 21 44 33) DX Wrapperライブラリの開発は無期限停止状態です。 -- 管理人 (2010-10-10 19 40 54) ゲーム業界でもPC、XBOX、DC以外はOpenGL採用の方向になっているようです。 -- 管理人 (...
-
ソフトシャドウ
ソフトシャドウです。 影の外側を、ぼやけさせます。 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 sampler2DShadow shadowMap; uniform float dis;//サンプリング変位 float shadow = 0.3...
-
.wavを再生する(DirectMusic)
DirectInput の時と同じようにウインドウハンドルさえ取得できれば DirectMusic を freeglut と組み合わせて使用できます。 DirectMusic は現在は更新されておらず廃止予定?だそうです。 Windows7 では 32bit 版では DirectMusic を使用できますが 64bit 版にはありません。(XPモードなら使用できる?) いずれにしても、DirectMusic を使い続ける事は推奨できません。 今回のプログラムは DirectX SDK August2007 の参照設定を 使用しています。 *(2014.3.28追記) Windows8においてもWindows7同様の状態です。 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω...
-
シャドウマッピング
シャドウマッピングです。 一時的に視点を光源に移してみると光の当たる部分を見る事ができます。 その時の見えない部分=障害物=デプスバッファの値が影となります。 オブジェクトが別のオブジェクトに落とす影は、もちろんの事、 オブジェクト自身が自らに落とす影も描画する事ができます。 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 v...
-
板ポリゴンを表示する
ポリゴンを描画すると言っても、実は既に図形描画関連のページや 画像表示関連のページでも使っています。 DirectXとは違い、OpenGLでは三角ポリゴンだけではなく四角ポリゴンも 使用可能です。 三角ポリゴンしか描画できないDirectXでは、3Dモデルファイルなども全て、 四角ポリゴンを三角ポリゴンに分割しなくてはなりませんでした。 すると四角ポリゴンの数だけ変換後のポリゴン数が増えて描画速度に影響します。 当然、ワイヤーフレームで表示したいときも四角ポリゴンが使用できないと 意図する映像が作れなかったりします。 ここだけ見てもOpenGLの方が優れていると言っても過言ではありません。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #inclu...
-
@wiki全体から「ボリュームの変換」で調べる
更新順にページ一覧表示
|
作成順にページ一覧表示
|
ページ名順にページ一覧表示
|
wiki内検索