ぼかしフィルタ

OpenGLプログラミングメモ内検索 / 「ぼかしフィルタ」で検索した結果

検索 :
  • 異方性フィルタリング
    異方性フィルタリングです。 ミップマップで線形補間を適用するとミップマップの境目から先はフィルタリングにより、 ぼやけてしまいました。 拡張機能の異方性フィルタリングを使うとミップマップの境目を目立たなくする事が できます。 今回のプログラムはスペースキーでON/OFFを切り替えます。   ファイル main.cpp lodepng.cpp lodepng.h maptip.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 stdio.h #include strin...
  • バイリニアフィルタリング
    バイリニアフィルタリングです。 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...
  • メニュー
    ...タ偏 色の反転 ぼかしフィルタ ガウスフィルタ モザイク モノトーン セピア調 残像 モーションブラー 輪郭抽出 フォーカスフィルタ ▲▲▲▲▲ ▼ 3Dライブラリ編 Irrlicht編 Irrlichtのインストール ▲▲▲▲▲ ▼ 3Dライブラリ編 Ogre編 Ogreのインストール ▲▲▲▲▲ 当たり判定編 ▼ 当たり判定 2D編 2D 点と点 2D 点と線 2D 線と線 2D 円と円 2D 正方形と正方形 ▲▲▲▲▲ ▼ 当たり判定 3D編 3D 球と球 3D AABBとAABB 3D OBBとOBB 3D 線分と無限平面 ▲▲▲▲▲ 物理演算編 ▼ 物理演算 Bullet Physics Bullet セットアップ Bullet はじめに ▼ 物理演算 PhysX PhysX セ...
  • 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...
  • 音声ファイル再生(.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...
  • ミップマップ
    ミップマップです。 ミップマップは、あらかじめ元のサイズのテクスチャを縮小したものを用意しておき、 小さく表示される時は小さいテクスチャを使用します。 今回のプログラムはスペースキーを押す度にフィルタが切り替わります。   ファイル 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 640 #define HEIGHT 480 bool f...
  • C++/CLI:ファイルダイアログ
    基本プロジェクトにオープンファイルダイアログを配置します。 フォーム上には何も表示されず、フォームデザイナの下の方に オープンファイルダイアログコントロールが表示されます。 オープンファイルダイアログを起動するには何かアクションが必要なので ボタンも配置します。 ボタンの TEXT を「ファイルを開く」にします。 ボタンをダブルクリックして以下のコードを追加します。      //ファイルフィルタ       openFileDialog1- Filter = 画像ファイル(*.bmp,*.jpg,*.png,*.tif,*.ico)|*.bmp;*.jpg;*.png;*.tif;*.ico ;       openFileDialog1- ShowDialog();      //取得したファイル名       String^ FileName = openFileDialo...
  • 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[...
  • 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)』 になってしまっています。 これでは最初からプラグマコメントが入力されているので除去できません。 ...
  • 幾何変換
    幾何変換の解説です。 幾何変換とは、座標変換の ①平行移動 ②拡大、縮小 ③回転 の変換の事です。 今まで使用してきた glTranslatef とか glRotatef 等は アフィン変換と言います。 アフィン変換とは、形を変形させないで平行移動や回転、拡大縮小などの 変換をする事を言います。 スキンメッシュアニメーションは形を変形するアニメーションなので 幾何変換を用います。          
  • MASM32を使ってみる
    MASM32 http //www.masm32.com/ こちらで MASM32 をダウンロードしてインストールしてください。 『機械語』(マシン語)やアセンブラと聞くと、ただ単に『凄い』とか『速い』とかイメージする方が いると思いますが、あまり過度な期待はしない方が良いです。 グラフィックやサウンドなどは逆に面倒くさいとか、簡単にできないとかで詰む可能性の方が高いです。 パソコンの世界にグラフィックやサウンドをもたらしたのはFortran? あるいは BASIC の方なのではないでしょうか? ただ、インラインアセンブラとかで計算のみを高速化の目的で使う場合は、実に有効です。 覚えておいて損は無いと思います。 main.cpp //#pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pra...
  • アルファブレンディング
    アルファブレンディングです。 アルファブレンディングで注意しなければならない事があります。 いかなるグラフィック描画でも基本的には一番最後に描画したものだけが表示されて、 それまでにあった描画は全て上書きされてしまいます。 ですが、3D描画ライブラリにはデプスバッファやZバッファがあり隠面消去を使うと手前のものは 上書きされないようにすることができます。 しかし、透明度のある物体を描画するときに隠面消去を使用すると本来は色が合成されて 表示されるはずのものが隠面消去により、まるまる描画されなかったりします。 それを解決するには、 1.不透明なオブジェクトを描画 2.半透明オブジェクトをZソート(視点からの奥行き順) 3.半透明オブジェクトの、奥にあるものから描画 という手順を踏む必要があります。 今回のプログラムではスペースキーを押す度にブレンディング係数を切り替えます。   ファイル ...
  • ボーンオフセット行列
    以下は 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...
  • 行列:逆行列
    逆行列です。 逆行列とは、あるN×N行列があったときと積をとると N×N行列の単位行列になる行列の事をの逆行列と呼び、と書く。 つまり、各種アフィン変換を打ち消して単位行列(初期状態)に戻す行列の事です。 4×4行列の逆行列の公式 の時、逆行列が存在して、 で、求められます。 b は以下のようになります。
  • GUI編:おわりに…
    と、まあ、ここまで Win32API でGUIしてきましたが、 GUIと言えば、C#、Visual Basic、JAVA + Swing 辺りが鉄板でしょうか。 あるいは、C++ Builder とか Delphi と答える人もいるかもしれませんね。   C++でGUIができれば、それに越した事はないですね。 GUI を自作するというのは面倒なので、ライブラリを探してみるのも 良いかもしれません。 有名なライブラリでは、   Lily C++ GUI Library http //kengolab.net/prog/Lily/   wxWidgets http //www.wxwidgets.org/    FLTK http //www.fltk.org/    Qt http //qt.nokia.com/products    等がありますが、それぞれのGUIグラフィックに癖があり、...
  • ディスプレイリスト
    ディスプレイリストです。 OpenGLのコマンドをハードウェアが理解できる形に保存しておく機能です。 コンパイルされた状態でディスプレイリストが作成されるのでかなり高速に 処理できます。 ただし、ディスプレイリストに出来ない関数もありますので注意が必要です。 パラメータなどは定数となりますので何回も描画する物でパラメータが変化 しない物の描画に適しています。   ファイル 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; GLuint ListID=0; GLuint Model[5...
  • 行列:転置行列
    転置行列です。 行列の行と列を入れ替えて作られる行列をの転置行列と言い、と表す。 行列:行列の合成 のページで //合成 glMultMatrixfの代わり void multiplication(GLfloat* src1,GLfloat* src2,GLfloat* dst) {  for(int y=0;y 4;y++){   for(int x=0;x 4;x++){    dst[y*4+x]=src2[y*4]*src1[x]+src2[y*4+1]*src1[x+4]+src2[y*4+2]*src1[x+8]+src2[y*4+3]*src1[x+12];   }  } } となっていて、 「掛け合わせる順番が逆ジャネーノ?」 と思った方もいるでしょうが、これで良いのです。 DirectXは行ベクトルのため、左から掛け合わせますがOpenGLの場合、 列ベクトルであ...
  • 再帰関数
    以前、『階層メッシュアニメーション』や『スキンメッシュアニメーション』の読み込みでは 再帰関数を使うと言いました。 入れ子構造になっているデータは入れ子構造の読み出しプログラムで読み込むのが最適です。 その入れ子構造を関数で作る場合に便利なのが再帰関数です。 再帰関数というのは関数が自分自身を呼び出す物です。 しかし、どんな関数でも良い訳ではありません。 必ず、元の場所に戻れるような仕組みになっていなければ、無限に自分自身を呼び出し続け、 スタックオーバーフローのエラーになってしまいます。   駄目な例 #include stdio.h void recursive() {  recursive(); } void main() {  recursive();  getchar(); }   良い例 #include stdio.h int stack=0; void rec...
  • 光とは
    光とは、何なのでしょう? ニュートンは光が周波数的な性質があることを知っていたけれども、 光が作る影の周辺が非常にシャープではっきりしていることから 「光は粒子だ!」と考えていました。 グリマルディは、光の「回折」現象を発見、波の動きと似ていることを知りました。 光が粒子だとすると、光が障害物の後ろにも伝わる現象(回折)や、 光が重なると強めあったり弱めあったりする現象(干渉)のしくみを うまく説明できなかったのです。 そこで、ホイヘンスが「光の波動説」を提唱しました。 その後、フレネルとヤングが光は波動であるという事を数学的に証明し出し、 (干渉、反射、屈折)光の波動説が有利になりました。 マクスウェルは電磁波理論を完成させて光は、そうした電磁波の一種である事を 証明しました。 19世紀末には光の現象は波動説でうまく説明できるようになっていました。 アインシュタインは、しかしながら、やは...
  • 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...
  • C++/CLI:ドッキングウインドウ その1
    ドッキングウインドウというのは便利ですね。 MFCとかC#やVisual BASICにはドッキングウインドウのコントロールがあるので簡単にプロジェクトに追加して ドッキングウインドウのアプリケーションを作る事ができます。 C++/CLIにはドッキングウインドウのコントロールはありません。。。 ライブラリを使ってドッキングウインドウをしても良いのですが、独自のグラフィックを使っていたりして如何にもライブラリ使いました。。。 という事がバレバレになってしまいます。 そこで今回はドッキングウインドウを自作してみようと思います。 ドッキングウインドウを作るにあたって、パネルコントロールが使えそうなので、これでやってみようと思います。 メニューのファイル、新規作成のプロジェクトを選択します。 CLR 空のプロジェクト(.NET Framework) C++ Windows コンソール を選択して...
  • 行列:効率の良い合成
    行列同士は行列の積を行うと合成する事ができます。 しかし、4×4行列の積は16回も計算しなければなりません。 平行移動成分と回転成分、拡大縮小成分を合成するのに 32回も計算するのでしょうか? 平行移動成分は回転成分と拡大縮小成分に影響しないので3回の代入で 済ます事ができます。 回転成分と拡大縮小成分は互いに行列の要素位置がダブっているので ただ単に代入する事はできません。 平行移動成分と同様にして回転成分と拡大縮小成分に関しても計算回数を 減らす事はできないでしょうか? ここで一つの実験をしてみます。 それは、1行列(全要素が1の4×4行列)に glScalef を実行してみる という物です。 //#pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/fre...
  • .MQOを読み込んで表示する(GLMetaseq)
    メタセコイアのモデルデータ .mqo を読み込んで表示してみます。 言わずもがなOpenGLはただのグラフィックライブラリ、モデルデータの読み込みなども 全て自分でコードを書かなくてはなりません。 DirectXの .x 形式や .sdkmesh 形式のようなものと読み込みライブラリがあらかじめ 用意されていると楽ですが、そんなものはありません。 ただ、工学ナビ さんのサイトでmqoの読み込みライブラリ GLMetaseq がありますので 手始めに使ってみましょう。http //kougaku-navi.net/ARToolKit/index.html↑のページから GLMetaseq をダウンロードして、ヘッダファイルとソースファイルを プロジェクトに追加します。 GLMetaseq では glut を使用しているので GLMetaseq.h の227行目の#include をコメントア...
  • なぜOpenGLを使うのか?
    なぜ、DirectXではなくOpenGLなのか? 最新のグラフィックス、最速の描画を行うのであれば間違いなくDirectXがベストですが、 3Dを勉強したい、ころころ変わるDirectXにはついて行けないという方、いろんなOSで シェーダーモデル5.0を使いたいという方にはOpenGLをおススメします。 OpenGL 4.0 OpenGL4.0を駆使すれば、MacOSやLinux、Windows XP、Vista、7、8の4世代のWindowsに渡って DirectX 11世代のシェーダーモデル5.0を使う事ができます。 DirectXより簡単 当サイト管理人の感想ですが、DirectXに比べてOpenGLは割と簡単な印象を受けます。 業界標準となる可能性 OpenGLが右手座標系、DirectXが左手座標系を採用しているのは大きな明暗。 数学や...
  • 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; ...
  • 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/ ///////////////////////////////////////////////////////////////////////...
  • フルスクリーンとウインドウモードの切り替え
    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 ...
  • 固定機能との違い
    固定機能とプログラマブルシェーダーでは何がどう違うのでしょう。 固定機能ではフラットシェーディングやグーローシェーディング(スムースシェーディング)、 ワイヤーフレーム表示程度しかありませんでした。 擬似的にトゥーンシェーディングっぽく表示する事もできますが、トゥーンシェーディング とは全然品質が違います。 固定機能というのは、あらかじめ用意された範囲内で簡単手軽に機能を切り替えたり 描画に関する事を全て 『用意された中から選んで設定する』 という物でした。 簡単手軽ですが、グラフィックスで表現できる幅が文字通り固定されています。 そこで、より幅広いグラフィックスを表現するためにプログラマブルシェーダーが登場しました。 ここでは、シェーダー使用の描画とシェーダー未使用の描画をしてみました。 左が固定機能パイプラインで描画、右がシェーダーで色を反転させて描画した物です。 シェーダーファイルの...
  • マテリアルの設定
    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 ...
  • 行列:平行移動行列
    平行移動行列です。 まず、以下の図を見て下さい。 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...
  • 階層構造
    今回、階層構造を作ってアニメーションするために、色々なソフトを試してみたのですが、http //www.vixar.jp/cyberdelia/ こちらの Cyberdelia というソフトがメタセコイアのファイルとも相性が良く最もシンプルで 操作性も良かったので Cyberdelia を使う事にします。 .X のアニメーションを作成できるソフトは他にもたくさんあるのですが、階層メッシュアニメーションだけを 出力するソフトはおそらく Cyberdelia だけではないでしょうか。詳しく調べていないので他にもあるかも しれませんが。 まず、メタセコイアで↓の図のような戦車を作成します。 戦車は 『本体』 と 『砲台』 と 『砲身』 から出来ていてそれらは のような親子関係を持っています。 それを Cyberdelia で読み込んで階層構造を設定し、アニメーションを作って .X形式で保...
  • 環境光
    現実世界では、太陽や照明からの光が様々な物体に反射して光が直接当たらない場所でも 間接的に反射してきた光によってある一定の明るさになっています。 この空間に溢れる光を環境光といいます。 CGでこれを再現するにはラジオシティやグローバルイルミネーションなどがありますが、 計算コストが非常に高く、ゲームなどのリアルタイムな画面更新が求められるプログラムでは とても使う事はできません。 そこで、一般的には割とそれらしく見せるためにシーン全体に影響する一定の色を環境光として 使います。 vec4 ambient = gl_FrontLightProduct[0].ambient; で、OpenGLからアンビエント情報を受け取ります。 これを紐解いていくと、 glLightfv(GL_LIGHT0, GL_AMBIENT, Light); で設定したライトの光の範囲内で glMaterialfv(G...
  • 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 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...
  • 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++...
  • 視点の回転(クォータニオン)
    視点を回転させます。 回転方法にはいろいろとあります。 ロールピッチヨー、オイラー角、クォータニオンなどです。 ロールピッチヨーはZ軸、Y軸、X軸を順番に回転させて目的の角度にする方法です。 飛行機の姿勢を表す時によく使われます。最も解り易く素直な方法です。 オイラー角はZ軸、X軸(またはY軸)、Z軸と回転させて目的の角度にする方法です。 3つの軸を使わなくても2つの軸があれば目的の角度にたどり着きます。 しかし、ロールピッチヨーとオイラー角には欠点があります。ジンバルロックと呼ばれるものです。 たとえば、X軸を90度傾けると、Y軸とZ軸が同軸となってしまい、その姿勢を保存して また新たに回転をしようとしたときに問題がおきます。 X軸とY軸をそれぞれ90度傾けると全ての軸が同軸となり一つの方向にしか回せなくなります。 それを解消する方法がクォータニオンです。 クォータニオンは軸を任意に作成...
  • 簡易輪郭線描画
    普通に描画したモデルの後に少し大きくしたモデルの裏面を黒で描画すると 輪郭線の様に見えます。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include math.h #include GL/freeglut/freeglut.h #define PAI 3.14159 //光源 float lightPos[] =  {10.0, 15.0, 10.0, 1.0};//光源位置 //カメラと視体積 struct View{   //カメラ     float pos[3];//位置(視点)     float cnt[3];//注視点   float dist;  //注視点から視点までの距離   float theta; //仰角(水...
  • クォータニオンと回転行列の変換
    平行移動、拡大縮小と来たら次は回転です。 しかし、回転行列を単純に線形補間した場合は意図した結果にはなりません。 もちろん、X軸のみとかY軸のみ、Z軸のみの回転情報であった場合は上手くいきますが、 ほとんどのケースでそれらが混載していると思います。 どうすれば良いかと言うと、任意軸回転を線形補間してやると意図する結果になります。 任意軸回転と言えばクォータニオンですね。 2つの回転行列があったとして回転情報をクォータニオンに変換して、それを線形補間し、 補間されたクォータニオンを今度は回転行列に変換してやると2つの回転行列の間を 綺麗に補間できるでしょう。   //#pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include s...
  • コメント板
    簡易掲示板です。 何かありましたらコメントを。 てすと -- 管理人 (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採用の方向になっているようです。 -- 管理人 (...
  • 設定の仕方
    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...
  • .Xの階層メッシュアニメーションを読み込んでみる2
    それでは、実際に階層構造を作って表示してみる事にします。 今回はアニメーションはせずに、ただ単にモデルを表示するだけです。 2分木構造を再帰関数を使ってデータ処理をする場合、return で戻る先を きちんと把握していないとおかしなデータ構造になってしまいます。 再帰関数というのは一つずつネストを深めて行きます。 なので、return すると1階層戻るのではなく 1 NODE 戻ります。 以下の図で説明すると Frame5 から1階層戻る時は 1回の return で 1階層戻りますが、Frame4 から 1階層戻る時は 1回目の return で Frame3 に戻り、2回目の return でFrame2 に戻り、3回目の return で Frame1 に戻って、やっと1階層戻る事になります。 PNG.h #pragma once #include lodepng.h //...
  • 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,       ...
  • 投影マッピング
    投影マッピングです。 プロジェクターで投影させたようにテクスチャを張れます。 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) {  ...
  • シャドウマッピング
    シャドウマッピングです。 一時的に視点を光源に移してみると光の当たる部分を見る事ができます。 その時の見えない部分=障害物=デプスバッファの値が影となります。 オブジェクトが別のオブジェクトに落とす影は、もちろんの事、 オブジェクト自身が自らに落とす影も描画する事ができます。 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...
  • ソフトシャドウ
    ソフトシャドウです。 影の外側を、ぼやけさせます。 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...
  • バンプマッピング
    バンプマッピングです。 右はバンプマップ無しで左がバンプマップ有りの状態です。 バンプマッピングは見る角度によっては思ったような効果は出ません。 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...
  • ディスプレースメントマップ
    ディスプレイスメントマップです。 右がディスプレイスメントマップで、左がバンプマッピングです。 右の方はポリゴン形状が変化しているのに対して左は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 ...
  • 環境マッピング
    環境マッピングです。 正面の球に部屋を反射させて描画します。 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...
  • .Xの階層メッシュアニメーションを読み込んでみる4
    .xの階層アニメーションを読み込んで再生するプログラムが完成したので公開します。 クォータニオンの符号の判定には皆さん、苦労されたのではないでしょうか。 ネットで広く公開されているサンプルはほとんどがDirectX用で いちいち転置しなければならなかったり。 左手座標用に作成したアニメーションXファイルはクォータニオンのY軸とZ軸を-1倍しないと OpenGLではおかしな表示になるとか。 回転角度が181度とマイナス179度ではクォータニオンの符号が反転してるけど 同じ回転行列になるとか。 いやはや、手間取りました。 最後に親階層から子階層へ脈々と行列を受け継いで完成です。 『固定機能 階層メッシュアニメーション編』の『階層構造』で作成した sample4.xを表示しています。 尚、Cyberdelia で作成したアニメーションXファイルだけに対応しています。    font.h #pr...
  • @wiki全体から「ぼかしフィルタ」で調べる

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