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

質問編集履歴

8

画像を差し替え

2021/10/29 10:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -12,13 +12,12 @@
12
12
  Github: [https://github.com/Shigurechan/GL/tree/14b9ed0e2d87eafaae0b3b11fd42660b7d3f07b7](https://github.com/Shigurechan/GL/tree/14b9ed0e2d87eafaae0b3b11fd42660b7d3f07b7)
13
13
 
14
14
 
15
- ![イメージ説明](e593cca90764961be7c28446eb20ced7.png)
15
+ ![イメージ説明](c9023e358cdf0eb5d6dc7a1dd378f398.png)
16
16
 
17
17
 
18
18
 
19
19
 
20
-
21
- mode.cpp
20
+ ##### mode.cpp
22
21
  ```
23
22
 
24
23
  // ##################################### .objファイル読み込み #####################################

7

文章を修正

2021/10/29 10:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -9,13 +9,9 @@
9
9
  また頂点データ等を正しくopenglに渡せていることを確認しました。
10
10
  objファイルのデータは面法線
11
11
 
12
+ Github: [https://github.com/Shigurechan/GL/tree/14b9ed0e2d87eafaae0b3b11fd42660b7d3f07b7](https://github.com/Shigurechan/GL/tree/14b9ed0e2d87eafaae0b3b11fd42660b7d3f07b7)
12
13
 
13
14
 
14
-
15
- Github: [https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c](https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c)
16
-
17
-
18
-
19
15
  ![イメージ説明](e593cca90764961be7c28446eb20ced7.png)
20
16
 
21
17
 

6

文章を修正

2021/10/29 10:17

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -63,93 +63,70 @@
63
63
  glm::vec3 vert;
64
64
  fscanf(file, "%f %f %fn", &vert.x, &vert.y, &vert.z);
65
65
  vertex.push_back(vert);
66
- // obj.vertex.push_back(vert);
67
66
  }
68
67
  else if (strcmp(line, "vt") == 0)
69
68
  {
70
69
  glm::vec2 u;
71
70
  fscanf(file, "%f %fn", &u.x, &u.y);
72
- //u.y = 1.0f - u.y;
73
- // obj.uv.push_back(u);
74
71
  uv.push_back(u);
75
72
  }
76
73
  else if (strcmp(line, "vn") == 0)
77
74
  {
78
-
79
75
  glm::vec3 norm;
80
76
  fscanf(file, "%f %f %fn", &norm.x, &norm.y, &norm.z);
81
- // obj.normal.push_back(norm);
82
77
  normal.push_back(norm);
83
78
  }
84
79
  else if (strcmp(line, "f") == 0)
85
80
  {
86
-
87
- std::string vertex1, vertex2, vertex3;
88
81
  unsigned int v[3], u[3], n[3];
89
82
  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]);
90
- if (matches != 9)
91
- {
92
- printf("File can't be read by our simple parser : ( Try exporting with other optionsn");
93
- assert(0);
94
- }
95
83
 
96
-
97
-
98
84
  vertexIndex.push_back(v[0]);
99
85
  vertexIndex.push_back(v[1]);
100
86
  vertexIndex.push_back(v[2]);
101
-
87
+
102
88
  uvIndex.push_back(u[0]);
103
89
  uvIndex.push_back(u[1]);
104
90
  uvIndex.push_back(u[2]);
105
-
91
+
106
92
  normalIndex.push_back(n[0]);
107
93
  normalIndex.push_back(n[1]);
108
- normalIndex.push_back(n[2]);
94
+ normalIndex.push_back(n[2]);
109
-
110
95
  }
111
96
  }
112
-
113
- ////////////////////////////////////////////////////////////////////////////////////////////////////
97
+ //////////////////////////////////////////////////////////////////////////////////////
114
- for( unsigned int i = 0; i < vertexIndex.size(); i++ )
98
+ for (unsigned int i = 0; i < vertexIndex.size(); i++)
115
99
  {
116
- int v = vertexIndex[i];
117
- glm::vec3 n = glm::vec3(0,0,0);
118
- for( unsigned int j = 0; j < vertexIndex.size(); j++ )
119
- {
120
- if(v == vertexIndex[j])
121
- {
122
- n += normal[ normalIndex[j] - 1 ];
123
- }
124
- }
125
-
126
- obj.normal.push_back(glm::normalize(n));
127
- }
128
- ///////////////////////////////////////////////////////////////////////////////////////////////////
129
-
130
- for( unsigned int i = 0; i < vertexIndex.size(); i++ )
131
- {
132
-
133
100
  unsigned int vi = vertexIndex[i];
134
101
  unsigned int ui = uvIndex[i];
135
102
  unsigned int ni = normalIndex[i];
136
-
137
103
 
104
+ glm::vec3 v = vertex[vi - 1];
105
+ glm::vec2 u = uv[ui - 1];
106
+ glm::vec3 n = normal[ni - 1];
138
107
 
139
- glm::vec3 v = vertex[ vi - 1];
140
- glm::vec2 u = uv[ ui - 1];
141
- glm::vec3 n = normal[ ni - 1];
142
108
 
109
+ VertexAttribute attrib;
143
110
 
111
+ attrib.position[0] = v.x;
112
+ attrib.position[1] = v.y;
113
+ attrib.position[2] = v.z;
114
+
115
+ attrib.uv[0] = u.x;
116
+ attrib.uv[1] = u.y;
117
+
118
+ attrib.normal[0] = n.x;
119
+ attrib.normal[1] = n.y;
120
+ attrib.normal[2] = n.z;
121
+
144
- obj.vertex.push_back(v);
122
+ obj.attribute.push_back(attrib);
145
- obj.uv.push_back(u);
146
- //obj.normal.push_back(n);
147
123
  }
148
-
124
+ /////////////////////////////////////////////////////////////////////////////////////
149
- }
125
+ }
150
126
  attribute = obj;
151
127
  }
152
128
 
129
+
153
130
  ```
154
131
 
155
132
  ##### Cube.obj

5

文章を修正

2021/10/29 09:55

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -7,6 +7,7 @@
7
7
  ##### 確認したこと
8
8
  Phongのシェーディングを行っているのですがシェーダーコードは問題ありません。
9
9
  また頂点データ等を正しくopenglに渡せていることを確認しました。
10
+ objファイルのデータは面法線
10
11
 
11
12
 
12
13
 

4

文章を修正

2021/10/29 09:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,12 +1,16 @@
1
1
  提示コードですがコメント部内部のコードなのですがobjファイルにある面法線から頂点法線を求める方法が知りたいです。以下のように考えて実装してみたのですが提示画像のように正しい頂点法線を実装できません。これはどういったアルゴリズムなのでしょうか? objファイルはブレンダーで出力しました。
2
2
 
3
+ ##### 知りたいこと
4
+ 面法線から頂点法線を算出したい。
3
5
 
6
+
4
7
  ##### 確認したこと
5
8
  Phongのシェーディングを行っているのですがシェーダーコードは問題ありません。
6
9
  また頂点データ等を正しくopenglに渡せていることを確認しました。
7
10
 
8
11
 
9
12
 
13
+
10
14
  Github: [https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c](https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c)
11
15
 
12
16
 

3

文章を修正

2021/10/29 09:22

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -13,6 +13,10 @@
13
13
 
14
14
  ![イメージ説明](e593cca90764961be7c28446eb20ced7.png)
15
15
 
16
+
17
+
18
+
19
+
16
20
  mode.cpp
17
21
  ```
18
22
 
@@ -141,4 +145,54 @@
141
145
  attribute = obj;
142
146
  }
143
147
 
148
+ ```
149
+
150
+ ##### Cube.obj
151
+ ```
152
+ # Blender v2.93.5 OBJ File: ''
153
+ # www.blender.org
154
+ mtllib Cube.mtl
155
+ o Cube
156
+ v 1.000000 1.000000 -1.000000
157
+ v 1.000000 -1.000000 -1.000000
158
+ v 1.000000 1.000000 1.000000
159
+ v 1.000000 -1.000000 1.000000
160
+ v -1.000000 1.000000 -1.000000
161
+ v -1.000000 -1.000000 -1.000000
162
+ v -1.000000 1.000000 1.000000
163
+ v -1.000000 -1.000000 1.000000
164
+ vt 0.875000 0.500000
165
+ vt 0.625000 0.750000
166
+ vt 0.625000 0.500000
167
+ vt 0.375000 1.000000
168
+ vt 0.375000 0.750000
169
+ vt 0.625000 0.000000
170
+ vt 0.375000 0.250000
171
+ vt 0.375000 0.000000
172
+ vt 0.375000 0.500000
173
+ vt 0.125000 0.750000
174
+ vt 0.125000 0.500000
175
+ vt 0.625000 0.250000
176
+ vt 0.875000 0.750000
177
+ vt 0.625000 1.000000
178
+ vn 0.0000 1.0000 0.0000
179
+ vn 0.0000 0.0000 1.0000
180
+ vn -1.0000 0.0000 0.0000
181
+ vn 0.0000 -1.0000 0.0000
182
+ vn 1.0000 0.0000 0.0000
183
+ vn 0.0000 0.0000 -1.0000
184
+ usemtl Material
185
+ s off
186
+ f 5/1/1 3/2/1 1/3/1
187
+ f 3/2/2 8/4/2 4/5/2
188
+ f 7/6/3 6/7/3 8/8/3
189
+ f 2/9/4 8/10/4 6/11/4
190
+ f 1/3/5 4/5/5 2/9/5
191
+ f 5/12/6 2/9/6 6/7/6
192
+ f 5/1/1 7/13/1 3/2/1
193
+ f 3/2/2 7/14/2 8/4/2
194
+ f 7/6/3 5/12/3 6/7/3
195
+ f 2/9/4 4/5/4 8/10/4
196
+ f 1/3/5 3/2/5 4/5/5
197
+ f 5/12/6 1/3/6 2/9/6
144
198
  ```

2

文章を編集

2021/10/29 07:27

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,12 +1,13 @@
1
- 提示コードですがコメント部内部のコードなのですがobjファイルにある面法線から頂点法線を求める方法が知りたいです。以下のように考えて実装してみたのですが提示画像のように正しい頂点法線を実装できません。これはどういったアルゴリズムなのでしょうか?
1
+ 提示コードですがコメント部内部のコードなのですがobjファイルにある面法線から頂点法線を求める方法が知りたいです。以下のように考えて実装してみたのですが提示画像のように正しい頂点法線を実装できません。これはどういったアルゴリズムなのでしょうか? objファイルはブレンダーで出力しました。
2
2
 
3
+
3
4
  ##### 確認したこと
4
5
  Phongのシェーディングを行っているのですがシェーダーコードは問題ありません。
5
6
  また頂点データ等を正しくopenglに渡せていることを確認しました。
6
7
 
7
8
 
8
9
 
9
- Github: https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c
10
+ Github: [https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c](https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c)
10
11
 
11
12
 
12
13
 

1

文章を修正

2021/10/29 07:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,15 @@
1
1
  提示コードですがコメント部内部のコードなのですがobjファイルにある面法線から頂点法線を求める方法が知りたいです。以下のように考えて実装してみたのですが提示画像のように正しい頂点法線を実装できません。これはどういったアルゴリズムなのでしょうか?
2
2
 
3
+ ##### 確認したこと
4
+ Phongのシェーディングを行っているのですがシェーダーコードは問題ありません。
5
+ また頂点データ等を正しくopenglに渡せていることを確認しました。
3
6
 
4
7
 
5
8
 
9
+ Github: https://github.com/Shigurechan/GL/tree/1cbb996dcd55330beb10f57cbe863d7d24aeb41c
10
+
11
+
12
+
6
13
  ![イメージ説明](e593cca90764961be7c28446eb20ced7.png)
7
14
 
8
15
  mode.cpp