このブログを検索

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年12月15日日曜日

【C#】Unity - 2Dオブジェクト複製(Prefab)

【C#】Unity - 2Dオブジェクト複製(Prefab)
(2019年12月15日)


■使用ソフト
・Unity Hub 2.1.3
・Unity 2019.2.11f1
・Visual Studio Community 2019


■言語
・C#


■手順
1.Unity Hub起動→プロジェクト→新規作成

2.2Dを選択→プロジェクト名、保存先を設定→作成

3.画像を用意してAssetsへドラッグ&ドロップ
start.png
サイズ:128×128ピクセル


4.画像をヒエラルキーへドラッグ&ドロップ

5.Assetsで右クリック→作成→C#スクリプト

6.作成したC#スクリプトをダブルクリックしてVisual Studioを起動

7.コードを以下のとおり変更して保存する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(0.1f, 0, 0);//右に移動
        if(transform.position.x > 5.0f)
        {
            Destroy(gameObject);//位置Xが5を超えたら消す
        }
    }
}

8.C#スクリプトをヒエラルキーのstartへドラッグ&ドロップ

9.ヒエラルキーのstartをAssetsへドラッグ&ドロップ
 Prefabが作成される

10.ヒエラルキーのstartは、右クリック→削除で削除しておく

11.Assetsで右クリック→作成→C#スクリプト

13.作成したC#スクリプトをダブルクリックしてVisual Studioを起動

14.コードを以下のとおり変更して保存する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript1 : MonoBehaviour
{
    public GameObject startPrefab;//publicを必ずつける
    float fTime;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        this.fTime += Time.deltaTime;//1フレームの時間を加算する
        if(this.fTime > 0.3f)//0.3秒ごとの処理
        {
            this.fTime = 0;
            GameObject copyStart = Instantiate(startPrefab) as GameObject;//新しいオブジェクトを作る
            int iY = Random.Range(-3, 4);//-3~3のランダムな整数を作る(-3~4ではない)
            copyStart.transform.position = new Vector3(-5.0f, iY, 0);//新しいオブジェクトの位置を設定
        }
    }
}

15.ヒエラルキーの作成→空のオブジェクトを作成

16.2つ目に作成したC#スクリプトをヒエラルキーのGameObjectへドラッグ&ドロップ

17.ヒエラルキーのGameObjectを選択してPrefabをインスペクターのStart Prefabへドラッグ&ドロップ


4.実行結果
0.3秒ごとに矢印が左端(高さランダム)に生成され、右に動いて右端で消える


■参考文献
Unityの教科書 Unity2018完全対応版

2019年12月14日土曜日

Blender - モデリング - サイコロ作成

Blender - モデリング - サイコロ作成
(2019年12月14日)


■使用ソフト
・Blender 2.80


■手順
1.最初に表示されるキューブを選択した状態で編集モードに切り替え

2.左側のツールの中からBevel(面取り)を選択

3.キューブを選択してドラッグすると面取りされる
 左下に表示されるベベル設定の幅を0.2mに変更する

4.左側のツールの中からLoop Cut(ループカット)を選択

5.キューブを選択して左下に表示されるループカットとスライド設定の
 分割数を2にする

6.他の面も同様に分割する

7.面選択を選択する

8.Select Boxを選択する

9.Shiftキーを押しながらサイコロの目になる部分をすべて選択する

10.左側のツールの中からInset Faces(面を差し込む)を選択

11.キューブを選択してドラッグすると面が差し込まれる
 左下に表示される面を差し込む設定を以下のとおり変更する
 ・幅:0.1m
 ・個別:チェックを入れる(個別の面ごとに差し込みが実行される)

12.左側のツールの中から押し出しを長押しして表示される
 押し出し(法線方向)を選択

13.キューブを選択してへこむ方向にドラッグする
 左下に表示される「領域を押し出して収縮/膨張」設定の
 オフセットを0.1mに変更する

14.モディファイアーを選択

15.モディファイアーを追加→サブディビジョンサーフェス

16.細分化のビューポートを2に変更する

17.マテリアル→+のマテリアルスロットを追加

18.新規

19.ノードを使用

20.ベースカラーを黒(R=0, G=0, B=0)に変更する

21.透過表示に変更する

22.選択→選択の拡大縮小→選択を拡大(現在選択しているサイコロの目の周りの4面が追加選択される)


23.マテリアルの割り当てを選択

24.透過表示を取りやめるとマテリアルが適用されていることが確認できる

25.再度透過表示に切り替え、サイコロ以外の場所をクリックして全ての選択を解除する
 1の目を選択して、選択→選択の拡大縮小→選択を拡大

26.マテリアルスロットを追加→新規→ノードを使用→ベースカラーを赤(R=1, G=0, B=0)
 →割り当て→透過表示を取りやめ(1の目だけ赤色に変わる)


27.オブジェクトモードに戻し、モディファイアーのサブディビジョンサーフェスを適用する

28.再度編集モードで確認、保存する


■参考文献
【Blender】サイコロを作る方法