フラグメントシェーダー

OpenGLプログラミングメモ内検索 / 「フラグメントシェーダー」で検索した結果

検索 :
  • フラグメントシェーダー
    フラグメントシェーダーです。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...
  • 頂点シェーダー
    頂点シェーダーは、頂点情報を受け取り色々と処理をしてフラグメントシェーダーに 情報を渡します。 頂点シェーダーでは頂点の位置を操作したり、受け取った頂点カラーを変化させたり 光源計算を頂点単位で計算したりします。 ここでは、固定機能と頂点シェーダーで全く同じ位置で四角形を描画します。 ところが、頂点シェーダーに渡された頂点位置は  + 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 = ...
  • 拡散照明
    ...トルを計算しておき、フラグメントシェーダーに 渡してフラグメントシェーダーで光の計算をしています。 こうするとピクセル単位で色の計算(補間)が行われるので非常に綺麗な結果が得られます。 フラグメントシェーダーに渡す変数は varying で宣言し、頂点シェーダーとフラグメントシェーダーの 両方で同じ変数名で宣言しなければなりません。 今回は右の画像のプログラムを紹介しておきます。   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...
  • メニュー
    ...い 頂点シェーダー フラグメントシェーダー GLSLとの変数のやり取り シェーダーを使うにあたって 数学 極限 (その1) 数学 極限 (その2) 数学 Σ(シグマ)計算 (その1) 数学 Σ(シグマ)計算 (その2) 数学 対数(log) 数学 微分法 (その1) 数学 微分法 (その2) 数学 積分法 (その1) 数学 積分法 (その2) 光とは 環境光 ランバート拡散照明 拡散照明 フォン鏡面反射 鏡面反射 クック・トランス金属反射 金属反射 カラーシフト 簡易シャドウイング 距離減衰 スポットライト フォグ GLSL テクスチャマッピング GLSL マルチテクスチャ 床面反射 オフスクリーンレンダリング 環境マッピング 投影マッピング シャドウマッピング ソフトシャドウ 水面 バンプマッピング 視差マッピング ディスプレースメントマップ 輪郭線抽出(IDマップ) 輪郭線抽出(...
  • 固定機能:スポットライト
    ...がわかり辛いです。 フラグメントシェーダーだとピクセル単位で処理してくれるので少ないポリゴンでも 非常に綺麗な結果が得られます。   ファイル 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[] = { 0.0, 100.0, 0.0, 1.0 }; //ディスプレイリスト GLuint ListID=...
  • 鏡面反射
    ...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[0].position.xyz - P);   N = normalize(N);   ...
  • シェーダーを使うにあたって
    シェーダーを使いこなすには、既に発明されている計算アルゴリズムを 駆使したり組み合わせたり、あるいは自ら考えて作成しなければ ならないでしょう。 そういった場合に、数学的知識が欠けていると理解できずに困った事に なると思います。 という訳で、次回からはシェーダーから少し離れて数学の解説に入ります。          
  • フラットシェーディング
    フラットシェーディングです。 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...
  • 簡易シャドウイング
    ...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[0].position.xyz - P);    N = n...
  • 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 ...
  • 距離減衰
    ...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;  float d = length(L)...
  • フォグ
    フォグです。 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...
  • スポットライト
    スポットライトです。 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...
  • 固定機能との違い
    固定機能とプログラマブルシェーダーでは何がどう違うのでしょう。 固定機能ではフラットシェーディングやグーローシェーディング(スムースシェーディング)、 ワイヤーフレーム表示程度しかありませんでした。 擬似的にトゥーンシェーディングっぽく表示する事もできますが、トゥーンシェーディング とは全然品質が違います。 固定機能というのは、あらかじめ用意された範囲内で簡単手軽に機能を切り替えたり 描画に関する事を全て 『用意された中から選んで設定する』 という物でした。 簡単手軽ですが、グラフィックスで表現できる幅が文字通り固定されています。 そこで、より幅広いグラフィックスを表現するためにプログラマブルシェーダーが登場しました。 ここでは、シェーダー使用の描画とシェーダー未使用の描画をしてみました。 左が固定機能パイプラインで描画、右がシェーダーで色を反転させて描画した物です。 シェーダーファイルの...
  • GLSL:テクスチャマッピング
    ...hader   //フラグメントシェーダーに渡す変数   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 sampler2D sampler;    v...
  • スムースシェーディング
    スムースシェーディングです。 とは言っても、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[...
  • ディスプレースメントマップ
    ...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_NormalMatrix * tangent);   B = cross(N, T);//従法線ベクトル   gl_TexCoord[0] = gl_MultiTexCoord0;   gl_Position = ftran...
  • 考察
    大まかな歴史 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...
  • ソフトウェアスキニング
    これまでやってきた様に、固定機能を使ってCPUのみで行列計算を行う スキニング処理の事を「ソフトウェアスキニング」と言います。 最近のPCはCPUもパワフルになっていますが、3Dゲーム制作等では さすがにスキニングをCPUのみで行うのは無謀です。   行列計算をシェーダーを使ってGPUに行わせるスキニング処理を 「ハードウェアスキニング」と言います。                  
  • バンプマッピング
    ...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_NormalMatrix * tangent);   B = cross(N, T);//従法線ベクトル   gl_TexCoord[0] = gl_MultiTexCoord0;   gl_Position = ftran...
  • 水面
    ...ader   //フラグメントシェーダーに渡す変数   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 smplCaustics; void ...
  • 光とは
    光とは、何なのでしょう? ニュートンは光が周波数的な性質があることを知っていたけれども、 光が作る影の周辺が非常にシャープではっきりしていることから 「光は粒子だ!」と考えていました。 グリマルディは、光の「回折」現象を発見、波の動きと似ていることを知りました。 光が粒子だとすると、光が障害物の後ろにも伝わる現象(回折)や、 光が重なると強めあったり弱めあったりする現象(干渉)のしくみを うまく説明できなかったのです。 そこで、ホイヘンスが「光の波動説」を提唱しました。 その後、フレネルとヤングが光は波動であるという事を数学的に証明し出し、 (干渉、反射、屈折)光の波動説が有利になりました。 マクスウェルは電磁波理論を完成させて光は、そうした電磁波の一種である事を 証明しました。 19世紀末には光の現象は波動説でうまく説明できるようになっていました。 アインシュタインは、しかしながら、やは...
  • .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からはディレクトリの参照設定を プロジェクト毎に個別に設定しないといけないようになってしまいました。 面倒くさいですね。(^ω...
  • 固定機能:鏡面反射
    鏡面反射です。 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 //回転用...
  • なぜ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が左手座標系を採用しているのは大きな明暗。 数学や...
  • 環境光
    現実世界では、太陽や照明からの光が様々な物体に反射して光が直接当たらない場所でも 間接的に反射してきた光によってある一定の明るさになっています。 この空間に溢れる光を環境光といいます。 CGでこれを再現するにはラジオシティやグローバルイルミネーションなどがありますが、 計算コストが非常に高く、ゲームなどのリアルタイムな画面更新が求められるプログラムでは とても使う事はできません。 そこで、一般的には割とそれらしく見せるためにシーン全体に影響する一定の色を環境光として 使います。 vec4 ambient = gl_FrontLightProduct[0].ambient; で、OpenGLからアンビエント情報を受け取ります。 これを紐解いていくと、 glLightfv(GL_LIGHT0, GL_AMBIENT, Light); で設定したライトの光の範囲内で glMaterialfv(G...
  • ソフトシャドウ
    ソフトシャドウです。 影の外側を、ぼやけさせます。 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...
  • 設定の仕方
    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...
  • 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/ ///////////////////////////////////////////////////////////////////////...
  • 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について学習し、その過程を記録するページです。 プログラミングメモとしてご利用下さい。 なにかありましたらコメント板で。 glutCreateWindowの位置を直す編集をした際に「 」以降が消えるという@wikiの仕様に気づかず、 正常に動作しないプログラムを長期に渡り掲載しておりました。 現在、修復作業中です。 直接、コードを記載すると今後、似たような仕様変更で同じ不具合に遭遇するかもしれないので プログラムコードはテキストデータとしてダウンロードする形に今後変更するかもしれません。 アクセス数 - 昨日 - 今日 - 現在-人が閲覧中。 OpenGL講座 3Dプログラミング freeglut C++/CLI @wikiプラグイン @wiki便利ツール @wiki構文 @wi...
  • コメント板
    簡易掲示板です。 何かありましたらコメントを。 てすと -- 管理人 (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採用の方向になっているようです。 -- 管理人 (...
  • 投影マッピング
    投影マッピングです。 プロジェクターで投影させたようにテクスチャを張れます。 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) {  ...
  • .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...
  • シャドウマッピング
    シャドウマッピングです。 一時的に視点を光源に移してみると光の当たる部分を見る事ができます。 その時の見えない部分=障害物=デプスバッファの値が影となります。 オブジェクトが別のオブジェクトに落とす影は、もちろんの事、 オブジェクト自身が自らに落とす影も描画する事ができます。 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...
  • 床面反射
    床面反射です。 床面を半透明で描画し、オブジェクトを床面を境にして 反対側にも描画する事で疑似的に映り込みを表現しています。 brick.png marble.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_TextureMatrix[0] * gl_MultiTexCoord0;   gl_Position = ftransform(); } flagment.shader varying vec3 P; varying vec3 N; uniform sam...
  • レバーコントロールを表示する
    レバーコントロールです。クールバーとも呼ばれます。 つまみを掴んで各種コントロールを移動できます。 一行にまとめたり複数行にしたりもできます。 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_BUTTON 109 #define ID_EDIT 110 #define ID_COOL 111  menu.rc #include resource.h   IDR_MENU1 MENU BEGIN     PO...
  • 環境マッピング
    環境マッピングです。 正面の球に部屋を反射させて描画します。 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...
  • ページャーコントロールを表示する
    ページャーコントロールです。 他のコントロールに押し込まれて隠れているコントロールを スクロールするための物です。 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_BUTTON 109 #define ID_EDIT 110 #define ID_COOL 111 menu.rc #include resource.h   IDR_MENU1 MENU BEGIN     POPUP File     ...
  • C++/CLI:モーダルダイアログ
    基本プロジェクトを立ち上げます。 モーダルダイアログというコントロールは無いので モーダルダイアログを自作します。 プロジェクトの新しい項目の追加を選択します。 UI の Windowsフォームを選択し、名前を Dialog.h にして 追加ボタンを押します。 プロパティの MaximizeBox と MinimizeBox と ShowInTaskbar を False にします。 プロパティの StartPosition を CenterParent にして FormBorderStyle を FixedDialog にします。 MyForm に Button を配置します。 配置されたボタンをダブルクリックして以下のコードを追加します。      Form^ Dialog = gcnew Form();      Dialog- ShowDialog();  //...
  • シェブロンを表示する
    シェブロンデース   レバーコントロールで隠されてしまったコントロールを ポップアップメニューで表示します。 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_...
  • オフスクリーンレンダリング
    オフスクリーンレンダリングです。 レースゲームのバックミラーの描画等で使われます。 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...
  • フルスクリーンとウインドウモードの切り替え
    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 ...
  • C++/CLI:カラーダイアログ
    基本プロジェクトにカラーダイアログを配置します。 カラーダイアログ起動用にボタンも配置します。 ボタンの TEXT を「色の選択」にします。 ボタンのプロパティの BackColor を ButtonFace にします。 ボタンをダブルクリックして以下のコードを追加します。      colorDialog1- ShowDialog();      this- BackColor = colorDialog1- Color; ビルドして実行してみましょう。 MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace Project1; [STAThreadAttribute] int main(){  M...
  • 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...
  • フラットツールバーを表示する
    素のツールバーではボタンの集合体に見えるのでフラットタイプにしてみます。 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_PASTE   1050 #defi...
  • モーダルダイアログを表示する
    ダイアログが出ている間、ウインドウを操作できなくなるダイアログを モーダルダイアログと言います。 今回はこれを表示してみます。 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   menu.rc #include windows.h #include resource.h IDR_MENU1 MENU BEGIN     POPUP File     BEGIN      ...
  • 総集編: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 というスタイルもあるみたいですが...
  • 困った時は
    当サイトのプログラムが正常に動作しない場合 まずは OpenGL とグラフィックスカードのドライバを最新のものにして下さい。 それでも解決しない場合はコメント板にて連絡を下さい。 コンソール画面を消す #pragma comment(linker, "/SUBSYSTEM WINDOWS /ENTRY mainCRTStartup") 以前のVisual Studio 2012辺りまでは、このプラグマでコンソール画面を消す事ができました。 もちろん今でも可能なのですが、現在のVisual Studio 2022ではデフォルトでプロジェクトの プロパティ、リンカーのシステムのサブシステムの項目が『コンソール (/SUBSYSTEM CONSOLE)』 になってしまっています。 これでは最初からプラグマコメントが入力されているので除去できません。 ...
  • @wiki全体から「フラグメントシェーダー」で調べる

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