質問編集履歴

3

提示画像と文章を修正

2020/09/24 07:19

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- タイトル通りですがポリゴンを移動させると謎の画面領域の制限?で一定の位置からそれ以上移動するとその分消える?減少が起きてしまうのですがどうすればいいのでしょうか?
1
+ タイトル通りですがポリゴンを移動させると謎の画面領域の制限?で一定の位置からそれ以上移動するとその分消える?減少が起きてしまうのですがどうすればいいのでしょうか?4枚目の黒い線が境界線だと思うのですがなぜこの領域までしか描画されないのでしょうか?設定を忘れているのでしょうか?
2
2
 
3
3
 
4
4
 
@@ -28,4 +28,4 @@
28
28
 
29
29
  ![イメージ説明](f20a37ebdbc93e18bfe086039b4018b0.png)
30
30
 
31
- ![イメージ説明](79ed40fc923e241bb542b7a5ab52f621.png)
31
+ ![イメージ説明](a9d34e090e29c6359d4786792414a2f8.png)

2

文章とタイトルを編集しました。

2020/09/24 07:19

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- glm::perspective();正しい値どんな値か知りたい。
1
+ ポリゴンを移動させると謎領域制限のため切り捨てられる現象の原因が知りたい。
test CHANGED
@@ -1,42 +1,16 @@
1
- //透視射形行列を再計算 部の関数ですが回転すると提示ような動きをしてしまうのですがなぜでしょか?恐らく画角がおかしいためと思わますがどうしたらいいのでしょうか?
1
+ タイトル通りですがポリゴンを移動させると謎の面領域制限?で一定の位置からそれ以上移するとその分消える?減少が起きてしまうのですがいいのでしょうか?
2
-
3
- 正しい値がどんな値か知りたいです。
4
2
 
5
3
 
6
4
 
7
- ![イメージ説明](7bba6877c0c191f40d0eb1790be6abe6.png)
5
+ 提示画像の一番上から下に向けて説明します
8
6
 
7
+ 1実行画面
9
8
 
9
+ 2Z軸をマイナスして縮小
10
10
 
11
+ 3右に移動(ウインドウサイズを大きくして画面を大きくしました)
11
12
 
12
-
13
-
14
-
15
-
16
-
17
- ```cpp
18
-
19
-
20
-
21
- //描画アップデート
13
+ 4問題の謎の描画領域の外?
22
-
23
- void Game::GenerateOutput()
24
-
25
- {
26
-
27
- glViewport(0, 0, WIDTH, HEIGHT);
28
-
29
-
30
-
31
- glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
32
-
33
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
34
-
35
-
36
-
37
- //ワールド行列とビュー行列を再計算
38
-
39
- CreateWorldMatrix();
40
14
 
41
15
 
42
16
 
@@ -48,68 +22,10 @@
48
22
 
49
23
 
50
24
 
51
- //透視射形行列を再計算
25
+ ![イメージ説明](19c34c7f2d21d0bbc9573b9d54a377fb.png)
52
26
 
53
- glm::mat4 v = glm::perspective((35.5f), (640.0f / 400.0f), 0.0f, 1.5f);
27
+ ![イメージ説明](51b6b00d0647495ed6f5d4b393579986.png)
54
28
 
55
- memcpy(viewMatrix, &v, sizeof(float) * 16);
29
+ ![イメージ説明](f20a37ebdbc93e18bfe086039b4018b0.png)
56
30
 
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
- //シェーダープログラムをアクティブ
72
-
73
- glUseProgram(ShaderProgram);
74
-
75
-
76
-
77
- //Uniformリソースをプログラムに設定
78
-
79
- glUniformMatrix4fv(glGetUniformLocation(ShaderProgram, "worldMatrix"), 1, GL_FALSE, wordlMatrix);
80
-
81
- glUniformMatrix4fv(glGetUniformLocation(ShaderProgram, "viewMatrix"), 1, GL_FALSE, viewMatrix);
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
- // 頂点リソースを設定
90
-
91
- glBindVertexArray(vao);
92
-
93
-
94
-
95
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
31
+ ![イメージ説明](79ed40fc923e241bb542b7a5ab52f621.png)
96
-
97
-
98
-
99
-
100
-
101
- glDrawElements(GL_TRIANGLES, std::size(index), GL_UNSIGNED_INT,0);
102
-
103
-
104
-
105
-
106
-
107
- glfwSwapBuffers(Window);
108
-
109
- glfwPollEvents();
110
-
111
-
112
-
113
- }
114
-
115
- ```

1

提示コードと文章を編集しました。

2020/09/24 05:19

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- カメラ行列の値の設定方法が知りたい 画面に描画されない
1
+ glm::perspective();正しい値がどんな値か知りたい。
test CHANGED
@@ -1,18 +1,10 @@
1
- 提示コードの下部のint main();関数ですがカメラ透視射形行列設定してますが画面に何も表示されません。掛け算はライブラリを使ってるため掛け算順序は間違えていません。
1
+ //透視射形行列を再計算 部の関数ですが回転する提示画像ような動きをしてうのですがなぜでしょうか?恐らく角がおかしいためと思われますがどうしたらでしょうか?
2
+
3
+ 正しい値がどんな値か知りたいです。
2
4
 
3
5
 
4
6
 
5
- 質問1、int main();関数部の 2つの行列関数の値の設定が間違えていると思うのですがどの値を設定すればいいのでしょうか?
7
+ ![イメージ説明](7bba6877c0c191f40d0eb1790be6abe6.png)
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
8
 
17
9
 
18
10
 
@@ -23,734 +15,6 @@
23
15
 
24
16
 
25
17
  ```cpp
26
-
27
-
28
-
29
- #include "Game.hpp"
30
-
31
-
32
-
33
- #include <iostream>
34
-
35
- #include <string>
36
-
37
- #include <fstream>
38
-
39
- #include <sstream>
40
-
41
- #include "Vector.hpp"
42
-
43
- #include "stb/stb_image.h"
44
-
45
-
46
-
47
-
48
-
49
- #include "glm/ext.hpp"
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
60
-
61
-
62
-
63
- //ビュー行列 位置、注視点、上
64
-
65
- void Game::CreateView(glm::vec3 eye, glm::vec3 target, glm::vec3 up)
66
-
67
- {
68
-
69
- glm::vec3 zaxis = glm::normalize(target - eye);
70
-
71
- glm::vec3 xaxis = glm::normalize(glm::cross(up, zaxis));
72
-
73
- glm::vec3 yaxis = glm::normalize(glm::cross(zaxis, xaxis));
74
-
75
- glm::vec3 trans;
76
-
77
-
78
-
79
- trans.x = -glm::dot(xaxis, eye);
80
-
81
- trans.y = -glm::dot(yaxis, eye);
82
-
83
- trans.z = -glm::dot(zaxis, eye);
84
-
85
-
86
-
87
- float temp[16] =
88
-
89
- {
90
-
91
- xaxis.x, yaxis.x, zaxis.x, 0.0f,
92
-
93
- xaxis.y, yaxis.y, zaxis.y, 0.0f,
94
-
95
- xaxis.z, yaxis.z, zaxis.z, 0.0f,
96
-
97
- trans.x, trans.y, trans.z, 1.0f
98
-
99
- };
100
-
101
-
102
-
103
-
104
-
105
- memcpy(viewPro, temp, sizeof(std::size(temp)));
106
-
107
-
108
-
109
- }
110
-
111
-
112
-
113
-
114
-
115
- //透視射形行列
116
-
117
- void Game::CreatePerspective(float fovY, float width, float height, float near, float far)
118
-
119
- {
120
-
121
- float yScale = glm::cot(fovY / 2.0f);
122
-
123
- float xScale = yScale * height / width;
124
-
125
-
126
-
127
- float temp[16] =
128
-
129
- {
130
-
131
- xScale, 0.0f, 0.0f, 0.0f ,
132
-
133
- 0.0f, yScale, 0.0f, 0.0f ,
134
-
135
- 0.0f, 0.0f, far / (far - near), 1.0f ,
136
-
137
- 0.0f, 0.0f, -near * far / (far - near), 0.0f
138
-
139
- };
140
-
141
-
142
-
143
- memcpy(Proj, temp, sizeof(std::size(temp)));
144
-
145
- }
146
-
147
-
148
-
149
- //コンストラクタ
150
-
151
- Game::Game()
152
-
153
- {
154
-
155
- mIsRunLoop = true;
156
-
157
-
158
-
159
- //回転
160
-
161
- move_rotate.x = 0;
162
-
163
- move_rotate.y = 0;
164
-
165
- move_rotate.z = 0;
166
-
167
-
168
-
169
-
170
-
171
-
172
-
173
-
174
-
175
- //頂点属性を設定
176
-
177
- vertex[0].Position[0] = -10;
178
-
179
- vertex[0].Position[1] = 10;
180
-
181
- vertex[0].Position[2] = -1;
182
-
183
- /*
184
-
185
- vertex[0].Color[0] = 0.0;
186
-
187
- vertex[0].Color[1] = 0.0;
188
-
189
- vertex[0].Color[2] = 1.0;
190
-
191
- */
192
-
193
-
194
-
195
- vertex[1].Position[0] = -10;
196
-
197
- vertex[1].Position[1] = -10;
198
-
199
- vertex[1].Position[2] = -1;
200
-
201
- /*
202
-
203
- vertex[1].Color[0] = 0.0;
204
-
205
- vertex[1].Color[1] = 0.0;
206
-
207
- vertex[1].Color[2] = 1.0;
208
-
209
- */
210
-
211
-
212
-
213
- vertex[2].Position[0] = 10;
214
-
215
- vertex[2].Position[1] = -10;
216
-
217
- vertex[2].Position[2] = -1;
218
-
219
- /*
220
-
221
- vertex[2].Color[0] = 0.0;
222
-
223
- vertex[2].Color[1] = 0.0;
224
-
225
- vertex[2].Color[2] = 1.0;
226
-
227
- */
228
-
229
-
230
-
231
- vertex[3].Position[0] = 10;
232
-
233
- vertex[3].Position[1] = 10;
234
-
235
- vertex[3].Position[2] = -1;
236
-
237
- /*
238
-
239
- vertex[3].Color[0] = 0.0;
240
-
241
- vertex[3].Color[1] = 0.0;
242
-
243
- vertex[3].Color[2] = 1.0;
244
-
245
- */
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
- }
254
-
255
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
256
-
257
- //メインループ
258
-
259
- bool Game::RunLoop()
260
-
261
- {
262
-
263
- if (mIsRunLoop == true)
264
-
265
- {
266
-
267
- Update();
268
-
269
- GenerateOutput();
270
-
271
- }
272
-
273
- else {
274
-
275
- return false;
276
-
277
- }
278
-
279
- return true;
280
-
281
-
282
-
283
- }
284
-
285
-
286
-
287
-
288
-
289
-
290
-
291
- //回転行列を設定
292
-
293
- void Game::Set_rotate(float xx,float yy,float zz,float rr)
294
-
295
- {
296
-
297
-
298
-
299
- float x = xx * sin(rr / 2);
300
-
301
- float y = yy * sin(rr / 2);
302
-
303
- float z = zz * sin(rr / 2);
304
-
305
- float w = cos(rr / 2);
306
-
307
-
308
-
309
- rotate[0] = (1 -2 * y * y * -2 * z * z);
310
-
311
- rotate[1] = (2 * x * y +2 * w * z);
312
-
313
- rotate[2] = (2 * x * z -2 * w * y);
314
-
315
- rotate[3] = 0;
316
-
317
-
318
-
319
- rotate[4] = (2 * x * y * -2 * w * z);
320
-
321
- rotate[5] = (1 -2 * x * x * -2 * z * z);
322
-
323
- rotate[6] = (2 * y * z + 2 * w * x);
324
-
325
- rotate[7] = 0;
326
-
327
-
328
-
329
- rotate[8] = (2 * x * z +2 * w * y);
330
-
331
- rotate[9] = (2 * y * z -2 * w * x);
332
-
333
- rotate[10] = (1 -2 * x * x -2 * y * y);
334
-
335
- rotate[11] = 0;
336
-
337
-
338
-
339
- rotate[12] = 0;
340
-
341
- rotate[13] = 0;
342
-
343
- rotate[14] = 0;
344
-
345
- rotate[15] = 1;
346
-
347
-
348
-
349
- }
350
-
351
-
352
-
353
-
354
-
355
- //平行移動行列を設定
356
-
357
- void Game::Set_move(float x, float y, float z)
358
-
359
- {
360
-
361
- move[0] = 1;
362
-
363
- move[1] = 0;
364
-
365
- move[2] = 0;
366
-
367
- move[3] = 0;
368
-
369
-
370
-
371
- move[4] = 0;
372
-
373
- move[5] = 1;
374
-
375
- move[6] = 0;
376
-
377
- move[7] = 0;
378
-
379
-
380
-
381
- move[8] = 0;
382
-
383
- move[9] = 0;
384
-
385
- move[10] = 1;
386
-
387
- move[11] = 0;
388
-
389
-
390
-
391
-
392
-
393
- move[12] = x;
394
-
395
- move[13] = y;
396
-
397
- move[14] = z;
398
-
399
- move[15] = 1;
400
-
401
- }
402
-
403
-
404
-
405
- void Game::Set_scale(float x, float y, float z)
406
-
407
- {
408
-
409
-
410
-
411
- scale[0] = x;
412
-
413
- scale[1] = 0;
414
-
415
- scale[2] = 0;
416
-
417
- scale[3] = 0;
418
-
419
-
420
-
421
-
422
-
423
- scale[4] = 0;
424
-
425
- scale[5] = y;
426
-
427
- scale[6] = 0;
428
-
429
- scale[7] = 0;
430
-
431
-
432
-
433
- scale[8] = 0;
434
-
435
- scale[9] = 0;
436
-
437
- scale[10] = z;
438
-
439
- scale[11] = 0;
440
-
441
-
442
-
443
- scale[12] = 0;
444
-
445
- scale[13] = 0;
446
-
447
- scale[14] = 0;
448
-
449
- scale[15] = 1;
450
-
451
-
452
-
453
- }
454
-
455
-
456
-
457
- //初期化
458
-
459
- bool Game::Initialization()
460
-
461
- {
462
-
463
- //初期化 関係
464
-
465
- //------------------------------------------------------------------------------------------------------------------------------------------------
466
-
467
- //glfwの初期化に失敗
468
-
469
- if (glfwInit() != GL_TRUE)
470
-
471
- {
472
-
473
- printf("glfwInit()失敗\n");
474
-
475
- int _c = getchar();
476
-
477
-
478
-
479
- return 0;
480
-
481
- }
482
-
483
-
484
-
485
- //コンテキストを作成
486
-
487
- Window = glfwCreateWindow(640, 400, "Hello", NULL, NULL);
488
-
489
-
490
-
491
- //OpenGLコンテキストの作成に失敗
492
-
493
- if (Window == NULL)
494
-
495
- {
496
-
497
- printf("glfCreateWindow()失敗\n");
498
-
499
- int c = getchar();
500
-
501
-
502
-
503
- return 0;
504
-
505
- }
506
-
507
-
508
-
509
- //コンテキストをOpenGLの描画対象にする。
510
-
511
- glfwMakeContextCurrent(Window);
512
-
513
-
514
-
515
- //glewを初期化する。
516
-
517
- glewExperimental = GL_TRUE;
518
-
519
- if (glewInit() != GLEW_OK)
520
-
521
- {
522
-
523
- printf("glewInit() の初期化に失敗しました。");
524
-
525
- return 0;
526
-
527
- }
528
-
529
-
530
-
531
- //OpenGLバージョン指定
532
-
533
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
534
-
535
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 0);
536
-
537
-
538
-
539
- glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
540
-
541
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
542
-
543
-
544
-
545
-
546
-
547
-
548
-
549
-
550
-
551
-
552
-
553
- //垂直同期のタイミングを待つ
554
-
555
- glfwSwapInterval(1);
556
-
557
-
558
-
559
- //ワールド行列を生成
560
-
561
- //------------------------------------------------------------------------------------------------------------------------------------------------
562
-
563
-
564
-
565
- if (LoadShader("Basic.vert","Basic.frag") == true)//シェーダーを読み込む
566
-
567
- {
568
-
569
- //printf("シェーダーを読み込む\n");
570
-
571
- }
572
-
573
-
574
-
575
-
576
-
577
- //シェーダーでの画面描画配列を計算
578
-
579
- CreateWorldMatrix();
580
-
581
- Set_move(0, 0, 0);
582
-
583
- Set_rotate(0, 0, 0, 0);
584
-
585
- Set_scale(1, 1, 1);
586
-
587
-
588
-
589
-
590
-
591
-
592
-
593
-
594
-
595
- //テクスチャを設定
596
-
597
- {
598
-
599
- const char* fileName = "Assets/sample.png";
600
-
601
- int width, height, numComponents;
602
-
603
-
604
-
605
- unsigned char* data = stbi_load((fileName), &width, &height, &numComponents, 4);
606
-
607
-
608
-
609
- if (data == NULL) {
610
-
611
- std::cerr << "Unable to load texture: " << fileName << std::endl;
612
-
613
- }
614
-
615
-
616
-
617
- glGenTextures(1, &TextureID);
618
-
619
- glBindTexture(GL_TEXTURE_2D, TextureID);
620
-
621
-
622
-
623
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
624
-
625
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
626
-
627
-
628
-
629
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
630
-
631
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
632
-
633
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
634
-
635
-
636
-
637
-
638
-
639
- stbi_image_free(data);
640
-
641
-
642
-
643
- }
644
-
645
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
646
-
647
-
648
-
649
-
650
-
651
- // vertexbufferの設定
652
-
653
- {
654
-
655
- //頂点バッファオブジェクトを作成する
656
-
657
- glGenBuffers(1, &vbo);
658
-
659
-
660
-
661
- //作成した頂点バッファオブジェクトを結合する
662
-
663
- glBindBuffer(GL_ARRAY_BUFFER, vbo);
664
-
665
-
666
-
667
- //頂点バッファオブジェクトに頂点属性を転送する
668
-
669
- glBufferData(GL_ARRAY_BUFFER, 4 * 3 * sizeof(GLfloat), vertex, GL_STATIC_DRAW);
670
-
671
-
672
-
673
- //attribute変数に関連付ける
674
-
675
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex),NULL);
676
-
677
-
678
-
679
- //attribute変数を有効にする
680
-
681
- glEnableVertexAttribArray(0);
682
-
683
-
684
-
685
- }
686
-
687
-
688
-
689
-
690
-
691
- //インデックスバッファを設定
692
-
693
- {
694
-
695
- glGenBuffers(1, &ibo);
696
-
697
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
698
-
699
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index), index, GL_STATIC_DRAW);
700
-
701
-
702
-
703
- }
704
-
705
-
706
-
707
-
708
-
709
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
710
-
711
-
712
-
713
-
714
-
715
- mIsRunLoop = true;
716
-
717
- return mIsRunLoop;
718
-
719
- }
720
-
721
-
722
-
723
- //ワールド行列を計算
724
-
725
- void Game::CreateWorldMatrix()
726
-
727
- {
728
-
729
-
730
-
731
- glm::mat4x4 t = (glm::make_mat4(move) * glm::make_mat4(rotate) * glm::make_mat4(scale));
732
-
733
-
734
-
735
- memcpy(wordlMatrix,glm::value_ptr(t),sizeof(float) * 16);
736
-
737
-
738
-
739
- }
740
-
741
-
742
-
743
- //アップデート
744
-
745
- void Game::Update()
746
-
747
- {
748
-
749
-
750
-
751
- }
752
-
753
-
754
18
 
755
19
 
756
20
 
@@ -776,41 +40,21 @@
776
40
 
777
41
 
778
42
 
779
-
780
-
781
- //カメラ行列を設定
782
-
783
- glm::vec3 e = glm::vec3(0, 0, 0);
784
-
785
- glm::vec3 t = glm::vec3(0, -1, 0);
786
-
787
- glm::vec3 u = glm::vec3(0, 1, 0);
788
-
789
- CreateView(e,t,u);
790
43
 
791
44
 
792
45
 
793
- //////////////////////////////////////////////////////////////////////////////////
794
-
795
- //遠視射形行列を設定
796
-
797
- CreatePerspective(1,640,400,0.1,999999);
798
46
 
799
47
 
800
48
 
801
- //ビュープロジェクション行列を作成
802
49
 
803
- glm::mat4 a,b;
804
50
 
805
- a = glm::make_mat4(viewPro);
51
+ //透視射形行列を再計算
806
52
 
807
- b = glm::make_mat4(Proj);
53
+ glm::mat4 v = glm::perspective((35.5f), (640.0f / 400.0f), 0.0f, 1.5f);
808
54
 
809
- glm::mat4 c = a * b;
55
+ memcpy(viewMatrix, &v, sizeof(float) * 16);
810
56
 
811
- memcpy(viewMatrix, &c, sizeof(float) * 16);
812
57
 
813
- ////////////////////////////////////////////////////////////////////////////////
814
58
 
815
59
 
816
60
 
@@ -836,19 +80,7 @@
836
80
 
837
81
  glUniformMatrix4fv(glGetUniformLocation(ShaderProgram, "viewMatrix"), 1, GL_FALSE, viewMatrix);
838
82
 
839
- Set_scale(1, 1, 1);
83
+
840
-
841
-
842
-
843
- /*
844
-
845
- // テクスチャリソースをプログラムに設定
846
-
847
- glActiveTexture(GL_TEXTURE0);
848
-
849
- glBindTexture(GL_TEXTURE_2D, TextureID);
850
-
851
- */
852
84
 
853
85
 
854
86