質問編集履歴

2

追記

2020/03/23 16:41

投稿

hikarhikar
hikarhikar

スコア18

test CHANGED
File without changes
test CHANGED
@@ -121,3 +121,211 @@
121
121
 
122
122
 
123
123
  お手数をおかけしますがどなたかわかる方教えてください。<(_ _)>
124
+
125
+
126
+
127
+ 追記です。
128
+
129
+ ```c++
130
+
131
+ void loadOBJ()
132
+
133
+ {
134
+
135
+ FILE* pFileObj, * pFileMtl;
136
+
137
+
138
+
139
+ fopen_s(&pFileMtl, "OBJファイル//NewblockF.txt", "r");
140
+
141
+ fopen_s(&pFileObj, "OBJファイル//ねずこ.txt", "r");
142
+
143
+
144
+
145
+ if((pFileObj == nullptr) || (pFileMtl == nullptr)) {
146
+
147
+ printf("file erro\n");
148
+
149
+ return;
150
+
151
+ }
152
+
153
+ printf("opennd file\n");
154
+
155
+
156
+
157
+ char chr[25];
158
+
159
+ int i1, i2, i3,i4,i5,i6,i7,i8,i9;
160
+
161
+ char buf[25];
162
+
163
+
164
+
165
+ while (fgets(buf, 25, pFileObj) != NULL) {
166
+
167
+ char* buf2 = buf;
168
+
169
+ if (*buf2 == 'v') {
170
+
171
+ if ((*(++buf2) != 'n') && (*buf2 !='t')) {
172
+
173
+ sscanf(buf, "%s %f %f %f",
174
+
175
+ chr,
176
+
177
+ &vertex[vertexDataSize * 3],
178
+
179
+ &vertex[vertexDataSize * 3 + 1],
180
+
181
+ &vertex[vertexDataSize * 3 + 2]);
182
+
183
+
184
+
185
+ vertexDataSize++;
186
+
187
+ }
188
+
189
+ }
190
+
191
+ else if (*buf2 == 'f') {
192
+
193
+ sscanf(buf, "%s %d/%d/%d %d/%d/%d %d/%d/%d",
194
+
195
+ chr,
196
+
197
+ &i1,
198
+
199
+ &i2,
200
+
201
+ &i3,
202
+
203
+
204
+
205
+ &i4,
206
+
207
+ &i5,
208
+
209
+ &i6,
210
+
211
+
212
+
213
+ &i7,
214
+
215
+ &i8,
216
+
217
+ &i9);
218
+
219
+ /**/
220
+
221
+ int* iptr1 = &lines[lineDataSize * 3];
222
+
223
+ int* iptr2 = &lines[lineDataSize * 3 + 1];
224
+
225
+ int* iptr3 = &lines[lineDataSize * 3 + 2];
226
+
227
+
228
+
229
+ i1 = i1 - 1;
230
+
231
+ i4 = i4 - 1;
232
+
233
+ i7 = i7 - 1;
234
+
235
+
236
+
237
+
238
+
239
+ int* iptr4 = &i1;
240
+
241
+ int* iptr5 = &i4;
242
+
243
+ int* iptr6 = &i7;
244
+
245
+
246
+
247
+ *iptr1 = *iptr4;
248
+
249
+ *iptr2 = *iptr5;
250
+
251
+ *iptr3 = *iptr6;
252
+
253
+
254
+
255
+
256
+
257
+ lineDataSize++;
258
+
259
+ }
260
+
261
+
262
+
263
+
264
+
265
+ }
266
+
267
+ ```
268
+
269
+ 多くの情報をいただき、このようにしてみたのですが、少ないテキスト文字を読み取る(4角形ブロック)とうまくいくのですが、多くの文字を読み込む(人間モデル)だと失敗してしまうのはなぜでしょうか?
270
+
271
+
272
+
273
+ for (int i = 0; i < vertexDataSize; i++) {
274
+
275
+ printf("%f %f %f\n", vertex[i * 3], vertex[i * 3 + 1], vertex[i * 3 + 2]);
276
+
277
+ }
278
+
279
+ for (int i = 0; i < lineDataSize; i++) {
280
+
281
+ printf("%d %d %d\n", lines[i * 3], lines[i * 3 + 1], lines[i * 3 + 2]);
282
+
283
+ }
284
+
285
+
286
+
287
+ このソースコードを最後に書いて実行してみると、このように描画され、配列に格納されている値も正常に格納されています。
288
+
289
+
290
+
291
+ [四角形txtファイル](https://drive.google.com/open?id=1HsL1LOKKYh8VDZ-Dq2DD8O1euzP54vNb)
292
+
293
+
294
+
295
+ ![四角形](ed6b65b856f40393a31452ebdf158269.png)
296
+
297
+
298
+
299
+ ですが、このオブジェを人間モデルに変えて実行すると、
300
+
301
+
302
+
303
+ [人間モデルtxtファイル](https://drive.google.com/open?id=13hkeWuWE8tgqsvZoBEAmtmwwYW5DmBGg)
304
+
305
+
306
+
307
+ ![人間モデル](39389df014ce2add7858218654393df7.png)
308
+
309
+ ![値](5130858bb85792b07e33e992e6787783.png)
310
+
311
+ まず、読み込まれた値が、一番最初から、-nan 0.000000 0.000000 と訳の分からない値が読み込まれていて、それが終わったと思ったら、テキストの値とは全く異なった値が、読み込まれてしまいました。
312
+
313
+ そして、
314
+
315
+
316
+
317
+ for (int i = 0; i < lineDataSize; i++) {
318
+
319
+ printf("%d %d %d\n", lines[i * 3], lines[i * 3 + 1], lines[i * 3 + 2]);
320
+
321
+ }
322
+
323
+ これだけにすると、値が描画されず、おそらく、先ほどの右ウィンドウに描画されていた値は、
324
+
325
+ if (*buf2 == 'v')の部分で読み取っている値だと思うのですが、そのあとのelse if (*buf2 == 'f')が
326
+
327
+ 動作していないようです。
328
+
329
+
330
+
331
+ 色々考えてはみたのですが、うまくいかなかったので、お手数をおかけしますがどなたかわかる方教えてください<(_ _)>。

1

書式の改善

2020/03/23 16:41

投稿

hikarhikar
hikarhikar

スコア18

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  if (*buf2 == 'v') {
14
14
 
15
- if (*(++buf2) != 'n' && 't') {
15
+ if (*(++buf2) != 'n' && *(buf2)!='t') {
16
16
 
17
17
  sscanf(buf2, "%s %f %f %f",
18
18