セルシェーディング

OpenGLプログラミングメモ内検索 / 「セルシェーディング」で検索した結果

検索 :
  • スムースシェーディング
    スムースシェーディングです。 とは言っても、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...
  • メニュー
    ...抽出(法線マップ) セルシェーディング SSAO ハードウェアスキニング ▲▲▲▲▲ ▼ シェーダー 画像フィルタ偏 色の反転 ぼかしフィルタ ガウスフィルタ モザイク モノトーン セピア調 残像 モーションブラー 輪郭抽出 フォーカスフィルタ ▲▲▲▲▲ ▼ 3Dライブラリ編 Irrlicht編 Irrlichtのインストール ▲▲▲▲▲ ▼ 3Dライブラリ編 Ogre編 Ogreのインストール ▲▲▲▲▲ 当たり判定編 ▼ 当たり判定 2D編 2D 点と点 2D 点と線 2D 線と線 2D 円と円 2D 正方形と正方形 ▲▲▲▲▲ ▼ 当たり判定 3D編 3D 球と球 3D AABBとAABB 3D OBBとOBB 3D 線分と無限平面 ▲▲▲▲▲ 物理演算編 ▼ 物理演算 Bulle...
  • 固定機能との違い
    固定機能とプログラマブルシェーダーでは何がどう違うのでしょう。 固定機能ではフラットシェーディングやグーローシェーディング(スムースシェーディング)、 ワイヤーフレーム表示程度しかありませんでした。 擬似的にトゥーンシェーディングっぽく表示する事もできますが、トゥーンシェーディング とは全然品質が違います。 固定機能というのは、あらかじめ用意された範囲内で簡単手軽に機能を切り替えたり 描画に関する事を全て 『用意された中から選んで設定する』 という物でした。 簡単手軽ですが、グラフィックスで表現できる幅が文字通り固定されています。 そこで、より幅広いグラフィックスを表現するためにプログラマブルシェーダーが登場しました。 ここでは、シェーダー使用の描画とシェーダー未使用の描画をしてみました。 左が固定機能パイプラインで描画、右がシェーダーで色を反転させて描画した物です。 シェーダーファイルの...
  • フラグメントシェーダー
    フラグメントシェーダーです。DirectXではピクセルシェーダーと呼ばれる物です。 フラグメントシェーダーではピクセル単位で色々な処理ができます。 今回は頂点シェーダーで描画位置をずらし、フラグメントシェーダーで色を反転させます。 全く同じ位置で、全く同じ色で描画するプログラムがシェーダーによって変化させられています。   頂点シェーダー(vertex.shader) void main(void) {  gl_Position = gl_ModelViewMatrix * gl_Vertex + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0);//頂点座標の出力  gl_FrontColor = gl_Color;//そのままフラグメントシェーダーへ } フラグメントシェーダー(flagment.shader) void main() {  gl...
  • 考察
    大まかな歴史 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...
  • 頂点ブレンディング
    頂点ブレンディングの解説です。 前回までの解説で各頂点が各ボーンから受ける頂点ウェイトの 影響の度合いがわかりました。   頂点ブレンディングとは、その影響を受けた頂点座標を 算出する処理の事です。   具体的には、 頂点座標 × ボーン行列 × 頂点ウェイト を、その頂点に影響するボーンの数だけ処理して それぞれの結果を足します。(ブレンドする) これが、頂点ブレンディング処理です。   ここまでの知識で、スキンメッシュアニメーションの基本的な事が できるようになっています。   次回、実際にスキンメッシュアニメーションを行ってみましょう。            
  • 頂点シェーダー
    頂点シェーダーは、頂点情報を受け取り色々と処理をしてフラグメントシェーダーに 情報を渡します。 頂点シェーダーでは頂点の位置を操作したり、受け取った頂点カラーを変化させたり 光源計算を頂点単位で計算したりします。 ここでは、固定機能と頂点シェーダーで全く同じ位置で四角形を描画します。 ところが、頂点シェーダーに渡された頂点位置は  + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0) によって、X方向に150ずれて表示されます。   頂点シェーダー(vertex.shader) void main(void) {  gl_Position = gl_ModelViewMatrix * gl_Vertex + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0);//頂点座標の出力  gl_FrontColor = ...
  • アルファブレンディング
    アルファブレンディングです。 アルファブレンディングで注意しなければならない事があります。 いかなるグラフィック描画でも基本的には一番最後に描画したものだけが表示されて、 それまでにあった描画は全て上書きされてしまいます。 ですが、3D描画ライブラリにはデプスバッファやZバッファがあり隠面消去を使うと手前のものは 上書きされないようにすることができます。 しかし、透明度のある物体を描画するときに隠面消去を使用すると本来は色が合成されて 表示されるはずのものが隠面消去により、まるまる描画されなかったりします。 それを解決するには、 1.不透明なオブジェクトを描画 2.半透明オブジェクトをZソート(視点からの奥行き順) 3.半透明オブジェクトの、奥にあるものから描画 という手順を踏む必要があります。 今回のプログラムではスペースキーを押す度にブレンディング係数を切り替えます。   ファイル ...
  • シェーダーを使うにあたって
    シェーダーを使いこなすには、既に発明されている計算アルゴリズムを 駆使したり組み合わせたり、あるいは自ら考えて作成しなければ ならないでしょう。 そういった場合に、数学的知識が欠けていると理解できずに困った事に なると思います。 という訳で、次回からはシェーダーから少し離れて数学の解説に入ります。          
  • ソフトウェアスキニング
    これまでやってきた様に、固定機能を使ってCPUのみで行列計算を行う スキニング処理の事を「ソフトウェアスキニング」と言います。 最近のPCはCPUもパワフルになっていますが、3Dゲーム制作等では さすがにスキニングをCPUのみで行うのは無謀です。   行列計算をシェーダーを使ってGPUに行わせるスキニング処理を 「ハードウェアスキニング」と言います。                  
  • 拡散照明
    環境光だけではのっぺりとした図にしかなりません。 立体的に見せるには陰影を付けてやらなければなりません。 拡散反射光は光源から入ってくる光を全ての方向に均一に反射します。 紙のようにざらざらとした光沢の少ないものの表現に適しています。 反射する光の量は、入射する光の量に応じて変化し、入射する光の量は 光のあたる場所によって異なるので、物体の形に陰が付きます。 左の画像は頂点シェーダーのみで陰影を付けたものですが、ハイライトの部分に何やら 線のようなものが見えます。これは頂点単位で色の補間が行われているためです。 右の画像は頂点シェーダーで位置ベクトルと法線ベクトルを計算しておき、フラグメントシェーダーに 渡してフラグメントシェーダーで光の計算をしています。 こうするとピクセル単位で色の計算(補間)が行われるので非常に綺麗な結果が得られます。 フラグメントシェーダーに渡す変数は varyin...
  • 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/ ///////////////////////////////////////////////////////////////////////...
  • 光とは
    光とは、何なのでしょう? ニュートンは光が周波数的な性質があることを知っていたけれども、 光が作る影の周辺が非常にシャープではっきりしていることから 「光は粒子だ!」と考えていました。 グリマルディは、光の「回折」現象を発見、波の動きと似ていることを知りました。 光が粒子だとすると、光が障害物の後ろにも伝わる現象(回折)や、 光が重なると強めあったり弱めあったりする現象(干渉)のしくみを うまく説明できなかったのです。 そこで、ホイヘンスが「光の波動説」を提唱しました。 その後、フレネルとヤングが光は波動であるという事を数学的に証明し出し、 (干渉、反射、屈折)光の波動説が有利になりました。 マクスウェルは電磁波理論を完成させて光は、そうした電磁波の一種である事を 証明しました。 19世紀末には光の現象は波動説でうまく説明できるようになっていました。 アインシュタインは、しかしながら、やは...
  • ディスプレースメントマップ
    ディスプレイスメントマップです。 右がディスプレイスメントマップで、左がバンプマッピングです。 右の方はポリゴン形状が変化しているのに対して左は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 ...
  • 鏡面反射
    プラスチックや金属など、よく磨きこまれた反射率の高い物体に光が当たると 表面が光り輝いているように見えます。 そのハイライトを表現するのが鏡面反射です。   vertex.shader //フラグメントシェーダーに渡す変数 varying vec3 P;//位置ベクトル varying vec3 N;//法線ベクトル void main(void) {   P = vec3(gl_ModelViewMatrix * gl_Vertex);   N = normalize(gl_NormalMatrix * gl_Normal);   gl_Position = ftransform(); } flagment.shader //頂点シェーダーから受け取る変数 varying vec3 P;//位置ベクトル varying vec3 N;//法線ベクトル 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_Position = ftransform();  } flagment.shader  //頂点シェーダーから受け取る変数  varying vec3 P;//位置ベクトル  varying vec3 N;//法線ベクトル   void main(void)  {    vec3 L = normalize(gl_LightSource...
  • 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 ...
  • なぜ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が左手座標系を採用しているのは大きな明暗。 数学や...
  • 固定機能:鏡面反射
    鏡面反射です。 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 //回転用...
  • 固定機能:スポットライト
    スポットライトです。 放射の様子がわかるように回転させています。 固定機能ではポリゴン数を多くして細分化しないと効果がわかり辛いです。 フラグメントシェーダーだとピクセル単位で処理してくれるので少ないポリゴンでも 非常に綺麗な結果が得られます。   ファイル 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[]...
  • 環境光
    現実世界では、太陽や照明からの光が様々な物体に反射して光が直接当たらない場所でも 間接的に反射してきた光によってある一定の明るさになっています。 この空間に溢れる光を環境光といいます。 CGでこれを再現するにはラジオシティやグローバルイルミネーションなどがありますが、 計算コストが非常に高く、ゲームなどのリアルタイムな画面更新が求められるプログラムでは とても使う事はできません。 そこで、一般的には割とそれらしく見せるためにシーン全体に影響する一定の色を環境光として 使います。 vec4 ambient = gl_FrontLightProduct[0].ambient; で、OpenGLからアンビエント情報を受け取ります。 これを紐解いていくと、 glLightfv(GL_LIGHT0, GL_AMBIENT, Light); で設定したライトの光の範囲内で glMaterialfv(G...
  • バンプマッピング
    バンプマッピングです。 右はバンプマップ無しで左がバンプマップ有りの状態です。 バンプマッピングは見る角度によっては思ったような効果は出ません。 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...
  • GLSL:テクスチャマッピング
    GLSLでテクスチャを描画します。 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.shader   //頂点シェーダーから受け取る変数   varying vec3 P;//位置ベクトル   varying vec3 N;//法線ベクトル   uniform...
  • 投影マッピング
    投影マッピングです。 プロジェクターで投影させたようにテクスチャを張れます。 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_Position = ftransform();  } flagment.shader  //頂点シェーダーから受け取る変数  varying vec3 P;//位置ベクトル  varying vec3 N;//法線ベクトル   void main(void)  {  vec3 L = gl_LightSource[0].position.xyz - P;  f...
  • スポットライト
    スポットライトです。 vertex.shader //フラグメントシェーダーに渡す変数  varying vec3 P;//位置ベクトル  varying vec3 N;//法線ベクトル   void main(void)  {    P = vec3(gl_ModelViewMatrix * gl_Vertex);    N = normalize(gl_NormalMatrix * gl_Normal);    gl_Position = ftransform();  } flagment.shader  //頂点シェーダーから受け取る変数  varying vec3 P;//位置ベクトル  varying vec3 N;//法線ベクトル  int numLight = 2;   void main(void)  {  gl_FragColor = vec4(0.0);  floa...
  • シャドウマッピング
    シャドウマッピングです。 一時的に視点を光源に移してみると光の当たる部分を見る事ができます。 その時の見えない部分=障害物=デプスバッファの値が影となります。 オブジェクトが別のオブジェクトに落とす影は、もちろんの事、 オブジェクト自身が自らに落とす影も描画する事ができます。 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_FogFragCoord = abs(P.z);//フォグ座標    gl_Position = ftransform();  } flagment.shader  //頂点シェーダーから受け取る変数  varying vec3 P;//位置ベクトル  varying vec3 N;//法線ベクトル  uniform int fogMode;   void main(void...
  • 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; ...
  • .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...
  • .wavを再生する(DirectMusic)
    DirectInput の時と同じようにウインドウハンドルさえ取得できれば DirectMusic を freeglut と組み合わせて使用できます。 DirectMusic は現在は更新されておらず廃止予定?だそうです。 Windows7 では 32bit 版では DirectMusic を使用できますが 64bit 版にはありません。(XPモードなら使用できる?) いずれにしても、DirectMusic を使い続ける事は推奨できません。 今回のプログラムは DirectX SDK August2007 の参照設定を 使用しています。 *(2014.3.28追記) Windows8においてもWindows7同様の状態です。 尚、Visual Studio 2010からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω...
  • 環境マッピング
    環境マッピングです。 正面の球に部屋を反射させて描画します。 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...
  • 設定の仕方
    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...
  • シェブロンを表示する
    シェブロンデース   レバーコントロールで隠されてしまったコントロールを ポップアップメニューで表示します。 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_TOOLBAR    109   #define IDM_NEW    1010 #define IDM_OPEN    1020 #define IDM_SAVE    1030 #define IDM_COPY    1040 #define IDM_...
  • 総集編:Lunaインターフェース
    総集編という事で、Windows XP の Luna インターフェースで表示してみます。 .manifest ファイルを作成する方法もありますがプログラムに直接、コードを 追加する方法を紹介しておきます。  #pragma comment(linker, /manifestdependency \ type= win32 \   name= Microsoft.Windows.Common-Controls \   version= 6.0.0.0 \   processorArchitecture= x86 \   publicKeyToken= 6595b64144ccf1df \   language= * \ ) 上記のコードをプログラムに追加すると簡単にビジュアルスタイルに変更できます。 Windows Vista からは aero というスタイルもあるみたいですが...
  • エディットボックスを表示する
    エディットボックスです。 簡易メモ帳として使用可能です。   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...
  • 異方性フィルタリング
    異方性フィルタリングです。 ミップマップで線形補間を適用するとミップマップの境目から先はフィルタリングにより、 ぼやけてしまいました。 拡張機能の異方性フィルタリングを使うとミップマップの境目を目立たなくする事が できます。 今回のプログラムはスペースキーで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...
  • オフスクリーンレンダリング
    オフスクリーンレンダリングです。 レースゲームのバックミラーの描画等で使われます。 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...
  • ソフトシャドウ
    ソフトシャドウです。 影の外側を、ぼやけさせます。 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...
  • 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 ...
  • GLSL:マルチテクスチャ
    マルチテクスチャです。 今回のプログラムは地球の地表テクスチャと雲のテクスチャを合成し、 地表よりも雲を遅れて回転させています。 マウスの左ドラッグで視点を変更できます。 画像はNASAがフリーで配布している物を縮小して使用しています。 earth.png cloud.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_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord0;  ...
  • ディスプレイリスト
    ディスプレイリストです。 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...
  • リッチテキストエディットコントロールを表示する
    リッチテキストエディットです。 頑張れば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...
  • 音声ファイル再生(.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...
  • 水面
    水面と集光模様です。 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 s...
  • バイリニアフィルタリング
    バイリニアフィルタリングです。 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...
  • サンプリングビット変換
    サンプリングビット数を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];    ...
  • アンチエイリアシング
    アンチエイリアシングです。 右がアンチエイリアス無しの線で左がアンチエイリアスありの線です。 GL_LINE_SMOOTH の他に GL_POINT_SMOOTH と、 GL_POLYGON_SMOOTH があります。   ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 void Line2D(int x1,int y1,int x2, int y2,float size){  glLineWidth(size);  glBegin(GL_LINES);  glVertex2i(x1,y1);  glVertex2...
  • C++/CLI:ドッキングウインドウ その1
    ドッキングウインドウというのは便利ですね。 MFCとかC#やVisual BASICにはドッキングウインドウのコントロールがあるので簡単にプロジェクトに追加して ドッキングウインドウのアプリケーションを作る事ができます。 C++/CLIにはドッキングウインドウのコントロールはありません。。。 ライブラリを使ってドッキングウインドウをしても良いのですが、独自のグラフィックを使っていたりして如何にもライブラリ使いました。。。 という事がバレバレになってしまいます。 そこで今回はドッキングウインドウを自作してみようと思います。 ドッキングウインドウを作るにあたって、パネルコントロールが使えそうなので、これでやってみようと思います。 メニューのファイル、新規作成のプロジェクトを選択します。 CLR 空のプロジェクト(.NET Framework) C++ Windows コンソール を選択して...
  • @wiki全体から「セルシェーディング」で調べる

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