提示コードですが線の太さが7以上になったら頂点を複数用意して太い線を描画しているのですが回転させると線に隙間出てきてしまいます。
原因は頂点の位置を線分ずらしていることが原因なのですがこの場合どうやって修正すればいいのでしょうか?修正方法が思いつきません。
cpp
1 2 // ##################################### 線 描画 ##################################### 3 void DrawLine(glm::vec2 start,glm::vec2 end, GLfloat width,GLdouble r, glm::vec4 color) 4 { 5 glColor4f(color.x * RGBA_COLOR, color.y * RGBA_COLOR, color.z * RGBA_COLOR, color.w * RGBA_COLOR); 6 start = getWindowPosition(start); 7 end = getWindowPosition(end); 8 glm::vec2 size = glm::abs(end - start) / 2.0f; 9 10 //width の最大値と最小値を得る 11 GLfloat lineWidthRange[2] = { 0.0f, 0.0f }; 12 glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, lineWidthRange); 13 14// std::cout << lineWidthRange[0] << std::endl; 15// std::cout << lineWidthRange[1] << std::endl; 16 17 float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2); 18 float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2); 19 20 glPushMatrix(); 21 { 22 glMatrixMode(GL_MODELVIEW); 23 glTranslated(start.x + (size.x), start.y - size.y, 0); 24 glRotated(FrameWork::GetAngle(r), 0, 0, 1); 25 glLineWidth(width); //太さ 26 glBegin(GL_LINES); 27 28 if (width > 7) 29 { 30 glm::vec2 s = getWindowPosition(glm::vec2(1,1)); 31 s = s * 7.0f; 32 int n = (width / 7); 33 int nn = ((int)width % 7); 34 35 int i = 0; 36 for (; i < n; i++) 37 { 38 glVertex2f(-size.x, size.y + (7 * dy * i)); 39 glVertex2f(size.x, -size.y + (7 * dy * i)); 40 } 41 i--; 42 if (nn != 0) 43 { 44 std::cout << nn << std::endl; 45 int t = 0; 46 if (nn % 2 == 0) 47 { 48 t = nn / 2; 49 if (t == 0) 50 { 51 t = n -1; 52 53 } 54 } 55 else 56 { 57 t = nn / 2; 58 t += 1; 59 } 60 61 glVertex2f(-size.x, size.y + (t * dy) + (7 * dy * i)); 62 glVertex2f(size.x, -size.y + (t * dy) + (7 * dy * i)); 63 } 64 65 } 66 else 67 { 68 glVertex2f(-size.x, size.y); 69 glVertex2f(size.x, -size.y); 70 } 71 72 glEnd(); 73 glFinish(); 74 } 75 glPopMatrix(); 76 77 78 79 } 80
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。