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

質問編集履歴

5

文章とタイトルを修正

2021/06/29 04:29

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- glbegin()を使っててテクスチャ描画を行いたい
1
+ glbegin() テクスチャの表示座標の誤差の修正方法が知りたい
body CHANGED
@@ -1,27 +1,19 @@
1
- 提示コード部のglbegin();関数部内部すが座標を変えても座標が変化せずスケールを触ると大きと座標が変化しこれはどういうことでしょうか?原因がわかりません。
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
+ ![イメージ説明](3192d3cae52892c0dba2b660a9bf8680.png)
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
- ![イメージ説明](81e92a051fe6d6a3d7e9842fd60336c2.png)
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
- glm::vec2 p = FrameWork::getWindowPosition(pos);
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
- glm::vec2 scale = glm::abs(sizeEnd - sizeStart);
59
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////
63
60
  glMatrixMode(GL_MODELVIEW);
64
- glScalef(0.5,0.5, 0);
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
- //glScalef(dx * scale.x,dy * scale.y, 0);
63
+ glScalef(scale.x * dx, scale.y * dy, 0);
66
- glTranslatef(0, 0, 0);
67
- //glTranslatef(p.x,p.y,0);
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(GL_POLYGON);
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.y);
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

文章を修正

2021/06/29 04:29

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- glTranslatef();関数で表示座標が変わらな原因が知りたい。
1
+ glbegin()を使っててテクスチャ描画を行いたい。
body CHANGED
@@ -1,8 +1,9 @@
1
1
  提示コードの下部のglbegin();関数部内部ですが座標を変えても座標が変化せずスケールを触ると大きさと座標が変化しますこれはどういうことなのでしょうか?原因がわかりません。
2
2
  ###調べたこと
3
3
  ######一旦スケール、回転、平行移動を無視して矩形を描画
4
- ######glRranslatef関数の値を確認
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
  ![イメージ説明](81e92a051fe6d6a3d7e9842fd60336c2.png)
14
16
 
15
17
 

3

文章とタイトルを修正

2021/06/29 03:11

投稿

退会済みユーザー
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
+ ![イメージ説明](81e92a051fe6d6a3d7e9842fd60336c2.png)
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
- void DrawTexture(glm::vec2 pos, glm::vec2 sizeStart, glm::vec2 sizeEnd,GLfloat r, const char* fileName)
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
- glm::vec2 scale = glm::abs(sizeEnd - sizeStart);
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(p.x,p.y,0);
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

タグを修正

2021/06/29 01:37

投稿

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

1

タイトルを修正

2021/06/28 12:37

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- glTranlated();関数で表示座標が変わらない原因が知りたい。
1
+ glTranslatef();関数で表示座標が変わらない原因が知りたい。
body CHANGED
File without changes