質問編集履歴

3

この一つ前の修正の結果、タイトルの日本語が怪しくなったので修正

2019/07/26 15:28

投稿

code413
code413

スコア14

test CHANGED
@@ -1 +1 @@
1
- GLFW画面のサイズ関わらず図形を固定の大きに設定したです。
1
+ ウィンドウを移動するま正常に図形が描画れな(OpenGL、GLFW)
test CHANGED
File without changes

2

自力での調査で解決した部分があったのでそれに伴う文章と画像の差し替え。そして調べていく過程でOSや開発環境自体の問題である可能性を指摘されたので環境の追記とタグの追加。

2019/07/26 15:28

投稿

code413
code413

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,20 +1,28 @@
1
+ 環境:
2
+
3
+ MacOS 10.14.5
4
+
5
+ Xcode 10.3
6
+
7
+
8
+
1
9
  床井研究室様の『GLFWによるOpenGL入門』(http://marina.sys.wakayama-u.ac.jp/~tokoi/GLFWdraft.pdf)を見て勉強しています。
2
10
 
3
11
 
4
12
 
5
- 第6章100P、下記のソース(字数の都合上コメントを一部省略)ができたのですが、起動後は真ん中に大きく(図1)、画面サイズを変えると比例して図形が変わり位置が移動します。(図2図3参照
13
+ 第6章100Pまで行い、下記のソース(字数の都合上コメントを一部省略)ができたのですが、起動後は真ん中に図1)、ウィンドウのサイズを変えると図形の位置が変わり、そこからウィンドウを移動すると再び図形の位置が戻ります。(図2,図3)
6
-
14
+
7
- ![](f44e29ae65b8150ae4d38057bc61ee6d.png)]
15
+ ![イメージ説明](19d4bc370e1f6a203bb1032431c86e7c.png)
8
16
 
9
17
              ---図1 起動直後---
10
18
 
11
- ![](600151cbd0e22a46fbf8121802136edb.png)
19
+ ![イメージ説明](b070d1252dbd168875c44c05e5150a7b.png)
12
20
 
13
21
              ---図2 サイズ変更後---
14
22
 
15
- ![](a37378875dc75832775e1b1259277ebf.png)
23
+ ![イメージ説明](c1aa1cb0452d2417d5327fe6872c3c37.png)
16
-
24
+
17
- ---図3 サイズ変更後(2)---
25
+ ---図3 サイズ変更後、移動---
18
26
 
19
27
 
20
28
 
@@ -274,7 +282,7 @@
274
282
 
275
283
 
276
284
 
277
- //矩形の頂点
285
+
278
286
 
279
287
  constexpr Object::Vertex rectangleVertex[] =
280
288
 
@@ -374,9 +382,7 @@
374
382
 
375
383
  shape -> draw();
376
384
 
377
-
378
-
379
- //カラーバッファを入れ替え
385
+
380
386
 
381
387
  window.swapBuffers();
382
388
 
@@ -406,16 +412,10 @@
406
412
 
407
413
  class Window{
408
414
 
409
- //ウィンドウのハンドル
410
-
411
415
  GLFWwindow *const window;
412
416
 
413
417
 
414
418
 
415
-
416
-
417
-
418
-
419
419
  //ウィンドウのサイズ
420
420
 
421
421
  GLfloat size[2];
@@ -504,9 +504,7 @@
504
504
 
505
505
 
506
506
 
507
-
508
-
509
- //デストラクタ
507
+
510
508
 
511
509
  virtual ~Window(){
512
510
 
@@ -530,14 +528,8 @@
530
528
 
531
529
  void swapBuffers(){
532
530
 
533
- //カラーバッファを入れ替える
534
-
535
531
  glfwSwapBuffers(window);
536
532
 
537
-
538
-
539
- //イベントを取り出す
540
-
541
533
  glfwWaitEvents();
542
534
 
543
535
  }
@@ -724,8 +716,6 @@
724
716
 
725
717
  public:
726
718
 
727
- //コンストラクタ
728
-
729
719
  Shape(GLint size,GLsizei vertexcount,const Object::Vertex *vertex)
730
720
 
731
721
  :object(new Object(size,vertexcount,vertex))
@@ -778,38 +768,38 @@
778
768
 
779
769
  void main(){
780
770
 
781
- gl_Position = vec4(2.0 * scale/size,1.0 , 1.0) * position;
771
+ gl_Position = vec4(2.0 * scale/size, 1.0 , 1.0) * position;
772
+
773
+ //二つ目の1.0のの前に空白を入れると動いた
774
+
775
+ ```
776
+
777
+
778
+
779
+ ```FragmentShader
780
+
781
+ #version 150 core
782
+
783
+ out vec4 fragment;
784
+
785
+
786
+
787
+ void main(){
788
+
789
+ fragment = vec4(1.0, 0.0, 0.0, 1.0);
782
790
 
783
791
  }
784
792
 
793
+
794
+
785
795
  ```
786
796
 
787
-
788
-
789
- ```FragmentShader
790
-
791
- #version 150 core
792
-
793
- out vec4 fragment;
794
-
795
-
796
-
797
- void main(){
798
-
799
- fragment = vec4(1.0, 0.0, 0.0, 1.0);
800
-
801
- }
802
-
803
-
804
-
805
- ```
806
-
807
-
808
-
809
-
810
-
811
-
812
-
813
-
814
-
815
- 原典ように画面の処理を別ファ分けたいと思いここ数日思いつく限り手段は試ししたが解決しません。よろしくお願いします。
797
+ ウィンドウズが切り替わっても真ん中表示したいのですが移動するまでは左下位置のまですどうかよろしくお願いします。
798
+
799
+
800
+
801
+ 追伸
802
+
803
+ バーテックスシェーダに1つスペースを加えたら、図形が横長になる問題とサイズがウィンドウに比例する問題は自己解決したので質問の画像、文章などを差し替えさせていただきました。
804
+
805
+ 現在は画面サイズ変更に伴う図形の移動について悩んでいます。

1

字数の都合から削っていたWindow.hのコメントを追記

2019/07/26 15:25

投稿

code413
code413

スコア14

test CHANGED
File without changes
test CHANGED
@@ -402,18 +402,36 @@
402
402
 
403
403
 
404
404
 
405
+ // ウィンドウ関連の処理
406
+
405
407
  class Window{
406
408
 
409
+ //ウィンドウのハンドル
410
+
407
411
  GLFWwindow *const window;
408
412
 
413
+
414
+
415
+
416
+
417
+
418
+
419
+ //ウィンドウのサイズ
420
+
409
421
  GLfloat size[2];
410
422
 
423
+
424
+
425
+ //ワールド座標系に対するデバイス座標系の拡大率
426
+
411
427
  GLfloat scale;
412
428
 
413
429
 
414
430
 
415
431
  public:
416
432
 
433
+ //コンストラクタ
434
+
417
435
  Window(int width = 640, int height = 480, const char *title = "Hello!")
418
436
 
419
437
  : window(glfwCreateWindow(width, height, title, NULL, NULL))
@@ -426,7 +444,9 @@
426
444
 
427
445
  {
428
446
 
447
+ //ウィンドウが作成できなかった
448
+
429
- std::cerr << "Can't create window." << std::endl;
449
+ std::cerr << "Can't create GLFW window." << std::endl;
430
450
 
431
451
  exit(1);
432
452
 
@@ -434,16 +454,22 @@
434
454
 
435
455
 
436
456
 
457
+ //現在のウィンドウを処理対象にする
458
+
437
459
  glfwMakeContextCurrent(window);
438
460
 
439
461
 
440
462
 
463
+ //GLEWを初期化する
464
+
441
465
  glewExperimental = GL_TRUE;
442
466
 
443
467
  if(glewInit() != GLEW_OK)
444
468
 
445
469
  {
446
470
 
471
+ //GLEWの初期化に失敗した
472
+
447
473
  std::cerr << "Can't initialize GLEW" << std::endl;
448
474
 
449
475
  exit(1);
@@ -452,27 +478,35 @@
452
478
 
453
479
 
454
480
 
481
+ //垂直同期のタイミングを待つ
482
+
455
483
  glfwSwapInterval(1);
456
484
 
457
485
 
458
486
 
459
- //このインスタンスの this ポインタを記録
487
+ //このインスタンスの this ポインタを記録しておく
460
488
 
461
489
  glfwSetWindowUserPointer(window, this);
462
490
 
463
491
 
464
492
 
465
- //画面のサイズ変更時に呼び出す処理の登録
493
+ //ウィンドウのサイズ変更時に呼び出す処理の登録
466
494
 
467
495
  glfwSetWindowSizeCallback(window,resize);
468
496
 
497
+
498
+
469
-
499
+ //開いたウィンドウの初期設定
470
500
 
471
501
  resize(window,width,height);
472
502
 
473
503
  }
474
504
 
505
+
506
+
507
+
508
+
475
-
509
+ //デストラクタ
476
510
 
477
511
  virtual ~Window(){
478
512
 
@@ -482,7 +516,7 @@
482
516
 
483
517
 
484
518
 
485
- //ウィンドウを閉じるべきかを判定
519
+ //ウィンドウを閉じるべきかを判定する
486
520
 
487
521
  int shouldClose() const{
488
522
 
@@ -496,15 +530,23 @@
496
530
 
497
531
  void swapBuffers(){
498
532
 
533
+ //カラーバッファを入れ替える
534
+
499
535
  glfwSwapBuffers(window);
500
536
 
537
+
538
+
539
+ //イベントを取り出す
540
+
501
541
  glfwWaitEvents();
502
542
 
503
543
  }
504
544
 
505
545
 
506
546
 
547
+
548
+
507
- //画面サイズを取り出す
549
+ //ウィンドウのサイズを取り出す
508
550
 
509
551
  const GLfloat *getSize() const { return size; }
510
552
 
@@ -516,13 +558,15 @@
516
558
 
517
559
 
518
560
 
519
- // 画面サイズ変更時の処理
561
+ // ウィンドウのサイズ変更時の処理
520
562
 
521
563
  static void resize(GLFWwindow *const window,int width,int height)
522
564
 
523
565
  {
524
566
 
567
+ //ウィンドウ全体をビューポートに設定する
568
+
525
- glViewport(0, 0, width, height);
569
+ glViewport(0, 0, width, height);
526
570
 
527
571
 
528
572
 
@@ -534,7 +578,7 @@
534
578
 
535
579
  if(instance != NULL){
536
580
 
537
- //開いたウィンドウのサイズを保存
581
+ //開いたウィンドウのサイズを保存する
538
582
 
539
583
  instance->size[0] = static_cast<GLfloat>(width);
540
584