アルファブレンディング

OpenGLプログラミングメモ内検索 / 「アルファブレンディング」で検索した結果

検索 :
  • アルファブレンディング
    アルファブレンディングです。 アルファブレンディングで注意しなければならない事があります。 いかなるグラフィック描画でも基本的には一番最後に描画したものだけが表示されて、 それまでにあった描画は全て上書きされてしまいます。 ですが、3D描画ライブラリにはデプスバッファやZバッファがあり隠面消去を使うと手前のものは 上書きされないようにすることができます。 しかし、透明度のある物体を描画するときに隠面消去を使用すると本来は色が合成されて 表示されるはずのものが隠面消去により、まるまる描画されなかったりします。 それを解決するには、 1.不透明なオブジェクトを描画 2.半透明オブジェクトをZソート(視点からの奥行き順) 3.半透明オブジェクトの、奥にあるものから描画 という手順を踏む必要があります。 今回のプログラムではスペースキーを押す度にブレンディング係数を切り替えます。   ファイル ...
  • 頂点ブレンディング
    頂点ブレンディングの解説です。 前回までの解説で各頂点が各ボーンから受ける頂点ウェイトの 影響の度合いがわかりました。   頂点ブレンディングとは、その影響を受けた頂点座標を 算出する処理の事です。   具体的には、 頂点座標 × ボーン行列 × 頂点ウェイト を、その頂点に影響するボーンの数だけ処理して それぞれの結果を足します。(ブレンドする) これが、頂点ブレンディング処理です。   ここまでの知識で、スキンメッシュアニメーションの基本的な事が できるようになっています。   次回、実際にスキンメッシュアニメーションを行ってみましょう。            
  • メニュー
    ...ド 法線 隠面消去 アルファブレンディング アルファテスト 固定機能 フォグ アンチエイリアシング ステンシルテスト 固定機能 鏡面反射 固定機能 スポットライト テッセレーション 頂点配列 ディスプレイリスト VBO VBO(テクスチャ付) PBO FBO 垂直同期ON/OFF OpenGLのバージョンとGPUの情報を得る 秒間60フレーム 簡易輪郭線描画 固定機能 トゥーンレンダリング 固定機能 グレースケール ▲▲▲▲▲ ▼ 固定機能 スタティックメッシュ編 .MQOを読み込んで表示する(GLMetaseq) .MQOを自力で読み込んでみる1(解析編) .MQOを自力で読み込んでみる2(読み込み編) .MQOを自力で読み込んでみる3(表示編)] .MQOローダ(ワイヤーフレーム表示編) .OBJを読み込んでみる1(解析編) .OBJを読み込んでみる2(読み込み編...
  • アルファテスト
    アルファテストです。 アルファテストとはイメージデータのアルファ値を調べて描画するか しないかを決めるためのものです。 今回は GL_GREATER を指定しているので glAlphaFunc(GL_GREATER, alpha); の alpha より透明度が大きいピクセルを描画します。 今回のプログラムはしばらくするとアルファ値に応じて画像が切り抜かれていきます。   ファイル main.cpp lodepng.cpp lodepng.h test.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include lodepng.h #define WIDTH 320 #defin...
  • スムースシェーディング
    スムースシェーディングです。 とは言っても、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...
  • 異方性フィルタリング
    異方性フィルタリングです。 ミップマップで線形補間を適用するとミップマップの境目から先はフィルタリングにより、 ぼやけてしまいました。 拡張機能の異方性フィルタリングを使うとミップマップの境目を目立たなくする事が できます。 今回のプログラムはスペースキーで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...
  • 固定機能:テクスチャマッピング
    テクスチャマッピングと言っても、『画像を表示する』のチュートリアルで既にやっています。 ただ、今回は、より踏み込んでテクスチャのST座標を回転してみます。 それには、テクスチャマトリックスを使用します。 マトリックスと言えば、glMatrixMode(GL_PROJECTION); とか、glMatrixMode(GL_MODELVIEW); が、あるように glMatrixMode(GL_TEXTURE); というテクスチャ用のマトリックスモードがあります。 このテクスチャ空間も,物体の空間 (x, y, z, w) と同じように4次元 (s, t, r, q)で用意されていて、 移動、回転、拡大縮小などの行列を適用できます。   ファイル main.cpp sample.png main.cpp #pragma comment(linker, /SUBSYSTEM WIN...
  • バイリニアフィルタリング
    バイリニアフィルタリングです。 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:球と球
    バウンディングスフィアです。 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; ...
  • マテリアルの設定
    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 ...
  • 画像を表示する(glpng)
    先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると struct IDirectDrawSurface7; なる表記があります。 内部で DirectX7 を使用しているようです。 OpenGLなのにDirectXは使いたくない!!とか、 WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を 使った方法も記載しておきます。   #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #include gl/glpng.h #define WIDTH 320 #define HEIGHT 240 pngInfo info; GL...
  • PNG画像を表示する(glpng)
    先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると struct IDirectDrawSurface7; なる表記があります。 内部で DirectX7 を使用しているようです。 OpenGLなのにDirectXは使いたくない!!とか、 WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を 使った方法も記載しておきます。   ファイル main.cpp sample.png main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #include stdio.h #include gl/glpng.h #define WIDTH ...
  • 固定機能との違い
    固定機能とプログラマブルシェーダーでは何がどう違うのでしょう。 固定機能ではフラットシェーディングやグーローシェーディング(スムースシェーディング)、 ワイヤーフレーム表示程度しかありませんでした。 擬似的にトゥーンシェーディングっぽく表示する事もできますが、トゥーンシェーディング とは全然品質が違います。 固定機能というのは、あらかじめ用意された範囲内で簡単手軽に機能を切り替えたり 描画に関する事を全て 『用意された中から選んで設定する』 という物でした。 簡単手軽ですが、グラフィックスで表現できる幅が文字通り固定されています。 そこで、より幅広いグラフィックスを表現するためにプログラマブルシェーダーが登場しました。 ここでは、シェーダー使用の描画とシェーダー未使用の描画をしてみました。 左が固定機能パイプラインで描画、右がシェーダーで色を反転させて描画した物です。 シェーダーファイルの...
  • ミップマップ
    ミップマップです。 ミップマップは、あらかじめ元のサイズのテクスチャを縮小したものを用意しておき、 小さく表示される時は小さいテクスチャを使用します。 今回のプログラムはスペースキーを押す度にフィルタが切り替わります。   ファイル 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...
  • 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 *...
  • 画像の一部をストレッチ描画する(LodePNG)
    PNG画像を読み込んで画像の一部をストレッチ描画します。http //members.gamedev.net/lode/projects/LodePNG/に、ある LodePNGモジュールを使用します。 このLodePNGは.cppファイルと.hファイルのみで構成されているので手軽に組み込めます。 zlib も libpng も何も使わずに.cppソースのみでPNG画像が読み込めます。 また、LodePNGは、どのように使ってもよいそうです。再配布も可能です。 作者への連絡も必要ないそうです。素晴らしいですね。 使い方も簡単で LodePNG_loadFile で読み込んで LodePNG_decode で、デコード します。 画像の一部を断片的に描画するようにするにはST座標(DirectXではUV座標)を指定して あげれば良いです。 『画像を表示する』のチュートリアルでは、glTexC...
  • 色の反転
    色を反転させます。 ファイル 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(...
  • PNG画像の一部をストレッチ描画する(LodePNG)
    PNG画像を読み込んで画像の一部をストレッチ描画します。http //members.gamedev.net/lode/projects/LodePNG/に、ある LodePNGモジュールを使用します。 *(現在の最新版では引数などが変わっているようですので設定の仕方のページから 当サイトで使用しているバージョンをインストールして下さい。) このLodePNGは.cppファイルと.hファイルのみで構成されているので手軽に組み込めます。 zlib も libpng も何も使わずに.cppソースのみでPNG画像が読み込めます。 また、LodePNGは、どのように使ってもよいそうです。再配布も可能です。 作者への連絡も必要ないそうです。素晴らしいですね。 使い方も簡単で LodePNG_loadFile で読み込んで LodePNG_decode で、デコード します。 画像の一部を断片的に描画...
  • JPEG画像を表示する
    JPEG画像を読み込んで表示します。 フルカラーとグレースケールのみサポートしています。 かなりデータサイズを小さくできるので広く使われています。http //www.ijg.org/こちらのサイトでフリーのJPEGライブラリのソースコードが配布されています。 libjpeg.lib を作成してください。作り方はgoogleなどで検索して作って下さい。 jpeglib.h , jconfig.h , jmorecfg.h , libjpeg.lib をプロジェクトのフォルダに設置して下さい。 これでJPEGを読み込む準備が整いました。   ファイル main.cpp jpeglib.h (配布先サイトから入手して下さい) jconfig.h (配布先サイトから入手して下さい) jmorecfg.h (配布先サイトから入手して下さい) libjpeg.lib (自分で作成して下さい) ...
  • 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 ...
  • .OBJを読み込んでみる1(解析編)
    .OBJ は Wavefront社の Advanced Visualizer というソフト用のファイルフォーマットです。 3Dプログラミング入門関係のHPや書籍では必ずと言って良いほど最初の方に登場します。 何故か?と言うとファイル形式がとてもシンプルでスタティックメッシュ(アニメーションしないメッシュ)を 表現するための全ての情報を含んでいるので入門用には最適だからです。 では、まず、例によってメタセコイアで .OBJ を作成し、中身を見てみる事にします。 メタセコイアを起動して面コマンドの基本図形を選択します。 そして立方体を作成し、それを .OBJ 形式で保存します。    保存する時の注意ですが法線、UVマッピング、マテリアルにチェックし、改行コードを Windows(CR/LF)にしなければなりません。 さらに左右を反転するにもチェックをしないとOpenGLでは逆に表示されます。...
  • DDS画像を表示する
    DDS画像を読み込みます。 DDS画像とは Direct Draw Surface ファイルの事です。 GLEW を使うと S3TC(DXTC)圧縮 を解凍できるようです。 ↓こちらのサイトに読み込みプログラムがありましたので使わせて頂きます。http //asura.iaigiri.com/OpenGL/gl7.htmlちょこっと改変してGLEWの初期化位置を変えてみました。   ファイル main.cpp sample.dds main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #include GL/glew.h #include GL/freeglut/freeglut.h #include st...
  • 考察
    大まかな歴史 DirectX 名称 登場日 概要 WinG、Display Control Interface Windows 3.1時代 DirectX 1.0 1995年10月 ゲーム作成用のAPI集GameSDKとして発表された。 DirectX 2.0 1996年6月 Direct3D (Immediate Mode, Retained Mode) の登場。 DirectX 3.0 1996年9月25日 DirectSound3D登場、DirectInputの統合。Windows NT 4.0ではSP3以降に同梱。 DirectX 4.0 登場予定だったが、DirectX 3.0からはわずかな変更であり、既にDirectX 5.0がロードマップ上にあったため、ベンダーの要望によりキャンセルされた。 DirectX 5.0 1997年8月4日 Direct3D に DrawPr...
  • オフスクリーンレンダリング
    オフスクリーンレンダリングです。 レースゲームのバックミラーの描画等で使われます。 metasequiaに付属のviolin.mqoを.xに変換して使用しています。violin.xはここからダウンロードして下さい。 右クリックして名前を付けてリンク先を保存でダウンロードできます。 violin.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_Position = ftransform(); }   flagment.shad...
  • 続ボーンデフォーム
    前回の続きです。 まずはマテリアルを設定します。 左側にあるマテリアルパネル上で右クリックします。 新規マテリアルを選択するとマテリアルウインドウが 出てくるので、そのまま閉じます。 オブジェクトパネルの Root obj1 を選択します。 メニューの ポリゴン 選択マテリアルをセット を選択します。 これでマテリアルが設定されました。   それでは早速ボーンアニメーションを作成してみましょう。 左側にあるアニメーションパネル上で右クリックします。 新規アニメーションを選択するとアニメーションウインドウが 出てくるので、そのまま閉じます。 下側の1~29までの数値が書いてある所がキーフレームです。 キーフレームの隣の 1.000 となっている所を 0.000 にしてEnterを押します。 キーフレームの 0 の所を選択します。 オブジェクトパネルの Joint2 を選択します...
  • スキンメッシュアニメーションの原理4
    ここまでのおさらいです。 ①、ボーンが階層アニメーションを行っている。 ②、頂点座標データを書き換える。 ③、(頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列) × 頂点ウェイト ④、 ③を影響するボーンの数だけ処理して足す(頂点ブレンド) ⑤、 ④で得られた頂点座標を元に頂点法線を再設定する 以上でスキンメッシュアニメーションの処理は完成です。          
  • .Xを読み込んでみる2(解析編2)
    それでは、前回の続きでテクスチャを設定してUVと法線を出力する ようにしてXファイルを作りました。 例によってテンプレート部分は除去しています。 xof 0302txt 0064 Header{ 1; 0; 1; } Mesh {  3;  1.08418;-0.00726;0.62110;,  -1.10385;-0.70444;-1.10694;,  -1.38258;1.10387;-0.06233;;    1;  3;0,1,2;;    MeshMaterialList {   1;   1;   0;;   Material {    0.800000;0.800000;0.800000;1.000000;;    5.000000;    0.000000;0.000000;0.000000;;    0.000000;0.000000;0.000000;;    Te...
  • 環境マッピング
    環境マッピングです。 正面の球に部屋を反射させて描画します。 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...
  • WAVファイルの構成
    WAVファイルの中身や扱い方を知っておくと後々役に立つかも知れません。 という訳で早速、中身をバイナリエディタ『Stirling』で見てみます。 具体的なファイル構成がどうなっているかと言うと、  4 byte RIFFヘッダ ( R I F F )  4 byte これ以降のファイルサイズ    4 byte WAVEヘッダ ( W A V E )  4 byte fmt チャンク ( f m t )  4 byte fmt チャンクのバイト数 リニアPCM ならば 16(10 00 00 00)  2 byte フォーマットID リニアPCM ならば 1(01 00)  2 byte チャンネル数 モノラル ならば 1(01 00)ステレオ ならば 2(02 00)  4 byte サンプリングレート 44.1kHz ならば 44100(44 ...
  • 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/ ///////////////////////////////////////////////////////////////////////...
  • カラーマテリアル
    カラーマテリアルです。 現在の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...
  • ボーンデフォーム
    表示メニューの正射影を選択して正射影(Ortho)にします。 表示メニューの正面を選択して真正面から見た図にします。 ポリゴンツールを押してモデルの全体を確認します。 ジョイントツールを押します。 この状態でモデルビュー上を左クリックするとジョイントが作成できます。 デフォルトではジョイントの表示が小さいので大きくします。 ファイル   シーン設定を選択します。 表示半径のジョイントを8にしてOKボタンを押します。 最初のジョイントをモデル下部に作成し、次のジョイントをモデル中心より 少し下に作成します。 すると一つ目のボーンが出来上がりました。 続けて、モデル上部より少し下にジョイントを作成し、完成です。 完成したら選択ツールを押してジョイントツールを終了します。 オブジェクトパネルのobj1とJoint1をShiftキーを押しながら選択します。 オブジェクトメニューのスムーズスキ...
  • C++/CLI:ファイルダイアログ
    基本プロジェクトにオープンファイルダイアログを配置します。 フォーム上には何も表示されず、フォームデザイナの下の方に オープンファイルダイアログコントロールが表示されます。 オープンファイルダイアログを起動するには何かアクションが必要なので ボタンも配置します。 ボタンの TEXT を「ファイルを開く」にします。 ボタンをダブルクリックして以下のコードを追加します。      //ファイルフィルタ       openFileDialog1- Filter = 画像ファイル(*.bmp,*.jpg,*.png,*.tif,*.ico)|*.bmp;*.jpg;*.png;*.tif;*.ico ;       openFileDialog1- ShowDialog();      //取得したファイル名       String^ FileName = openFileDialo...
  • 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...
  • ディスプレースメントマップ
    ディスプレイスメントマップです。 右がディスプレイスメントマップで、左がバンプマッピングです。 右の方はポリゴン形状が変化しているのに対して左は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 ...
  • トーラスの表示と回転
    トーラス、ドーナツ形状を描画します。 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[] = ...
  • ファイルを開くコモンダイアログ
    オープンファイルダイアログです。 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      BEGIN    MENUITEM 開く ,  ID_OPEN    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  #define ID_OPEN  109  #define ID_SAVE  110 menu.rc #include resource.h   IDR_MENU1 MENU  BEGIN      POPUP File  ...
  • バンプマッピング
    バンプマッピングです。 右はバンプマップ無しで左がバンプマップ有りの状態です。 バンプマッピングは見る角度によっては思ったような効果は出ません。 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...
  • 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,       ...
  • .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のコマンドをハードウェアが理解できる形に保存しておく機能です。 コンパイルされた状態でディスプレイリストが作成されるのでかなり高速に 処理できます。 ただし、ディスプレイリストに出来ない関数もありますので注意が必要です。 パラメータなどは定数となりますので何回も描画する物でパラメータが変化 しない物の描画に適しています。   ファイル 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...
  • サンプリングビット変換
    サンプリングビット数を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];    ...
  • 投影マッピング
    投影マッピングです。 プロジェクターで投影させたようにテクスチャを張れます。 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) {  ...
  • .MQOを自力で読み込んでみる2(読み込み編)
    今回は読み込み編という事で、実際に .MQO ファイルを読み込んでみます。 前回の解析編で描画に使うデータがわかりましたのでそれを自作のクラスと 構造体にガンガン詰め込んでみます。 ファイルの読み込みには C++ の fstream を使おうかな?と思ったんですが、 効率があまりよくないので GLmetaseq の旧版を参考に C言語の fscanf_s と fgets を使う事にしました。 GLmetaseq の旧版ではディスプレイリストにガンガン登録して、それをサクッと表示 していますが、私的にはディスプレイリストは使わない方向で行きます。 何故かというと、ワイヤーフレーム表示とか将来的にはスキニングとかもやりたいからです。 #include string #include vector using namespace std; //3つのベクトル struct Vector...
  • .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...
  • エディットボックスを表示する
    エディットボックスです。 簡易メモ帳として使用可能です。   resource.h #define IDR_MENU1 100 #define ID_EXIT   101 #define ID_EDIT1  104 #define ID_EDIT2  105 #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...
  • .wavを再生する(DirectMusic)
    DirectInput の時と同じようにウインドウハンドルさえ取得できれば DirectMusic を freeglut と組み合わせて使用できます。 DirectMusic は現在は更新されておらず廃止予定?だそうです。 Windows7 では 32bit 版では DirectMusic を使用できますが 64bit 版にはありません。(XPモードなら使用できる?) いずれにしても、DirectMusic を使い続ける事は推奨できません。 今回のプログラムは DirectX SDK August2007 の参照設定を 使用しています。 *(2014.3.28追記) Windows8においてもWindows7同様の状態です。 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω...
  • 固定機能:スポットライト
    スポットライトです。 放射の様子がわかるように回転させています。 固定機能ではポリゴン数を多くして細分化しないと効果がわかり辛いです。 フラグメントシェーダーだとピクセル単位で処理してくれるので少ないポリゴンでも 非常に綺麗な結果が得られます。   ファイル 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 lightpos[]...
  • @wiki全体から「アルファブレンディング」で調べる

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