このブログを検索

ラベル DirectX11 の投稿を表示しています。 すべての投稿を表示
ラベル DirectX11 の投稿を表示しています。 すべての投稿を表示

2020年1月12日日曜日

【C++】 DirectX11 - 三角形とレイの交差判定

【C++】 DirectX11 - 三角形とレイの交差判定
(2020年1月12日)


■使用ソフト
・Visual Studio Community 2019


■目次
Visual Studio Community 2019 - C++


■言語
・C/C++
 プロジェクトの「プロパティ」→「C/C++」→「言語」→
 C++言語標準:プレビュー - 最新の C++ Working Draft からの機能 (/std:c++latest)
 を選択


■Windows SDK バージョン
・10.0.18362.0
 プロジェクトの「プロパティ」→「全般」→Windows SDK バージョン:10.0.18362.0
 を選択


■手順
1.Visual Studio 2019を起動する。

2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。

3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。

4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
  追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。

5.テクスチャファイル等を準備する。

6.以下の6つのファイルを作成してビルドを行う。
(1)Main.h
(2)Main.cpp
(3)DirectX.h
(4)DirectX.cpp
(5)VertexShader.hlsl
(6)PixelShader.hlsl
※VertexShaderとPixelShaderはShader Model 5.0
プロパティ→「HLSL コンパイラ」→「全般」→シェーダーモデル:Shader Model 5.0を選択

※コード抜粋
    //------------------------------------------------------------
    // 三角形とレイの交差判定
    //------------------------------------------------------------
    POINT mousepoint_c;//マウス位置
    GetCursorPos(&mousepoint_c);//マウスのスクリーン座標取得
    ScreenToClient(Window::GethWnd(), &mousepoint_c);//スクリーン座標をクライアント座標(アプリケーションの左上を(0, 0))に変換
    DirectX::XMVECTOR pos_near = DirectX::XMVectorSet(static_cast<float>(mousepoint_c.x), static_cast<float>(mousepoint_c.y), 0.0f, 0.0f);
    DirectX::XMVECTOR pos_near2 = DirectX::XMVector3Unproject(pos_near, 0, 0, vp.Width, vp.Height, vp.MinDepth, vp.MaxDepth, m_matProjection, m_matView, m_matWorld);
    DirectX::XMVECTOR pos_far = DirectX::XMVectorSet(static_cast<float>(mousepoint_c.x), static_cast<float>(mousepoint_c.y), 1.0f, 0.0f);
    DirectX::XMVECTOR pos_far2 = DirectX::XMVector3Unproject(pos_far, 0, 0, vp.Width, vp.Height, vp.MinDepth, vp.MaxDepth, m_matProjection, m_matView, m_matWorld);
    float fRayDistance;
    //三角形の3頂点をセット
    DirectX::XMVECTOR v0 = DirectX::XMVectorSet(svMap[0].Pos.x, svMap[0].Pos.y, svMap[0].Pos.z, 0.0f);
    DirectX::XMVECTOR v1 = DirectX::XMVectorSet(svMap[1].Pos.x, svMap[1].Pos.y, svMap[1].Pos.z, 0.0f);
    DirectX::XMVECTOR v2 = DirectX::XMVectorSet(svMap[2].Pos.x, svMap[2].Pos.y, svMap[2].Pos.z, 0.0f);
    //交差判定
    bool bRayHit = DirectX::TriangleTests::Intersects(pos_near2, DirectX::XMVector3Normalize(DirectX::XMVectorSubtract(pos_far2, pos_near2)), v0, v1, v2, fRayDistance);

7.実行結果
頂点インデックス0-1-2の三角形にマウスカーソルを合わせると
RayHitが1になり、RayDistanceにカメラ位置から交点(三角形とレイの交点)までの距離が格納される。


■参考文献
当たり判定

Intersects(XMVECTOR, XMVECTOR, XMVECTOR, XMVECTOR, XMVECTOR, float&) method

XMVector3Unproject function

XMVectorSubtract function

2019年12月20日金曜日

【C++】 DirectX11 - OBJファイル読み込み(複数マテリアル)

【C++】 DirectX11 - OBJファイル読み込み(複数マテリアル)
(2019年12月20日)


■使用ソフト
・Visual Studio Community 2019


■目次
Visual Studio Community 2019 - C++


■言語
・C/C++
 プロジェクトの「プロパティ」→「C/C++」→「言語」→
 C++言語標準:プレビュー - 最新の C++ Working Draft からの機能 (/std:c++latest)
 を選択


■Windows SDK バージョン
・10.0.18362.0
 プロジェクトの「プロパティ」→「全般」→Windows SDK バージョン:10.0.18362.0
 を選択


■手順
1.Visual Studio 2019を起動する。

2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。

3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。

4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
  追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。

5.cube_texture.obj、cube_texture.mtl、Texture1.png、Texture2.pngを準備する(Blenderで作成)

6.以下の6つのファイルを作成してビルドを行う。
(1)Main.h //前回から変更なし
(2)Main.cpp //前回から変更なし
(3)DirectX.h
(4)DirectX.cpp
(5)VertexShader.hlsl
(6)PixelShader.hlsl
※VertexShaderとPixelShaderはShader Model 5.0
プロパティ→「HLSL コンパイラ」→「全般」→シェーダーモデル:Shader Model 5.0を選択

コード非公開

7.実行結果
・テクスチャ2枚

・カラーマテリアル3つ

・テクスチャ1枚+カラーマテリアル1つ


■参考文献
MESH GURU


2019年12月19日木曜日

【C++】 DirectX11 - OBJファイル読み込み(テクスチャ)

【C++】 DirectX11 - OBJファイル読み込み(テクスチャ)
(2019年12月19日)


■使用ソフト
・Visual Studio Community 2019


■目次
Visual Studio Community 2019 - C++


■言語
・C/C++
 プロジェクトの「プロパティ」→「C/C++」→「言語」→
 C++言語標準:プレビュー - 最新の C++ Working Draft からの機能 (/std:c++latest)
 を選択


■Windows SDK バージョン
・10.0.18362.0
 プロジェクトの「プロパティ」→「全般」→Windows SDK バージョン:10.0.18362.0
 を選択


■手順
1.Visual Studio 2019を起動する。

2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。

3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。

4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
  追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。

5.cube.obj、cube.mtl、cube.pngを準備する(Blenderで作成)
 cube.objをメモ帳(テキストファイルエディタ)で開くと以下のとおり
# Blender v2.80 (sub 75) OBJ File: ''
# www.blender.org
mtllib cube.mtl
o Cube
v 1.000000 1.000000 -1.000000
v 1.000000 -1.000000 -1.000000
v 1.000000 1.000000 1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 1.000000 -1.000000
v -1.000000 -1.000000 -1.000000
v -1.000000 1.000000 1.000000
v -1.000000 -1.000000 1.000000
vt 0.625000 0.000000
vt 0.375000 0.250000
vt 0.375000 0.000000
vt 0.625000 0.250000
vt 0.375000 0.500000
vt 0.375000 0.250000
vt 0.625000 0.500000
vt 0.375000 0.750000
vt 0.625000 0.750000
vt 0.375000 1.000000
vt 0.375000 0.500000
vt 0.125000 0.750000
vt 0.125000 0.500000
vt 0.875000 0.500000
vt 0.625000 0.500000
vt 0.625000 0.250000
vt 0.625000 0.750000
vt 0.625000 1.000000
vt 0.375000 0.750000
vt 0.875000 0.750000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 5/1/1 3/2/1 1/3/1
f 3/4/2 8/5/2 4/6/2
f 7/7/3 6/8/3 8/5/3
f 2/9/4 8/10/4 6/8/4
f 1/11/5 4/12/5 2/13/5
f 5/14/6 2/9/6 6/15/6
f 5/1/1 7/16/1 3/2/1
f 3/4/2 7/7/2 8/5/2
f 7/7/3 5/17/3 6/8/3
f 2/9/4 4/18/4 8/10/4
f 1/11/5 3/19/5 4/12/5
f 5/14/6 1/20/6 2/9/6

cube.mtl
# Blender MTL File: 'None'
# Material Count: 1

newmtl Material
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.0 0.0 0.0
Ni 1.450000
d 1.000000
illum 2
map_Kd cube.png

cube.png(1024×1024ピクセル)

6.以下の6つのファイルを作成してビルドを行う。
(1)Main.h //前回から変更なし
(2)Main.cpp //前回から変更なし
(3)DirectX.h
(4)DirectX.cpp
(5)VertexShader.hlsl
(6)PixelShader.hlsl
※VertexShaderとPixelShaderはShader Model 5.0
プロパティ→「HLSL コンパイラ」→「全般」→シェーダーモデル:Shader Model 5.0を選択

コード非公開

7.実行結果


■参考文献
MESH GURU


2019年12月18日水曜日

【C++】 DirectX11 - OBJファイル読み込み(法線あり)

【C++】 DirectX11 - OBJファイル読み込み(法線あり)
(2019年12月18日)


■使用ソフト
・Visual Studio Community 2019


■目次
Visual Studio Community 2019 - C++


■言語
・C/C++
 プロジェクトの「プロパティ」→「C/C++」→「言語」→
 C++言語標準:プレビュー - 最新の C++ Working Draft からの機能 (/std:c++latest)
 を選択


■Windows SDK バージョン
・10.0.18362.0
 プロジェクトの「プロパティ」→「全般」→Windows SDK バージョン:10.0.18362.0
 を選択


■手順
1.Visual Studio 2019を起動する。

2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。

3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。

4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
  追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。

5.cube.objを準備する
 cube.objをメモ帳(テキストファイルエディタ)で開くと以下のとおり
v 0.5 0.5 -0.5
v 0.5 -0.5 -0.5
v 0.5 0.5 0.5
v 0.5 -0.5 0.5
v -0.5 0.5 -0.5
v -0.5 -0.5 -0.5
v -0.5 0.5 0.5
v -0.5 -0.5 0.5

vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000

f 5//1 3//1 1//1
f 3//2 8//2 4//2
f 7//3 6//3 8//3
f 2//4 8//4 6//4
f 1//5 4//5 2//5
f 5//6 2//6 6//6
f 5//1 7//1 3//1
f 3//2 7//2 8//2
f 7//3 5//3 6//3
f 2//4 4//4 8//4
f 1//5 3//5 4//5
f 5//6 1//6 2//6

6.以下の6つのファイルを作成してビルドを行う。
(1)Main.h //前回から変更なし
(2)Main.cpp //前回から変更なし
(3)DirectX.h
(4)DirectX.cpp
(5)VertexShader.hlsl
(6)PixelShader.hlsl
※VertexShaderとPixelShaderはShader Model 5.0
プロパティ→「HLSL コンパイラ」→「全般」→シェーダーモデル:Shader Model 5.0を選択

コード非公開

7.実行結果


■参考文献
MESH GURU


2019年12月17日火曜日

【C++】 DirectX11 - OBJファイル読み込み(法線なし)

【C++】 DirectX11 - OBJファイル読み込み(法線なし)
(2019年12月17日)


■使用ソフト
・Visual Studio Community 2019


■目次
Visual Studio Community 2019 - C++


■言語
・C/C++
 プロジェクトの「プロパティ」→「C/C++」→「言語」→
 C++言語標準:プレビュー - 最新の C++ Working Draft からの機能 (/std:c++latest)
 を選択


■Windows SDK バージョン
・10.0.18362.0
 プロジェクトの「プロパティ」→「全般」→Windows SDK バージョン:10.0.18362.0
 を選択


■手順
1.Visual Studio 2019を起動する。

2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。

3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。

4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
  追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。

5.cube.objを準備する
 cube.objをメモ帳(テキストファイルエディタ)で開くと以下のとおり
v -0.5 -0.5 0.5
v -0.5 -0.5 -0.5
v -0.5 0.5 0.5
v -0.5 0.5 -0.5
v 0.5 -0.5 0.5
v 0.5 -0.5 -0.5
v 0.5 0.5 0.5
v 0.5 0.5 -0.5

f 3// 2// 1//
f 3// 4// 2//
f 2// 5// 1//
f 2// 6// 5//
f 4// 6// 2//
f 4// 8// 6//
f 4// 3// 7//
f 8// 4// 7//
f 3// 1// 5//
f 7// 3// 5//
f 6// 7// 5//
f 8// 7// 6//

6.以下の6つのファイルを作成してビルドを行う。
(1)Main.h //前回から変更なし
(2)Main.cpp //前回から変更なし
(3)DirectX.h
(4)DirectX.cpp
(5)VertexShader.hlsl
(6)PixelShader.hlsl
※VertexShaderとPixelShaderはShader Model 5.0
プロパティ→「HLSL コンパイラ」→「全般」→シェーダーモデル:Shader Model 5.0を選択

コード非公開

7.実行結果


■参考文献
MESH GURU


2019年12月16日月曜日

【C++】 DirectX11 - ライト改良(Phongの反射モデル)

【C++】 DirectX11 - ライト改良(Phongの反射モデル)
(2019年12月16日)


■使用ソフト
・Visual Studio Community 2019


■目次
Visual Studio Community 2019 - C++


■言語
・C/C++
 プロジェクトの「プロパティ」→「C/C++」→「言語」→
 C++言語標準:プレビュー - 最新の C++ Working Draft からの機能 (/std:c++latest)
 を選択


■Windows SDK バージョン
・10.0.18362.0
 プロジェクトの「プロパティ」→「全般」→Windows SDK バージョン:10.0.18362.0
 を選択


■手順
1.Visual Studio 2019を起動する。

2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。

3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。

4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
  追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。

5.以下の6つのファイルを作成してビルドを行う。
(1)Main.h
(2)Main.cpp
(3)DirectX.h
(4)DirectX.cpp
(5)VertexShader.hlsl
(6)PixelShader.hlsl
※VertexShaderとPixelShaderはShader Model 5.0
プロパティ→「HLSL コンパイラ」→「全般」→シェーダーモデル:Shader Model 5.0を選択

(1)~(5)コード非公開

(6)PixelShader.hlsl
cbuffer ConstantBuffer : register(b0)
{
    matrix world;
    matrix view;
    matrix projection;
    float4 lightpos;
    float4 eyepos;
}

struct VS_OUTPUT
{
    float4 pos : SV_POSITION;
    float3 normal : NORMAL0;
};

//--------------------------------------------------------------------------------------
// ピクセルシェーダ
//--------------------------------------------------------------------------------------
float4 main(VS_OUTPUT input) : SV_TARGET
{
    //アンビエント
    float3 ambient = float3(1.0f, 1.0f, 0.0f) * 0.6f;

    //ディフューズ
    float3 L = normalize(lightpos.xyz);
    float3 N = normalize(input.normal);
    float NL = dot(N, L);
    float3 diffuse = float3(1.0f, 1.0f, 1.0f) * saturate(NL) * 0.3f;

    //スペキュラ
    float3 R = 2.0f * N * NL - L;
    float3 V = normalize(eyepos.xyz - input.normal);
    float RV = saturate(dot(R, V));
    float3 specular = float3(1.0f, 1.0f, 1.0f) * pow(RV, 10.0f) * 0.15f;

    return float4(ambient + diffuse + specular, 1.0f);
}


6.実行結果


■参考文献
~プログラミング~ DirectX 11でフォン反射モデル

2019年8月24日土曜日

【C++】 DirectX11 - シェーダ(HLSL)で模様作成3

【C++】 DirectX11 - シェーダ(HLSL)で模様作成3
(2019年8月24日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
GLSL Sandbox

2019年8月21日水曜日

【C++】 DirectX11 - シェーダ(HLSL)で模様作成2

【C++】 DirectX11 - シェーダ(HLSL)で模様作成2
(2019年8月21日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
GLSL Sandbox

2019年8月18日日曜日

【C++】 DirectX11 - シェーダ(HLSL)で立体表示

【C++】 DirectX11 - シェーダ(HLSL)で立体表示
(2019年8月18日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
TokyoDemoFest2012 Raymarching Tutorial

【C++】 DirectX11 - シェーダ(HLSL)で繰り返し処理2

【C++】 DirectX11 - シェーダ(HLSL)で繰り返し処理2
(2019年8月18日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
[連載]やってみれば超簡単! WebGL と GLSL で始める、はじめてのシェーダコーディング(7)

【C++】 DirectX11 - シェーダ(HLSL)で繰り返し処理

【C++】 DirectX11 - シェーダ(HLSL)で繰り返し処理
(2019年8月18日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
[連載]やってみれば超簡単! WebGL と GLSL で始める、はじめてのシェーダコーディング(6)

【C++】 DirectX11 - シェーダ(HLSL)でアニメーション

【C++】 DirectX11 - シェーダ(HLSL)でアニメーション
(2019年8月18日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
[連載]やってみれば超簡単! WebGL と GLSL で始める、はじめてのシェーダコーディング(5)

2019年8月16日金曜日

【C++】 DirectX11 - シェーダ(HLSL)で模様作成

【C++】 DirectX11 - シェーダ(HLSL)で模様作成
(2019年8月16日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
HLSLでテクスチャのピクセル座標を取得する
HLSLリファレンスまとめ

2019年8月15日木曜日

【C++】 DirectX11 - シェーダ(HLSL)で乱数生成

【C++】 DirectX11 - シェーダ(HLSL)で乱数生成
(2019年8月15日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■参考文献
PixelShader で乱数を作る
ランダムな値を返す関数 on GLSL

2019年8月11日日曜日

【C++】 DirectX11 - 模様を作る関数

【C++】 DirectX11 - 模様を作る関数
(2019年8月11日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0


■手順
コード非公開


■実行結果