質問編集履歴
5
文章とタイトルを修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
glbegin()
|
1
|
+
glbegin() テクスチャの表示座標の誤差の修正方法が知りたい
|
body
CHANGED
@@ -1,27 +1,19 @@
|
|
1
|
-
提示
|
1
|
+
提示画像ですが赤矢印の部分宝箱の左端に茶色の枠組み(0,0)左上端に描画では表示されません。これはなぜでしょうか?何かの誤差だと思うのですが原因がわかりません。
|
2
|
-
|
2
|
+
```cpp
|
3
|
+
glTranslatef(pos.x + (glm::abs(sizeEnd - sizeStart).x * dx / 2.0f), pos.y - (glm::abs(sizeEnd - sizeStart).y * dy / 2.0f), 0);
|
4
|
+
```
|
3
|
-
|
5
|
+
部の座標のpos部を(-1,1)としましたがまだどこかで誤差が出ているため端が表示されませんこれは何の誤差なのでしょうか?提示コードの////コメント部のコード
|
4
|
-
######glTranslatef関数の値を確認
|
5
|
-
######スケールの値をいじる。(提示画像)
|
6
|
-
###### UV座標を確認
|
7
6
|
|
8
7
|
|
9
8
|
|
10
9
|
|
10
|
+

|
11
|
+
```cpp
|
11
12
|
|
13
|
+
FrameWork::DrawTexture(glm::vec2(100, 100), glm::vec2(0, 0), glm::vec2(48, 48), 0, "Assets/Item.png");
|
14
|
+
FrameWork::DrawTexture(glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2(48, 48), 0, "Assets/Item.png");
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-

|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
```cpp
|
21
|
-
FrameWork::DrawTexture(glm::vec2(100,100),glm::vec2(48,48),glm::vec2(48 * 2,48 * 2),0,"Assets/Item.png");
|
22
|
-
|
23
16
|
```
|
24
|
-
|
25
17
|
```cpp
|
26
18
|
void DrawTexture(glm::vec2 pos, glm::vec2 sizeStart, glm::vec2 sizeEnd,GLfloat r, const char* fileName)
|
27
19
|
{
|
@@ -29,13 +21,17 @@
|
|
29
21
|
|
30
22
|
float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2);
|
31
23
|
float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2);
|
32
|
-
|
24
|
+
pos = FrameWork::getWindowPosition(pos);
|
33
25
|
// std::cout << p.x << std::endl;
|
34
26
|
// std::cout << p.y << std::endl;
|
35
27
|
|
36
28
|
TextureData data = FrameWork::LoadTexture(fileName);
|
37
29
|
GLuint texture;
|
38
30
|
|
31
|
+
const float aspect = FrameWork::getWindowContext()->getSize().x / FrameWork::getWindowContext()->getSize().y; //アスペクト比
|
32
|
+
const glm::vec2 offset = glm::vec2(aspect, -1.0f);
|
33
|
+
const float rate = 2.0f / FrameWork::getWindowContext()->getSize().y;
|
34
|
+
|
39
35
|
//UVのピクセル単位で算出
|
40
36
|
glm::vec2 size;
|
41
37
|
size.x = 1.0f / data.size.x;
|
@@ -56,30 +52,36 @@
|
|
56
52
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
57
53
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
58
54
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
55
|
+
glm::vec2 scale = glm::abs(sizeEnd - sizeStart);
|
59
56
|
|
60
57
|
glPushMatrix();
|
61
58
|
{
|
62
|
-
|
59
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
63
60
|
glMatrixMode(GL_MODELVIEW);
|
64
|
-
|
61
|
+
glTranslatef(pos.x + (glm::abs(sizeEnd - sizeStart).x * dx / 2.0f), pos.y - (glm::abs(sizeEnd - sizeStart).y * dy / 2.0f), 0);
|
62
|
+
|
65
|
-
|
63
|
+
glScalef(scale.x * dx, scale.y * dy, 0);
|
66
|
-
glTranslatef(0, 0, 0);
|
67
|
-
|
64
|
+
std::cout << "pos.x: " << pos.x << std::endl;
|
65
|
+
std::cout << "pos.y: " << pos.y << std::endl;
|
68
66
|
glRotated(FrameWork::GetAngle(r), 0, 0, 1);
|
67
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
69
68
|
|
69
|
+
|
70
|
-
glBegin(
|
70
|
+
glBegin(GL_QUAD_STRIP);
|
71
71
|
{
|
72
|
-
glTexCoord2f(start.x, end.y);
|
73
|
-
glVertex2f(-1, -1);
|
74
72
|
|
75
73
|
glTexCoord2f(start.x, start.y);
|
76
74
|
glVertex2f(-1, 1);
|
77
75
|
|
78
|
-
glTexCoord2f(end.x, start.
|
76
|
+
glTexCoord2f(end.x, start.x);
|
79
77
|
glVertex2f(1, 1);
|
80
78
|
|
79
|
+
glTexCoord2f(start.x, end.y);
|
80
|
+
glVertex2f(-1, -1);
|
81
|
+
|
81
82
|
glTexCoord2f(end.x, end.y);
|
82
83
|
glVertex2f(1, -1);
|
84
|
+
|
83
85
|
}
|
84
86
|
glEnd();
|
85
87
|
|
4
文章を修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
glbegin()を使っててテクスチャ描画を行いたい。
|
body
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
提示コードの下部のglbegin();関数部内部ですが座標を変えても座標が変化せずスケールを触ると大きさと座標が変化しますこれはどういうことなのでしょうか?原因がわかりません。
|
2
2
|
###調べたこと
|
3
3
|
######一旦スケール、回転、平行移動を無視して矩形を描画
|
4
|
-
######
|
4
|
+
######glTranslatef関数の値を確認
|
5
5
|
######スケールの値をいじる。(提示画像)
|
6
|
+
###### UV座標を確認
|
6
7
|
|
7
8
|
|
8
9
|
|
@@ -10,6 +11,7 @@
|
|
10
11
|
|
11
12
|
|
12
13
|
|
14
|
+
|
13
15
|

|
14
16
|
|
15
17
|
|
3
文章とタイトルを修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,27 +1,36 @@
|
|
1
|
-
提示コードの
|
1
|
+
提示コードの下部のglbegin();関数部内部ですが座標を変えても座標が変化せずスケールを触ると大きさと座標が変化しますこれはどういうことなのでしょうか?原因がわかりません。
|
2
|
+
###調べたこと
|
3
|
+
######一旦スケール、回転、平行移動を無視して矩形を描画
|
2
|
-
値を
|
4
|
+
######glRranslatef関数の値を確認
|
5
|
+
######スケールの値をいじる。(提示画像)
|
3
6
|
|
4
7
|
|
5
8
|
|
6
9
|
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+

|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
7
18
|
```cpp
|
8
19
|
FrameWork::DrawTexture(glm::vec2(100,100),glm::vec2(48,48),glm::vec2(48 * 2,48 * 2),0,"Assets/Item.png");
|
9
20
|
|
10
21
|
```
|
11
22
|
|
12
23
|
```cpp
|
13
|
-
|
24
|
+
void DrawTexture(glm::vec2 pos, glm::vec2 sizeStart, glm::vec2 sizeEnd,GLfloat r, const char* fileName)
|
14
25
|
{
|
15
26
|
glColor4f(255,255,255,255);
|
16
27
|
|
17
28
|
float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2);
|
18
29
|
float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2);
|
19
|
-
////////////////////////////////////////////////////////////////////////////////
|
20
30
|
glm::vec2 p = FrameWork::getWindowPosition(pos);
|
21
|
-
|
22
31
|
// std::cout << p.x << std::endl;
|
23
32
|
// std::cout << p.y << std::endl;
|
24
|
-
|
33
|
+
|
25
34
|
TextureData data = FrameWork::LoadTexture(fileName);
|
26
35
|
GLuint texture;
|
27
36
|
|
@@ -48,12 +57,12 @@
|
|
48
57
|
|
49
58
|
glPushMatrix();
|
50
59
|
{
|
60
|
+
glm::vec2 scale = glm::abs(sizeEnd - sizeStart);
|
51
61
|
glMatrixMode(GL_MODELVIEW);
|
52
|
-
|
62
|
+
glScalef(0.5,0.5, 0);
|
53
|
-
glScalef(dx * scale.x,dy * scale.y, 0);
|
63
|
+
//glScalef(dx * scale.x,dy * scale.y, 0);
|
54
|
-
///////////////////////////////////////////////////////////////////////////
|
55
|
-
glTranslatef(
|
64
|
+
glTranslatef(0, 0, 0);
|
56
|
-
//
|
65
|
+
//glTranslatef(p.x,p.y,0);
|
57
66
|
glRotated(FrameWork::GetAngle(r), 0, 0, 1);
|
58
67
|
|
59
68
|
glBegin(GL_POLYGON);
|
@@ -80,4 +89,5 @@
|
|
80
89
|
stbi_image_free(data.fileData); //画像データをdelete
|
81
90
|
}
|
82
91
|
|
92
|
+
|
83
93
|
```
|
2
タグを修正
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
タイトルを修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
glTranslatef();関数で表示座標が変わらない原因が知りたい。
|
body
CHANGED
File without changes
|