質問編集履歴
11
文章を修正
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
文章を修正
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
|

|
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
文章を修正
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
|
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.
|
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
文章を修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-

|
18
18
|
参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
|
19
19
|
|
20
20
|
|
7
文章を修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,10 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
|
18
|
-

|
19
|
-

|
20
|
-
|
21
18
|
参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
|
22
19
|
|
23
20
|
|
6
文章を修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
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
|
-
|
13
|
+
objローダーの何が原因なのか知りたい。
|
11
14
|
|
12
15
|
|
13
16
|
|
14
17
|
|
15
|
-
|
18
|
+

|
16
19
|

|
17
20
|
|
18
21
|
参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
|
5
文章を修正
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
|

|
15
17
|
|
16
18
|
参考サイト: [https://learnopengl.com/Lighting/Basic-Lighting](https://learnopengl.com/Lighting/Basic-Lighting)
|
4
シェーダーコードを修正
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
文書を再度修正
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
文章を修正
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
|

|
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
文章を修正
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
|
-
#####
|
11
|
+
##### Fragment Shader
|
12
12
|
```
|
13
13
|
/*#########################################################################
|
14
14
|
#
|
@@ -86,7 +86,7 @@
|
|
86
86
|
}
|
87
87
|
```
|
88
88
|
|
89
|
-
#####
|
89
|
+
##### Vertex Shader
|
90
90
|
```
|
91
91
|
/*#########################################################################
|
92
92
|
#
|