質問編集履歴

4

文章を修正タイトルも

2021/06/29 04:44

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 頂点描画する円を回転させると形が歪む原因が知りたい。
1
+ 頂点描画円を回転させたい。
test CHANGED
@@ -1,18 +1,14 @@
1
- 提示コードですが円を回転させようと思いを回転させるコードを組んだのですがこれはなぜ円が歪むのでしょうか?
1
+ 提示コードですが頂点描画の円を回転させると形が歪ます。提示画像左の円これはなぜでしょうか?
2
2
 
3
- まず原点を中心に円をてその頂点が原点中心回転ているだけだと思うですがなぜなのでょうか?
3
+ 実装はアスペクト比正方形に固定して頂点を描画してそx,yどちらか引き伸ばアスペクト比に伸ばました。
4
4
 
5
5
 
6
6
 
7
7
 
8
8
 
9
- ###試したこと
9
+ #####試したこと
10
10
 
11
- ###### r 引数の値に0を入れると真球の丸い円が表示されます。
12
-
13
- ###### 誤差疑いコードを確認
11
+ アスペクト比変更するコードに変更
14
-
15
- ######
16
12
 
17
13
 
18
14
 
@@ -26,23 +22,23 @@
26
22
 
27
23
 
28
24
 
29
- ![イメージ説明](00eb40b13e84e9262125e944da494ccb.png)
25
+ ![イメージ説明](b8bc7ccefecfe00329a83299c58af739.png)
30
-
31
-
32
-
33
-
34
-
35
-
36
26
 
37
27
  ```cpp
38
-
39
-
40
28
 
41
29
  // ##################################### 円 描画 #####################################
42
30
 
43
31
  void DrawCircle(glm::vec2 pos,unsigned short num,unsigned short width,GLdouble r, glm::vec4 color)
44
32
 
45
33
  {
34
+
35
+ const float aspect = FrameWork::getWindowContext()->getSize().x / FrameWork::getWindowContext()->getSize().y; //アスペクト比
36
+
37
+ const glm::vec2 offset = glm::vec2(aspect, -1.0f);
38
+
39
+ const float rate = 2.0f / FrameWork::getWindowContext()->getSize().y;
40
+
41
+
46
42
 
47
43
  float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2);
48
44
 
@@ -56,11 +52,9 @@
56
52
 
57
53
  glm::vec2 w;
58
54
 
59
- w.x = width * dx;
55
+ w.x = width * dy;
60
56
 
61
57
  w.y = width * dy;
62
-
63
-
64
58
 
65
59
 
66
60
 
@@ -68,58 +62,58 @@
68
62
 
69
63
 
70
64
 
65
+ glPushMatrix();
71
66
 
67
+ {
72
68
 
73
- glMatrixMode(GL_MODELVIEW);
69
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////
74
70
 
71
+ glMatrixMode(GL_MODELVIEW);
72
+
73
+ glTranslated(pos.x + (width * dx / 2.0f), pos.y - (width * dy / 2.0f), 0);
74
+
75
+ glRotated(FrameWork::GetAngle(r), 0, 0, 1);
76
+
77
+ glScaled(1.0f / aspect, -1.0f, 0);
78
+
79
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////
80
+
81
+ glBegin(GL_TRIANGLE_FAN);
82
+
83
+ {
84
+
85
+ float f = (PI * 2.0f) / (float)num;
86
+
87
+ float ff = 0;
88
+
89
+ for (unsigned short i = 0; i < num; i++)
90
+
91
+ {
92
+
93
+ float x = cos(ff) * w.x;
94
+
95
+ float y = sin(ff) * w.y;
96
+
75
- glPushMatrix();
97
+ glVertex2f(x, y);
98
+
99
+ ff += f;
100
+
101
+ }
102
+
103
+ }
104
+
105
+ glEnd();
76
106
 
77
107
 
78
108
 
79
- glTranslated(pos.x + (w.x / 2.0f), pos.y - (w.y / 2.0f), 0);
109
+ glFinish();
80
110
 
111
+ }
112
+
81
- glRotated(r, 0, 0, 1);
113
+ glPopMatrix();
114
+
115
+ }
82
116
 
83
117
 
84
118
 
85
- glBegin(GL_TRIANGLE_FAN);
86
-
87
-
88
-
89
- float f = (PI * 2.0f) / (float)num;
90
-
91
- float ff = 0;
92
-
93
- for (unsigned short i = 0; i < num; i++)
94
-
95
- {
96
-
97
- float x = cos(ff) * w.x;
98
-
99
- float y = sin(ff) * w.y;
100
-
101
-
102
-
103
- glVertex2f(x,y);
104
-
105
-
106
-
107
- ff += f;
108
-
109
- }
110
-
111
-
112
-
113
- glEnd();
114
-
115
- glFinish();
116
-
117
-
118
-
119
- glPopMatrix();
120
-
121
-
122
-
123
- }
124
-
125
119
  ```

3

文章を修正

2021/06/29 04:44

投稿

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

2

文章を修正しました。

2021/06/29 03:13

投稿

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

1

タグを修正

2021/06/28 01:45

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes