質問編集履歴
4
文章を修正タイトルも
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
|
-

|
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 *
|
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
|
-
|
47
|
+
float x = cos(ff) * w.x;
|
50
|
-
|
48
|
+
float y = sin(ff) * w.y;
|
49
|
+
glVertex2f(x, y);
|
50
|
+
ff += f;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
glEnd();
|
51
54
|
|
52
|
-
|
55
|
+
glFinish();
|
53
|
-
|
54
|
-
ff += f;
|
55
56
|
}
|
56
|
-
|
57
|
-
glEnd();
|
58
|
-
glFinish();
|
59
|
-
|
60
57
|
glPopMatrix();
|
58
|
+
}
|
61
59
|
|
62
|
-
}
|
63
60
|
```
|
3
文章を修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
提示コードですが
|
1
|
+
提示コードですが円を回転させてみようと思い円を回転させるコードを組んだのですがこれはなぜ円が歪むのでしょうか?
|
2
2
|
まず原点を中心に円を描いてその頂点が原点を中心に回転しているだけだと思うのですがなぜなのでしょうか?
|
3
3
|
|
4
4
|
|
2
文章を修正しました。
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
タグを修正
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|