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

質問編集履歴

4

文章を修正タイトルも

2021/06/29 04:44

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- 頂点描画する円を回転させると形が歪む原因が知りたい。
1
+ 頂点描画円を回転させたい。
body CHANGED
@@ -1,63 +1,60 @@
1
- 提示コードですが円を回転させてみようと思い円を回転させコードを組んだのですがこれはなぜ円が歪むのでしょうか?
1
+ 提示コードですが頂点描画の円を回転させると形歪みます。提示画像左の円これはなぜでしょうか?
2
- まず原点を中心に円をてその頂点が原点中心回転ているだけだと思うですがなぜなのでょうか?
2
+ 実装はアスペクト比正方形に固定して頂点を描画してそx,yどちらか引き伸ばアスペクト比に伸ばました。
3
3
 
4
4
 
5
- ###試したこと
5
+ #####試したこと
6
- ###### r 引数の値に0を入れると真球の丸い円が表示されます。
7
- ###### 誤差疑いコードを確認
6
+ アスペクト比変更するコードに変更
8
- ######
9
7
 
10
8
 
11
9
 
12
10
 
13
11
 
14
12
 
15
- ![イメージ説明](00eb40b13e84e9262125e944da494ccb.png)
13
+ ![イメージ説明](b8bc7ccefecfe00329a83299c58af739.png)
16
-
17
-
18
-
19
14
  ```cpp
20
-
21
15
  // ##################################### 円 描画 #####################################
22
16
  void DrawCircle(glm::vec2 pos,unsigned short num,unsigned short width,GLdouble r, glm::vec4 color)
23
17
  {
18
+ const float aspect = FrameWork::getWindowContext()->getSize().x / FrameWork::getWindowContext()->getSize().y; //アスペクト比
19
+ const glm::vec2 offset = glm::vec2(aspect, -1.0f);
20
+ const float rate = 2.0f / FrameWork::getWindowContext()->getSize().y;
21
+
24
22
  float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2);
25
23
  float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2);
26
24
 
27
25
  glColor4f(color.x * RGBA_COLOR, color.y * RGBA_COLOR, color.z * RGBA_COLOR, color.w * RGBA_COLOR);
28
26
 
29
27
  glm::vec2 w;
30
- w.x = width * dx;
28
+ w.x = width * dy;
31
29
  w.y = width * dy;
32
30
 
33
-
34
31
  pos = getWindowPosition(pos);
35
32
 
36
-
37
- glMatrixMode(GL_MODELVIEW);
38
33
  glPushMatrix();
39
-
40
- glTranslated(pos.x + (w.x / 2.0f), pos.y - (w.y / 2.0f), 0);
41
- glRotated(r, 0, 0, 1);
42
-
43
- glBegin(GL_TRIANGLE_FAN);
44
-
45
- float f = (PI * 2.0f) / (float)num;
46
- float ff = 0;
47
- for (unsigned short i = 0; i < num; i++)
48
34
  {
35
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////
36
+ glMatrixMode(GL_MODELVIEW);
37
+ glTranslated(pos.x + (width * dx / 2.0f), pos.y - (width * dy / 2.0f), 0);
38
+ glRotated(FrameWork::GetAngle(r), 0, 0, 1);
39
+ glScaled(1.0f / aspect, -1.0f, 0);
40
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////
41
+ glBegin(GL_TRIANGLE_FAN);
42
+ {
43
+ float f = (PI * 2.0f) / (float)num;
44
+ float ff = 0;
45
+ for (unsigned short i = 0; i < num; i++)
46
+ {
49
- float x = cos(ff) * w.x;
47
+ float x = cos(ff) * w.x;
50
- float y = sin(ff) * w.y;
48
+ float y = sin(ff) * w.y;
49
+ glVertex2f(x, y);
50
+ ff += f;
51
+ }
52
+ }
53
+ glEnd();
51
54
 
52
- glVertex2f(x,y);
55
+ glFinish();
53
-
54
- ff += f;
55
56
  }
56
-
57
- glEnd();
58
- glFinish();
59
-
60
57
  glPopMatrix();
58
+ }
61
59
 
62
- }
63
60
  ```

3

文章を修正

2021/06/29 04:44

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードですが意味はなくても円を回転させてみようと思い円を回転させるコードを組んだのですがこれはなぜ円が歪むのでしょうか?
1
+ 提示コードですが円を回転させてみようと思い円を回転させるコードを組んだのですがこれはなぜ円が歪むのでしょうか?
2
2
  まず原点を中心に円を描いてその頂点が原点を中心に回転しているだけだと思うのですがなぜなのでしょうか?
3
3
 
4
4
 

2

文章を修正しました。

2021/06/29 03:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,11 @@
1
1
  提示コードですが意味はなくても円を回転させてみようと思い円を回転させるコードを組んだのですがこれはなぜ円が歪むのでしょうか?
2
+ まず原点を中心に円を描いてその頂点が原点を中心に回転しているだけだと思うのですがなぜなのでしょうか?
2
3
 
3
4
 
4
5
  ###試したこと
5
6
  ###### r 引数の値に0を入れると真球の丸い円が表示されます。
6
7
  ###### 誤差を疑いコードを確認
8
+ ######
7
9
 
8
10
 
9
11
 

1

タグを修正

2021/06/28 01:45

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes