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

質問編集履歴

1

入退会を繰り返し何度も同じ投稿をしているのではという貴重な指摘についてなのですが、ログの通り解決していないために長引いているだけの初質問です

2020/07/10 04:55

投稿

cawawa
cawawa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,11 +1,12 @@
1
1
  ### 前提・実現したいこと
2
+ 2020/07/10 追記 修正したコードを反映しました
2
3
 
3
4
  OpenGLを使って、クリックで四点を入力しベジェ曲線を描画するプログラムを作ろうとしています。
4
5
 
5
6
 
6
7
  ### 発生している問題・エラーメッセージ
7
8
 
8
- クリックした座標を配列に格納することはできたのですが画面への反映がされません。
9
+ クリックした座標を配列に格納することはできたのですが曲線に関して画面への反映がされません。
9
10
  どこを修正したらよいか教えていただけると幸いです。
10
11
  ```
11
12
  エラーメッセージ
@@ -25,13 +26,14 @@
25
26
  GLfloat ctrlpoints[4][3];
26
27
  int i = 0;
27
28
 
28
- void mouse(int button, int state, int x, int y)
29
+ void mouse(int button, int state, int x, int y)
29
30
  {
30
31
  if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
31
32
  {
33
+ float a = 30, b = 5, c = (float)x / a - b, d = (float)y / a - b;
32
34
  if (i < 4) {
33
- ctrlpoints[i][0] = { (float)x };
35
+ ctrlpoints[i][0] = { c };
34
- ctrlpoints[i][1] = { (float)y };
36
+ ctrlpoints[i][1] = { -d };
35
37
  ctrlpoints[i][2] = { 0.0 };
36
38
  printf("ctrlpoints[%d]:%lf %lf %lf\n", i, ctrlpoints[i][0], ctrlpoints[i][1], ctrlpoints[i][2]);
37
39
  }
@@ -61,7 +63,7 @@
61
63
  glVertex3fv(&ctrlpoints[i][0]);
62
64
  glEnd();
63
65
 
64
- glFlush();
66
+ glFinish();
65
67
  }
66
68
 
67
69
  void resize(int w, int h)
@@ -95,8 +97,10 @@
95
97
  void init(void)
96
98
  {
97
99
  glClearColor(0.0, 0.0, 0.0, 0.0);
100
+ if (ctrlpoints[3][0] != NULL) {
98
- glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
101
+ glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
99
- glEnable(GL_MAP1_VERTEX_3);
102
+ glEnable(GL_MAP1_VERTEX_3);
103
+ }
100
104
  }
101
105
 
102
106
  int main(int argc, char** argv)
@@ -120,7 +124,7 @@
120
124
  /* 入力処理ルーチンの設定 */
121
125
  glutKeyboardFunc(keyboard);
122
126
  glutMouseFunc(mouse); //コールバック関数の登録
123
-
127
+
124
128
  /* 無限ループ */
125
129
  glutMainLoop();
126
130