質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

1551閲覧

頂点情報のライト情報とマテリアル情報の違いが知りたい DirectX(DxLib)

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2020/04/19 09:30

編集2020/04/20 13:10

頂点情報に.normと.difと.spc とありますがマテリアル情報の設定にも同じような項目がると思いますがこれは何が違うのでしょうか?エミッシブはありませんが。
また、頂点一つ一つにありますがこれはどれも同じ値じゃないといけないのでしょうか?

※マテリアルは質感というのは調べました。

参考サイト: https://yttm-work.jp/gmpg/gmpg_0022.html#head_line_03

#include "DxLib.h" #include "Game.hpp" #include "Input.hpp" #include "Frame.hpp" #include "Vector.hpp" const char* filename = "Log.txt"; std::ofstream ofs(filename); Game::Game() { cameraPos.x = 0.0f; cameraPos.y = 20.0f; cameraPos.z = -40.0f; targetV.x = 0; targetV.y = 5; targetV.z = 12.5; SetUseLighting(false); // handle = LoadGraph("resource/texturePos.png", false); handle = LoadGraph("assets/resource/texturePos.png", false); SetUseZBuffer3D(true); SetWriteZBuffer3D(true); /*手前*/ Vertex[0].pos = VGet(-RANGE, RANGE, 10); Vertex[0].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[0].dif = color_dif; Vertex[0].spc = color_spc; Vertex[0].u = 0.0f; Vertex[0].v = 0.0f; Vertex[0].su = 0.0f; Vertex[0].sv = 0.0f; Vertex[1].pos = VGet(RANGE, RANGE, 10); Vertex[1].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[1].dif = color_dif; Vertex[1].spc = color_spc; Vertex[1].u = 1.0f; Vertex[1].v = 0.0f; Vertex[1].su = 0.0f; Vertex[1].sv = 0.0f; Vertex[2].pos = VGet(-RANGE, -RANGE, 10); Vertex[2].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[2].dif = color_dif; Vertex[2].spc = color_spc; Vertex[2].u = 0.0f; Vertex[2].v = 1.0f; Vertex[2].su = 0.0f; Vertex[2].sv = 0.0f; Vertex[3].pos = VGet(RANGE, -RANGE, 10); Vertex[3].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[3].dif = color_dif; Vertex[3].spc = color_spc; Vertex[3].u = 1.0f; Vertex[3].v = 1.0f; Vertex[3].su = 0.0f; Vertex[3].sv = 0.0f; /*奥*/ Vertex[4].pos = VGet(-RANGE, RANGE, 10 + RANGE); Vertex[4].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[4].dif = color_dif; Vertex[4].spc = color_spc; Vertex[4].u = 0.0f; Vertex[4].v = 0.0f; Vertex[4].su = 0.0f; Vertex[4].sv = 0.0f; Vertex[5].pos = VGet(RANGE, RANGE, 10 + RANGE); Vertex[5].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[5].dif = color_dif; Vertex[5].spc = color_spc; Vertex[5].u = 1.0f; Vertex[5].v = 0.0f; Vertex[5].su = 0.0f; Vertex[5].sv = 0.0f; Vertex[6].pos = VGet(-RANGE, -RANGE, 10 + RANGE); Vertex[6].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[6].dif = color_dif; Vertex[6].spc = color_spc; Vertex[6].u = 0.0f; Vertex[6].v = 1.0f; Vertex[6].su = 0.0f; Vertex[6].sv = 0.0f; Vertex[7].pos = VGet(RANGE, -RANGE, 10 + RANGE); Vertex[7].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[7].dif = color_dif; Vertex[7].spc = color_spc; Vertex[7].u = 1.0f; Vertex[7].v = 1.0f; Vertex[7].su = 0.0f; Vertex[7].sv = 0.0f; #define GROUND_Z 200 #define GROUND_X 200 ofs<<"AA"<<std::endl; /*地面 ポリゴン*/ Ground_Vertex[0].pos = VGet( -RANGE * GROUND_X, -RANGE * 2, RANGE * GROUND_Z); Ground_Vertex[0].norm = VGet(0.0f, 0.0f, -1.0f); Ground_Vertex[0].dif = color_dif; Ground_Vertex[0].spc = color_spc; Ground_Vertex[0].u = 0.0f; Ground_Vertex[0].v = 0.0f; Ground_Vertex[1].pos = VGet(RANGE * GROUND_X, -RANGE * 2, RANGE * GROUND_Z); Ground_Vertex[1].norm = VGet(0.0f, 0.0f, -1.0f); Ground_Vertex[1].dif = color_dif; Ground_Vertex[1].spc = color_spc; Ground_Vertex[1].u = 1.0f; Ground_Vertex[1].v = 0.0f; Ground_Vertex[2].pos = VGet(-RANGE * GROUND_X, -RANGE * 2, GROUND_Z * -RANGE); Ground_Vertex[2].norm = VGet(0.0f, 0.0f, -1.0f); Ground_Vertex[2].dif = color_dif; Ground_Vertex[2].spc = color_spc; Ground_Vertex[2].u = 0.0f; Ground_Vertex[2].v = 1.0f; Ground_Vertex[3].pos = VGet(RANGE * GROUND_X, -RANGE * 2, GROUND_Z * -RANGE); Ground_Vertex[3].norm = VGet(0.0f, 0.0f, -1.0f); Ground_Vertex[3].dif = color_dif; Ground_Vertex[3].spc = color_spc; Ground_Vertex[3].u = 1.0f; Ground_Vertex[3].v = 1.0f; /*地面インデックス*/ Ground_Index[0] = 0; Ground_Index[1] = 1; Ground_Index[2] = 2; Ground_Index[3] = 1; Ground_Index[4] = 2; Ground_Index[5] = 3; /*手前*/ Index[0][0] = 0; Index[0][1] = 1; Index[0][2] = 2; Index[0][3] = 1; Index[0][4] = 2; Index[0][5] = 3; /*奥*/ Index[1][0] = 4; Index[1][1] = 5; Index[1][2] = 6; Index[1][3] = 6; Index[1][4] = 5; Index[1][5] = 7; /*左*/ Index[2][0] = 0; Index[2][1] = 4; Index[2][2] = 2; Index[2][3] = 4; Index[2][4] = 2; Index[2][5] = 6; /*右*/ Index[3][0] = 1; Index[3][1] = 5; Index[3][2] = 7; Index[3][3] = 1; Index[3][4] = 3; Index[3][5] = 7; /*上*/ Index[4][0] = 0; Index[4][1] = 4; Index[4][2] = 5; Index[4][3] = 0; Index[4][4] = 1; Index[4][5] = 5; /*下*/ Index[5][0] = 6; Index[5][1] = 7; Index[5][2] = 2; Index[5][3] = 3; Index[5][4] = 7; Index[5][5] = 2; }
void Game::DrawUpdate() { SetCameraPositionAndTarget_UpVecY(VGet(cameraPos.x, cameraPos.y, cameraPos.z), VGet(targetV.x, targetV.y, targetV.z)); for(int i = 0; i< 8; i++) { Vertex[i].dif = color_dif; Vertex[i].spc = color_spc; } for(int i =0 ;i < 6; i++){ switch( i ) { case 0: { Vertex[ 0 ].u = 0.0f; Vertex[ 0 ].v = 0.0f; Vertex[ 1 ].u = 1.0f; Vertex[ 1 ].v = 0.0f; Vertex[ 2 ].u = 0.0f; Vertex[ 2 ].v = 1.0f; Vertex[ 3 ].u = 1.0f; Vertex[ 3 ].v = 1.0f; Vertex[ 4 ].u = 1.0f; Vertex[ 4 ].v = 1.0f; Vertex[ 5 ].u = 0.0f; Vertex[ 5 ].v = 0.0f; Vertex[ 6 ].u = 0.0f; Vertex[ 6 ].v = 0.0f; Vertex[ 7 ].u = 0.0f; Vertex[ 7 ].v = 0.0f; } break; case 1: { Vertex[0].u = 0.0f; Vertex[0].v = 0.0f; Vertex[1].u = 1.0f; Vertex[1].v = 0.0f; Vertex[2].u = 0.0f; Vertex[2].v = 1.0f; Vertex[3].u = 0.0f; Vertex[3].v = 0.0f; Vertex[4].u = 0.0f; Vertex[4].v = 0.0f; Vertex[5].u = 1.0f; Vertex[5].v = 0.0f; Vertex[6].u = 0.0f; Vertex[6].v = 1.0f; Vertex[7].u = 1.0f; Vertex[7].v = 1.0f; } break; case 2: { Vertex[0].u = 1.0f; Vertex[0].v = 0.0f; Vertex[1].u = 1.0f; Vertex[1].v = 0.0f; Vertex[2].u = 1.0f; Vertex[2].v = 1.0f; Vertex[3].u = 0.0f; Vertex[3].v = 0.0f; Vertex[4].u = 0.0f; Vertex[4].v = 0.0f; Vertex[5].u = 0.0f; Vertex[5].v = 1.0f; Vertex[6].u = 0.0f; Vertex[6].v = 1.0f; Vertex[7].u = 1.0f; Vertex[7].v = 1.0f; } break; /*右*/ case 3: { Vertex[0].u = 1.0f; Vertex[0].v = 0.0f; Vertex[1].u = 0.0f; Vertex[1].v = 0.0f; Vertex[2].u = 1.0f; Vertex[2].v = 1.0f; Vertex[3].u = 0.0f; Vertex[3].v = 1.0f; Vertex[4].u = 0.0f; Vertex[4].v = 0.0f; Vertex[5].u = 1.0f; Vertex[5].v = 0.0f; Vertex[6].u = 0.0f; Vertex[6].v = 1.0f; Vertex[7].u = 1.0f; Vertex[7].v = 1.0f; } break; /*上*/ case 4: { Vertex[0].u = 0.0f; Vertex[0].v = 0.0f; Vertex[1].u = 0.0f; Vertex[1].v = 1.0f; Vertex[4].u = 1.0f; Vertex[4].v = 0.0f; Vertex[5].u = 1.0f; Vertex[5].v = 1.0f; } break; /*下*/ case 5: { Vertex[2].u = 0.0f; Vertex[2].v = 1.0f; Vertex[3].u = 1.0f; Vertex[3].v = 1.0f; Vertex[6].u = 0.0f; Vertex[6].v = 0.0f; Vertex[7].u = 1.0f; Vertex[7].v = 0.0f; } break; } } DrawPolygonIndexed3D(Ground_Vertex,4,Ground_Index,6,handle,false); // cameraY += -1; DrawFormatString(0, 0, GetColor(255, 255, 255), "カメラ 座標 x: %.2f , y: %.2f , z:%.2f ", cameraPos.x, cameraPos.y, cameraPos.z); DrawFormatString(0, 32, GetColor(255, 255, 255), "注視点 座標 x: %.2f , y: %.2f , z:%.2f ", targetV.x, targetV.y, targetV.z); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

頂点情報に.normと.difと.spc とありますがマテリアル情報の設定にも同じような項目がると思いますがこれは何が違うのでしょうか?

どう使われてるかは設定によって変わります。
また、.norm(法線)は MATERIALPARAM 構造体には含まれていないようです。

詳しくはマニュアルに書いてあります。

設定に使用する MATERIALPARAM 構造体は以下のメンバ変数を持っています。

ディフューズカラー
COLOR_F Diffuse ;
拡散光色です。ライトのディフューズカラーと掛け合わされてライティング計算に使用されます。
この値は SetMaterialUseVertDifColor 関数で頂点データのディフューズカラーを使用しない設定にしていた場合のみ使用されます。( 初期状態では頂点データのディフューズカラーが使用され、この値は無視されます )

アンビエントカラー
COLOR_F Ambient ;
環境光色です。ライトのアンビエントカラーと掛け合わされてライティング計算に使用されます。

スペキュラカラー
COLOR_F Specular ;
反射光色です。ライトのスペキュラカラーと掛け合わされてライティング計算に使用されます。
この値は SetMaterialUseVertSpcColor 関数で頂点データのスペキュラカラーを使用しない設定にしていた場合のみ使用されます。( 初期状態では頂点データのスペキュラカラーが使用され、この値は無視されます )

エミッシブカラー
COLOR_F Emissive ;
自己発光色です。ライトが無くても、この値が0以外になっていると自己発光します。

スペキュラの強さ
float Power ;
スペキュラハイライトの角度範囲を決定する値です。
値が小さいほど範囲が広くなります。10.0f ~ 20.0f 辺りが丁度いい範囲です。

 尚、SetUseLighting 関数でライティング計算をしない設定にした場合は、 この関数の設定は一切無視されます。

DXライブラリ置き場 3D関係関数リファレンスページ
https://dxlib.xsrv.jp/function/dxfunc_3d_draw.html#R14N11

投稿2020/04/20 07:21

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/20 13:07

質問ですが頂点一つ一つにそれぞれ設定する値はどうすればいいのでしょうか?
nskydiving

2020/04/20 23:27

何が分からないのか分かりませんが、 提示されているコードで、 >Vertex[0].dif = color_dif; のように設定されているかと思いますが、それで良いと思いますよ。
退会済みユーザー

退会済みユーザー

2020/04/21 00:07

そのコードですが頂点一つ一つの値はどうすればいいのでしょうか?1ポリゴンずつ同じようにするのでしょうか?
nskydiving

2020/04/21 00:38

「どうすればいいか」は「どのように表示したいのか」によります。 >Vertex[0].dif = color_dif; の設定がどのように表示に影響を与えるのか理解できれば、何を設定すれば良いか分かると思います。 もしそこが理解できないのであれば、いろいろと設定を変更してどうなるのか試してみると良いと思います。
退会済みユーザー

退会済みユーザー

2020/04/21 11:57

質問ですが.normという頂点情報である法線は[ 面法線から頂点法線を計算 ] の計算をした結果を.normに入れておけばいいのでしょうか? https://wgld.org/d/contribution/a002.html
nskydiving

2020/04/21 13:08

その認識で良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問