OpenGLプログラミングメモ内検索 / 「設定の仕方」で検索した結果
-
設定の仕方
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...
-
PNG画像の一部をストレッチ描画する(LodePNG)
...っているようですので設定の仕方のページから 当サイトで使用しているバージョンをインストールして下さい。) このLodePNGは.cppファイルと.hファイルのみで構成されているので手軽に組み込めます。 zlib も libpng も何も使わずに.cppソースのみでPNG画像が読み込めます。 また、LodePNGは、どのように使ってもよいそうです。再配布も可能です。 作者への連絡も必要ないそうです。素晴らしいですね。 使い方も簡単で LodePNG_loadFile で読み込んで LodePNG_decode で、デコード します。 画像の一部を断片的に描画するようにするにはST座標(DirectXではUV座標)を指定して あげれば良いです。 『画像を表示する』のチュートリアルでは、glTexCoord2f(0.0f, 0.0f); で指定していました。 これだと、0.0~1.0の範囲...
-
画像の一部をストレッチ描画する(LodePNG)
...必要になります。 『設定の仕方』を参考にインストールしてください。 下の画像は、tip.png の一部を描画しています。 tip.png #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include gl/glew.h #include GL/freeglut/freeglut.h #include stdio.h #include lodepng.h #define WIDTH 320 #define HEIGHT 240 //サイズ用構造体 struct SizeRECT{ int x; int y; int width; int height; }; GLuint texture; //サイズセット void SetSizeRECT(SizeRECT* ...
-
メニュー
...nGLを使うのか? 設定の仕方 困った時は 考察 PC用語の独自調査 GitHubの使い方 Visual Studio 2022 DE Visual C++ 2015 Visual Studio 2017 Expressを入手する MESH VIEW(メッシュビューア) チュートリアルリンク ▼固定機能編へ ▼固定機能 スタティックメッシュ編へ ▼固定機能 階層メッシュアニメーション編へ ▼固定機能 スキニング編へ ▼シェーダー GLSL編へ ▼シェーダー 画像フィルタ偏へ ▼3Dライブラリ編 Irrlicht編へ ▼3Dライブラリ編 Ogre編へ ▼当たり判定 2D編へ ▼当たり判定 3D編へ ▼物理演算 Bullet Physicsへ ▼物理演算 PhysXへ ▼物理演算 Open Dynamics Engineへ ▼GPGPU CUDAへ ...
-
C++/CLI:ツールバー
...ンを設定します。 *設定の仕方に Visual Studio 2012 のアイコンライブラリーの入手方法が あるので参考にしてください。 今回は、Visual Studio 2012 アイコンライブラリーを Cドライブにインストールし、 C \VS2012 Modern Image Library\x--archive--x\Objects - VS2012\png_format\Office and VS\ にある画像を使いました。 後は適当にボタンとかセパレーターとかを追加しておきます。 ビルドして実行してみましょう。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace Project1; [STA...
-
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 のリンクのアドレスを貼り付けてクローンボタンを押します。 ソリューションエクスプローラーのフォルダービューをダブルクリッ...
-
コメント板
...りがとうございます。設定の仕方のページでLodePNGを再配布致しますので、それを使用して下さい。 -- 管理人 (2011-01-30 21 50 15) Candyさん、どういった事ができないのでしょうか? -- 管理人 (2011-01-30 21 54 58) LodePNGの対応ありがとうございます。 今度はGLMetaseq.hなのですが、freeglutの互換のためglut.hをインクルードしてもfreeglutをインクルードしてくれるようなので、GLMetaseq.hを書き換える必要はなさそうです。 -- メアセコイタ (2011-02-02 22 59 10) すいません、これではfreeglut_std.hだけでfreeglut_ext.hが含まれないので、別にインクルードする必要がありそう・・・ -- メアセコイタ (2011-02-07 ...
-
マテリアルの設定
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 ...
-
スキンメッシュアニメーションの仕組み
さて、お待ちかねの『固定機能 スキニング編』です。 スキンメッシュアニメーションはプログラマーにとって一つの壁に なっていると思います。 まず、いきなり DirectX SDK のサンプルとかを見ても、 ( ゚д゚)・・・ ( ゚д゚)ポカーン となる事受けあいです。 当サイトでは少しずつ、その仕組みを解説し、攻略していこうと思います。 では次回、スキンメッシュのアニメーションXファイルを作成して、 その中身を見て見ましょう。
-
3Dシーンの設定と立方体の表示
『2Dと3Dの描画を切り替える』では3Dシーンの設定をしていませんでした。 何も設定しないとライトや視点などは反映されません。 gluPerspective で視野角とアスペクト比、描画範囲を設定し、 gluLookAt で視点を設定、 glLightfv でライトの設定、 glMaterialfv でライトの反射を設定します。 glutSolidCube(size) で立方体を表示します。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 //赤 GLfloat red[] = { 1.0, 0.0, 0...
-
再生位置の設定
再生位置を設定します。 今回はスペースキーで一時停止し、再生位置を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(...
-
スキンメッシュアニメーションの原理3
スキンメッシュアニメーションの真髄、頂点に座標変換を 施す処理ですが、具体的には 頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列 という事になります。 スキンメッシュアニメーションの仕組みは ①ボーンが階層アニメーションを行っている。 ②頂点座標データを書き換える。 の次は ③頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列 と、なりそうですが、これで完全ではありません。 詳しくは言いませんが、これだけではモデルがバッキバキに変形してしまいます。 では、どうスムーズに変形させるかと言うと、頂点が各ボーンから受ける影響の 重み(ウェイト)を設定してあげれば良いですね。 解説は次回に回します。
-
法線の再設定
さて、前回のプログラムでは法線を再設定していないので ライトを有効にするとおかしな描画になってしまいます。 ここで言う法線とは頂点法線の事なので、前回のプログラムで 求められた頂点変換後の頂点座標がそのまま使えます。 一つ注意しないといけないのは頂点法線は正規化してデータに 納めないといけない事です。 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(...
-
WindowsメディアプレイヤーのMIDI音源を変えてみる
Windowsを使っている方は大抵、Microsoft GS Wavetable Synthという音源が 標準で設定されているかと思います。 しかし、この音源はあまり良い音では無いので別の音源に変えてみましょう。 MIDIドライバ のVirtualMIDISynthというソフトを使うとMIDI音源を変える事ができます。 VirtualMIDISynth http //coolsoft.altervista.org/en/virtualmidisynth こちらのサイトでVirtualMIDISynthをダウンロードしてインストールします。 サウンドフォントのリンク集↓ SGM-V2.01 https //archive.org/details/SGM-V2.01 Omega GMGS 2 https //archive.org/details/OmegaGMGS2 GeneralUs...
-
環境光
現実世界では、太陽や照明からの光が様々な物体に反射して光が直接当たらない場所でも 間接的に反射してきた光によってある一定の明るさになっています。 この空間に溢れる光を環境光といいます。 CGでこれを再現するにはラジオシティやグローバルイルミネーションなどがありますが、 計算コストが非常に高く、ゲームなどのリアルタイムな画面更新が求められるプログラムでは とても使う事はできません。 そこで、一般的には割とそれらしく見せるためにシーン全体に影響する一定の色を環境光として 使います。 vec4 ambient = gl_FrontLightProduct[0].ambient; で、OpenGLからアンビエント情報を受け取ります。 これを紐解いていくと、 glLightfv(GL_LIGHT0, GL_AMBIENT, Light); で設定したライトの光の範囲内で glMaterialfv(G...
-
トップページ
ここは、OpenGLについて学習し、その過程を記録するページです。 プログラミングメモとしてご利用下さい。 なにかありましたらコメント板で。 glutCreateWindowの位置を直す編集をした際に「 」以降が消えるという@wikiの仕様に気づかず、 正常に動作しないプログラムを長期に渡り掲載しておりました。 現在、修復作業中です。 直接、コードを記載すると今後、似たような仕様変更で同じ不具合に遭遇するかもしれないので プログラムコードはテキストデータとしてダウンロードする形に今後変更するかもしれません。 アクセス数 - 昨日 - 今日 - 現在-人が閲覧中。 OpenGL講座 3Dプログラミング freeglut C++/CLI @wikiプラグイン @wiki便利ツール @wiki構文 @wi...
-
スキンメッシュアニメーションの原理2
スタティックメッシュを変形させるにはどうすれば良いのでしょう? スタティックメッシュを構成する要素には ①頂点座標 ②法線 ③UV ④マテリアル ⑤テクスチャ 等がありますが、この中の ①頂点座標 を変更してあげれば スタティックメッシュが変形します。 頂点座標を変更すると言っても glTranslatef とか glRotatef 等では モデルビュー行列が変更されるだけで頂点座標そのものは変更できません。 では、何か、頂点座標を変更するようなものがあるかと言うと、 そのようなものは用意されていません。 スタティックメッシュの頂点座標が格納されている配列データを 直接、平行移動やら回転等をしているかのようにデータを書き換えなければなりません。 この場合、あくまでも書き換えるのは表示用のデータで、初期姿勢のデータを 変更してはいけません。 スキンメッシュアニメーションの仕組みは ①ボーンが...
-
ステンシルテスト
ステンシルテストです。 ステンシルバッファの値を調べて描画するかしないかを決める事ができます。 画面の切り抜きができるようになります。 ファイル 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...
-
ジョイパッドの状態を取得(DirectInput)
ウインドウハンドルを取得して DirectInput を使用します。 『ウインドウハンドルさえ取得できれば、何でもできる!!』(アントニオ猪木風) 冗談はさておき、ウインドウハンドルが取得できれば freeglut と DirectInput を 組み合わせて使用する事ができます。 今回のプログラムは青い四角形をジョイパッドの方向キーで移動できます。 DirectInput に対応しているジョイパッドが無いと動作しません。 DirectInput は DirectX8 で更新が停止しており、今後は XInput の使用を マイクロソフトが推奨しています。 *(2014.3.28追記) 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω^;) プロジェクトのプロパティで「C/C...
-
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...
-
カラーマテリアル
カラーマテリアルです。 現在のglColorで設定されている値を使って材質設定します。 SHININESSは設定できません。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdlib.h #define WIDTH 320 #define HEIGHT 240 //回転用 float anglex = 0.0f; //ライトの位置 GLfloat lightpos[] = { 200.0, 150.0, -500.0, 1.0 }; void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEP...
-
固定機能:鏡面反射
鏡面反射です。 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 //回転用...
-
法線
法線ベクトルです。面法線とか頂点法線とかがあります。 法線ベクトルとは、2次元ではある線に垂直なベクトル、3次元ではある面に 垂直なベクトルの事です。 三角ポリゴンは、3つの頂点の並びにより面から垂直に出るベクトルが計算できます。 これが面法線です。 面法線は、光の計算をするときや面の表裏を判定する時に使われます。 今回は三角ポリゴンの面法線を強制的に設定してみました。 するとライトの位置やポリゴンの材質、色や視点など全く変えていないにもかかわらず ポリゴンの色が変化します。 これは固定機能パイプラインが描画で使用する面法線が変化させられているために ポリゴンの向きは全く変わっていないのに別の方向を向いているものとして計算されるからです。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENT...
-
スムースシェーディング
スムースシェーディングです。 とは言っても、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[...
-
行列:行列の合成
行列の合成です。 glMultMatrixf(); がしている事です。 これは単純に行列の積を行っているだけです。 行列 平行移動行列 のプログラムの glMultMatrixf(); を使わずに glLoadMatrixf(); で設定するように変えてみましょう。 全く同じ結果になる事がわかると思います。 ただし、行列は掛け合わせる順番が変わると全く違う物になります。 何やら回りくどい事をしているように感じるかもしれませんが、 それは今回のプログラムでは合成回数が1回だからです。 『スキンメッシュアニメーション』等、行列の合成を何回も何回も しなければならない場合に効率を上げるには glMultMatrixf(); を 使わずに手動で行列の合成をしなければなりません。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRT...
-
行列:平行移動行列
平行移動行列です。 まず、以下の図を見て下さい。 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...
-
行列:行列の適用
では、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; ...
-
隠面消去
隠面消去です。 デプスバッファ(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...
-
トーラスの表示と回転
トーラス、ドーナツ形状を描画します。 glRotatef(回転角度,X軸の影響度,Y軸の影響度,Z軸の影響度) で回転行列を適用し、 glutSolidTorus( 内側の半径,外側の半径,断面の分割数,リングの分割数) でトーラスを描画します。 ファイル 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.0, 0.6, 0.0, 1.0 }; //ライトの位置 GLfloat lightpos[] = ...
-
円柱を表示してみる
円柱を描画します。 GLUTには、そのような機能はありませんので自作します。 円柱と言っても、上の面の円(正多角形)と側面の長方形と 下の面の円(正多角形)の組み合わせに過ぎません。 上面は上方向に、側面部分は中心から面の方向に、下面は下方向に 法線を設定してあげます。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include math.h #define WIDTH 320 #define HEIGHT 240 //回転用 float anglex = 0.0f; //青 GLfloat Blue[] = { 0.0, 0.0, 1.0, 1.0 }; //ライト...
-
球を表示して移動する
球を表示して平行移動します。 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....
-
続ボーンデフォーム
前回の続きです。 まずはマテリアルを設定します。 左側にあるマテリアルパネル上で右クリックします。 新規マテリアルを選択するとマテリアルウインドウが 出てくるので、そのまま閉じます。 オブジェクトパネルの Root obj1 を選択します。 メニューの ポリゴン 選択マテリアルをセット を選択します。 これでマテリアルが設定されました。 それでは早速ボーンアニメーションを作成してみましょう。 左側にあるアニメーションパネル上で右クリックします。 新規アニメーションを選択するとアニメーションウインドウが 出てくるので、そのまま閉じます。 下側の1~29までの数値が書いてある所がキーフレームです。 キーフレームの隣の 1.000 となっている所を 0.000 にしてEnterを押します。 キーフレームの 0 の所を選択します。 オブジェクトパネルの Joint2 を選択します...
-
円錐の表示と拡大縮小
円錐を拡大縮小表示します。 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 ...
-
gluPerspectiveを置き換える
gluPerspectiveを置き換えてみます。 gluPerspective(fovy, aspect, near, far) の作り出す行列は となっています。 そして と定義されます。 cotangent(余接、コタンジェント)は math.h にありませんので 自作します。 #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 x = 0.0f; bool flag = false; //緑 GLfloat green[] = { 0.0, 1.0,...
-
スキンメッシュアニメーションの原理4
ここまでのおさらいです。 ①、ボーンが階層アニメーションを行っている。 ②、頂点座標データを書き換える。 ③、(頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列) × 頂点ウェイト ④、 ③を影響するボーンの数だけ処理して足す(頂点ブレンド) ⑤、 ④で得られた頂点座標を元に頂点法線を再設定する 以上でスキンメッシュアニメーションの処理は完成です。
-
行列:回転行列
続いて、回転行列です。 以下に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 anglex = 0.0f; //オレンジ GLfloat orange[] = { 1.0, 0.6, 0.0, 1.0 }; //ライトの位置 GLfloat lightpos[...
-
ズームイン・アウト
ズームイン・アウトです。 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 }; //ライトの...
-
階層構造
今回、階層構造を作ってアニメーションするために、色々なソフトを試してみたのですが、http //www.vixar.jp/cyberdelia/ こちらの Cyberdelia というソフトがメタセコイアのファイルとも相性が良く最もシンプルで 操作性も良かったので Cyberdelia を使う事にします。 .X のアニメーションを作成できるソフトは他にもたくさんあるのですが、階層メッシュアニメーションだけを 出力するソフトはおそらく Cyberdelia だけではないでしょうか。詳しく調べていないので他にもあるかも しれませんが。 まず、メタセコイアで↓の図のような戦車を作成します。 戦車は 『本体』 と 『砲台』 と 『砲身』 から出来ていてそれらは のような親子関係を持っています。 それを Cyberdelia で読み込んで階層構造を設定し、アニメーションを作って .X形式で保...
-
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...
-
行列:拡大縮小行列
拡大縮小行列です。 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, ...
-
.wavを再生する(DirectMusic)
DirectInput の時と同じようにウインドウハンドルさえ取得できれば DirectMusic を freeglut と組み合わせて使用できます。 DirectMusic は現在は更新されておらず廃止予定?だそうです。 Windows7 では 32bit 版では DirectMusic を使用できますが 64bit 版にはありません。(XPモードなら使用できる?) いずれにしても、DirectMusic を使い続ける事は推奨できません。 今回のプログラムは DirectX SDK August2007 の参照設定を 使用しています。 *(2014.3.28追記) Windows8においてもWindows7同様の状態です。 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω...
-
gluLookAtを置き換える
gluLookAt を置き換えてみます。 #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 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 }; //単位行列 GLfloat mat[]={ 1,0,0,0, 0,1,0,0, 0,0,...
-
困った時は
当サイトのプログラムが正常に動作しない場合 まずは OpenGL とグラフィックスカードのドライバを最新のものにして下さい。 それでも解決しない場合はコメント板にて連絡を下さい。 コンソール画面を消す #pragma comment(linker, "/SUBSYSTEM WINDOWS /ENTRY mainCRTStartup") 以前のVisual Studio 2012辺りまでは、このプラグマでコンソール画面を消す事ができました。 もちろん今でも可能なのですが、現在のVisual Studio 2022ではデフォルトでプロジェクトの プロパティ、リンカーのシステムのサブシステムの項目が『コンソール (/SUBSYSTEM CONSOLE)』 になってしまっています。 これでは最初からプラグマコメントが入力されているので除去できません。 ...
-
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 }...
-
直方体を表示してみる
直方体を描画します。 少し冗長なコードになりましたがこの方が解りやすいと思います。 ファイル 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) {...
-
.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...
-
視点の回転(クォータニオン)
視点を回転させます。 回転方法にはいろいろとあります。 ロールピッチヨー、オイラー角、クォータニオンなどです。 ロールピッチヨーはZ軸、Y軸、X軸を順番に回転させて目的の角度にする方法です。 飛行機の姿勢を表す時によく使われます。最も解り易く素直な方法です。 オイラー角はZ軸、X軸(またはY軸)、Z軸と回転させて目的の角度にする方法です。 3つの軸を使わなくても2つの軸があれば目的の角度にたどり着きます。 しかし、ロールピッチヨーとオイラー角には欠点があります。ジンバルロックと呼ばれるものです。 たとえば、X軸を90度傾けると、Y軸とZ軸が同軸となってしまい、その姿勢を保存して また新たに回転をしようとしたときに問題がおきます。 X軸とY軸をそれぞれ90度傾けると全ての軸が同軸となり一つの方向にしか回せなくなります。 それを解消する方法がクォータニオンです。 クォータニオンは軸を任意に作成...
-
ボーンデフォーム
表示メニューの正射影を選択して正射影(Ortho)にします。 表示メニューの正面を選択して真正面から見た図にします。 ポリゴンツールを押してモデルの全体を確認します。 ジョイントツールを押します。 この状態でモデルビュー上を左クリックするとジョイントが作成できます。 デフォルトではジョイントの表示が小さいので大きくします。 ファイル シーン設定を選択します。 表示半径のジョイントを8にしてOKボタンを押します。 最初のジョイントをモデル下部に作成し、次のジョイントをモデル中心より 少し下に作成します。 すると一つ目のボーンが出来上がりました。 続けて、モデル上部より少し下にジョイントを作成し、完成です。 完成したら選択ツールを押してジョイントツールを終了します。 オブジェクトパネルのobj1とJoint1をShiftキーを押しながら選択します。 オブジェクトメニューのスムーズスキ...
-
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...
-
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; ...
-
@wiki全体から「設定の仕方」で調べる
更新順にページ一覧表示
|
作成順にページ一覧表示
|
ページ名順にページ一覧表示
|
wiki内検索