質問編集履歴
4
文章を修正タイトルも
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
|
-
![イメージ説明](
|
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 * d
|
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
|
-
|
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
|
-
gl
|
97
|
+
glVertex2f(x, y);
|
98
|
+
|
99
|
+
ff += f;
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
glEnd();
|
76
106
|
|
77
107
|
|
78
108
|
|
79
|
-
|
109
|
+
glFinish();
|
80
110
|
|
111
|
+
}
|
112
|
+
|
81
|
-
gl
|
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
文章を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
提示コードですが
|
1
|
+
提示コードですが円を回転させてみようと思い円を回転させるコードを組んだのですがこれはなぜ円が歪むのでしょうか?
|
2
2
|
|
3
3
|
まず原点を中心に円を描いてその頂点が原点を中心に回転しているだけだと思うのですがなぜなのでしょうか?
|
4
4
|
|
2
文章を修正しました。
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
タグを修正
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|