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

質問編集履歴

11

文章を修正

2021/10/31 03:37

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,16 +1,15 @@
1
1
  提示コードですが以下のようにPhongのシェーディングを行いたいのですが提示画像のように立方体の陰影がおかしくなるのですがこれは何が原因なのでしょうか?参考サイトを参考にした記述したのですが原因がわかりません。
2
2
 
3
+ ##### 現状
3
4
  GLSLコードはPhongシェーディングです。
4
5
  Mode.cppはobjローダーです。
5
6
  現状、Model.cppのLoadobj()関数でblenderで出力したobjファイルをロードしています。GLSLは提示サイトを参考に記述しました。
6
7
  頂点と法線は正しく読み込まれていることを確認しました。頂点インデックスは使っていません。
7
-
8
- ##### 追記
9
8
  立方体の面を1つの三角形に減らして実装したのでが一枚目の画像ですがライティングの陰影が出てきるのでシェーダーファイルが原因でないことを突き止めました。
10
9
 
11
10
 
12
11
  ##### 知りたいこと
13
- objローダーの何が原因な知りたい。
12
+ objローダーの法線設定方法が知りたい。
14
13
 
15
14
 
16
15
  参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)

10

文章を修正

2021/10/31 03:37

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -13,11 +13,12 @@
13
13
  objローダーの何が原因なのか知りたい。
14
14
 
15
15
 
16
-
16
+ 参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
17
+ Github: [https://github.com/Shigurechan/GL/tree/14b9ed0e2d87eafaae0b3b11fd42660b7d3f07b7](https://github.com/Shigurechan/GL/tree/14b9ed0e2d87eafaae0b3b11fd42660b7d3f07b7)
17
18
  ![イメージ説明](48347fd2650e65632749659c4abd6286.png)
18
- 参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
19
19
 
20
20
 
21
+
21
22
  ##### Fragment Shader
22
23
  ```
23
24
  /*#########################################################################

9

文章を修正

2021/10/31 03:31

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -149,71 +149,65 @@
149
149
  glm::vec3 vert;
150
150
  fscanf(file, "%f %f %fn", &vert.x, &vert.y, &vert.z);
151
151
  vertex.push_back(vert);
152
- // obj.vertex.push_back(vert);
153
152
  }
154
153
  else if (strcmp(line, "vt") == 0)
155
154
  {
156
155
  glm::vec2 u;
157
156
  fscanf(file, "%f %fn", &u.x, &u.y);
158
- //u.y = 1.0f - u.y;
159
- // obj.uv.push_back(u);
160
157
  uv.push_back(u);
161
158
  }
162
159
  else if (strcmp(line, "vn") == 0)
163
160
  {
164
-
165
161
  glm::vec3 norm;
166
162
  fscanf(file, "%f %f %fn", &norm.x, &norm.y, &norm.z);
167
- // obj.normal.push_back(norm);
168
163
  normal.push_back(norm);
169
164
  }
170
165
  else if (strcmp(line, "f") == 0)
171
166
  {
172
-
173
- std::string vertex1, vertex2, vertex3;
174
167
  unsigned int v[3], u[3], n[3];
175
168
  int matches = fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%dn", &v[0], &u[0], &n[0], &v[1], &u[1], &n[1], &v[2], &u[2], &n[2]);
176
- if (matches != 9)
177
- {
178
- printf("File can't be read by our simple parser : ( Try exporting with other optionsn");
179
- assert(0);
180
- }
181
169
 
182
-
183
-
184
170
  vertexIndex.push_back(v[0]);
185
171
  vertexIndex.push_back(v[1]);
186
172
  vertexIndex.push_back(v[2]);
187
-
173
+
188
174
  uvIndex.push_back(u[0]);
189
175
  uvIndex.push_back(u[1]);
190
176
  uvIndex.push_back(u[2]);
191
-
177
+
192
178
  normalIndex.push_back(n[0]);
193
179
  normalIndex.push_back(n[1]);
194
- normalIndex.push_back(n[2]);
180
+ normalIndex.push_back(n[2]);
195
-
196
181
  }
197
182
  }
198
183
 
199
- for( unsigned int i = 0; i < vertexIndex.size(); i++ )
184
+ for (unsigned int i = 0; i < vertexIndex.size(); i++)
200
185
  {
201
-
202
186
  unsigned int vi = vertexIndex[i];
203
187
  unsigned int ui = uvIndex[i];
204
188
  unsigned int ni = normalIndex[i];
189
+
190
+ glm::vec3 v = vertex[vi - 1];
191
+ glm::vec2 u = uv[ui - 1];
192
+ glm::vec3 n = normal[ni - 1];
193
+
194
+
195
+ VertexAttribute attrib;
196
+
197
+ attrib.position[0] = v.x;
198
+ attrib.position[1] = v.y;
199
+ attrib.position[2] = v.z;
200
+
201
+ attrib.uv[0] = u.x;
202
+ attrib.uv[1] = u.y;
203
+
204
+ attrib.normal[0] = n.x;
205
+ attrib.normal[1] = n.y;
206
+ attrib.normal[2] = n.z;
205
207
 
206
- glm::vec3 v = vertex[ vi - 1];
207
- glm::vec2 u = uv[ ui - 1];
208
- glm::vec3 n = normal[ ni - 1];
209
-
210
- obj.vertex.push_back(v);
208
+ obj.attribute.push_back(attrib);
211
- obj.uv.push_back(u);
212
- obj.normal.push_back(n);
213
209
  }
214
-
215
- }
210
+ }
216
211
  attribute = obj;
217
212
  }
218
-
219
213
  ```

8

文章を修正

2021/10/29 09:11

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- ![イメージ説明](63dffc05c043500582c63b39d065733c.png)
17
+ ![イメージ説明](48347fd2650e65632749659c4abd6286.png)
18
18
  参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
19
19
 
20
20
 

7

文章を修正

2021/10/29 09:01

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -14,10 +14,7 @@
14
14
 
15
15
 
16
16
 
17
-
18
- ![イメージ説明](3f8bb75bf1f8e5bf824355b956e6ced0.png)
17
+ ![イメージ説明](63dffc05c043500582c63b39d065733c.png)
19
- ![イメージ説明](67a99888ded0b478d2394f0468c8a307.png)
20
-
21
18
  参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
22
19
 
23
20
 

6

文章を修正

2021/10/29 07:19

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- Phongのシェディングを実装したい。陰影おかしい原因とは
1
+ OBJロダーで法線く設定できない原因が知りたい。
body CHANGED
@@ -5,14 +5,17 @@
5
5
  現状、Model.cppのLoadobj()関数でblenderで出力したobjファイルをロードしています。GLSLは提示サイトを参考に記述しました。
6
6
  頂点と法線は正しく読み込まれていることを確認しました。頂点インデックスは使っていません。
7
7
 
8
+ ##### 追記
9
+ 立方体の面を1つの三角形に減らして実装したのでが一枚目の画像ですがライティングの陰影が出てきるのでシェーダーファイルが原因でないことを突き止めました。
8
10
 
11
+
9
12
  ##### 知りたいこと
10
- シェーダーが原因なのか?それともobjローダーが原因なのか知りたい。
13
+ objローダーの何が原因なのか知りたい。
11
14
 
12
15
 
13
16
 
14
17
 
15
-
18
+ ![イメージ説明](3f8bb75bf1f8e5bf824355b956e6ced0.png)
16
19
  ![イメージ説明](67a99888ded0b478d2394f0468c8a307.png)
17
20
 
18
21
  参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)

5

文章を修正

2021/10/29 04:55

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -2,15 +2,17 @@
2
2
 
3
3
  GLSLコードはPhongシェーディングです。
4
4
  Mode.cppはobjローダーです。
5
-
6
5
  現状、Model.cppのLoadobj()関数でblenderで出力したobjファイルをロードしています。GLSLは提示サイトを参考に記述しました。
7
6
  頂点と法線は正しく読み込まれていることを確認しました。頂点インデックスは使っていません。
8
7
 
9
8
 
9
+ ##### 知りたいこと
10
+ シェーダーが原因なのか?それともobjローダーが原因なのか知りたい。
10
11
 
11
12
 
12
13
 
13
14
 
15
+
14
16
  ![イメージ説明](67a99888ded0b478d2394f0468c8a307.png)
15
17
 
16
18
  参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)

4

シェーダーコードを修正

2021/10/29 04:34

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -67,6 +67,17 @@
67
67
  }
68
68
 
69
69
 
70
+ ```
71
+
72
+ ##### Vertex Shader
73
+ ```
74
+ /*#########################################################################
75
+ #
76
+ ###########################################################################*/
77
+ #version 420
78
+ //#extension GL_ARB_explicit_uniform_location : require
79
+
80
+
70
81
  layout(location = 0) in vec3 vertexPosition;
71
82
  layout(location = 1) in vec3 vertexNormal;
72
83
 
@@ -92,55 +103,9 @@
92
103
 
93
104
 
94
105
  }
95
- ```
96
106
 
97
- ##### Vertex Shader
98
107
  ```
99
- /*#########################################################################
100
- #
101
- ###########################################################################*/
102
- #version 420
103
- //#extension GL_ARB_explicit_uniform_location : require
104
108
 
105
- layout(location = 2) in vec3 fPosition;
106
- layout(location = 3) in vec3 fNormal;
107
-
108
-
109
- uniform vec3 lightPos;
110
- uniform vec3 lightColor;
111
- uniform vec3 objectColor;
112
- uniform vec3 viewPos;
113
-
114
- out vec4 fragment;
115
-
116
- void main()
117
- {
118
-
119
- // ambient
120
- float ambientStrength = 0.1;
121
- vec3 ambient = ambientStrength * lightColor;
122
-
123
- // diffuse
124
- vec3 norm = normalize(fNormal);
125
- vec3 lightDir = normalize(lightPos - fPosition);
126
- float diff = max(dot(norm, lightDir), 0.0);
127
- vec3 diffuse = diff * lightColor;
128
-
129
- // specular
130
- float specularStrength = 0.5;
131
- vec3 viewDir = normalize(viewPos - fPosition);
132
- vec3 reflectDir = reflect(-lightDir, norm);
133
- float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
134
- vec3 specular = specularStrength * spec * lightColor;
135
-
136
-
137
- vec3 result = (ambient + diffuse + specular) * objectColor;
138
- fragment = vec4(result, 1.0);
139
- }
140
-
141
-
142
- ```
143
-
144
109
  ##### Model.cpp
145
110
  ```
146
111
 

3

文書を再度修正

2021/10/29 04:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,8 @@
1
1
  提示コードですが以下のようにPhongのシェーディングを行いたいのですが提示画像のように立方体の陰影がおかしくなるのですがこれは何が原因なのでしょうか?参考サイトを参考にした記述したのですが原因がわかりません。
2
2
 
3
+ GLSLコードはPhongシェーディングです。
4
+ Mode.cppはobjローダーです。
5
+
3
6
  現状、Model.cppのLoadobj()関数でblenderで出力したobjファイルをロードしています。GLSLは提示サイトを参考に記述しました。
4
7
  頂点と法線は正しく読み込まれていることを確認しました。頂点インデックスは使っていません。
5
8
 

2

文章を修正

2021/10/29 04:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,13 @@
1
1
  提示コードですが以下のようにPhongのシェーディングを行いたいのですが提示画像のように立方体の陰影がおかしくなるのですがこれは何が原因なのでしょうか?参考サイトを参考にした記述したのですが原因がわかりません。
2
2
 
3
+ 現状、Model.cppのLoadobj()関数でblenderで出力したobjファイルをロードしています。GLSLは提示サイトを参考に記述しました。
4
+ 頂点と法線は正しく読み込まれていることを確認しました。頂点インデックスは使っていません。
3
5
 
4
6
 
5
7
 
8
+
9
+
10
+
6
11
  ![イメージ説明](67a99888ded0b478d2394f0468c8a307.png)
7
12
 
8
13
  参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
@@ -133,7 +138,7 @@
133
138
 
134
139
  ```
135
140
 
136
- ##### Model
141
+ ##### Model.cpp
137
142
  ```
138
143
 
139
144
  // ##################################### .objファイル読み込み #####################################

1

文章を修正

2021/10/29 04:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
9
9
 
10
10
 
11
- ##### Vertex Shader
11
+ ##### Fragment Shader
12
12
  ```
13
13
  /*#########################################################################
14
14
  #
@@ -86,7 +86,7 @@
86
86
  }
87
87
  ```
88
88
 
89
- ##### Fragment Shader
89
+ ##### Vertex Shader
90
90
  ```
91
91
  /*#########################################################################
92
92
  #