teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

解決済み

2020/12/23 04:57

投稿

aaiue
aaiue

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- メッシュの引き延ばし方向について
1
+ 解決済みああああああああ
body CHANGED
@@ -1,43 +1,1 @@
1
- ### 前提・実現したいこと
2
-
3
- 影の作成のためにメッシュの引き延ばしをしたいのですが、ライトが照らしている方向ではなく、オブジェクトに対して不変の方向にシャドウボリュームができてしまっています。
4
- 例えば、初期段階でライトが左から照らしていれば、オブジェクトの右側に影ができますが、オブジェクトの方向を変えるとシャドウボリュームの場所も変わってしまいます。
5
- 画像の白い線がシャドウボリュームです。
6
- ![イメージ説明](b8c683866c249de5d639e3385f7bf70b.jpeg)
7
-
8
- ![イメージ説明](f27f8687ebcb0914197afe1ac5371e4c.jpeg)
9
-
10
- ### 発生している問題・エラーメッセージ
11
-
12
- ```
13
- シャドウボリュームの方向がおかしい
14
- ```
15
-
16
- ### 該当のソースコード
17
-
18
- ```ここに言語名を入力
19
- //全頂点について、引き延ばしを検討
20
- for (int i = 0; i < model.IndexNum; i += 3)
21
- {
22
- //頂点を3つ使い、面の法線を求める
23
- vertex0 = model.VertexArray[i].Position;
24
- vertex1 = model.VertexArray[i + 1].Position;
25
- vertex2 = model.VertexArray[i + 2].Position;
26
-
27
- D3DXVECTOR3 Normal;
28
- D3DXVECTOR3 cross0(vertex2 - vertex1);
29
- D3DXVECTOR3 cross1(vertex1 - vertex0);
30
-
31
-
32
- D3DXVec3Cross(&Normal, &cross0, &cross1);
33
-
34
- const D3DXVECTOR3 *dir = &D3DXVECTOR3(Light.Direction.x, Light.Direction.y, Light.Direction.z);
1
+ 解決済みああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
35
-
36
- if (D3DXVec3Dot(&Normal, dir) > 0)
37
- {
38
-      //ライト方向に頂点を伸ばす
39
- model.VertexArray[i + 2].Position = model.VertexArray[i].Position + *dir * 10000;
40
- }
41
- }
42
-
43
- ```

1

タイトル、タグの変更

2020/12/23 04:57

投稿

aaiue
aaiue

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- ステンシルシャドウボリュームの初期段階である、メッシュの引き延ばし方向について
1
+ メッシュの引き延ばし方向について
body CHANGED
File without changes