ポイントリストにない原点に余分なポイントを追加しているように見えるという点で、スケッチした線を画面に描画するときにopenGLに問題があります。
(0,0) は、描画される配列にあるポイントには絶対にありません。理由がわかりません。おそらく私の配列サイズが大きすぎるか何かだと思いますが、それを見ることができません
配列と描画呼び出しを設定するための私のコードは次のとおりです
void PointArray::repopulateObjectBuffer()
{
//Rebind Appropriate VAO
glBindVertexArray( vertex_array_object_id );
//Recalculate Array Size
vertexArraySize = points.size()*sizeof(glm::vec2);
//Rebind Appropriate VBO
glBindBuffer( GL_ARRAY_BUFFER, buffer_object_id );
glBufferData( GL_ARRAY_BUFFER, vertexArraySize, NULL, GL_STATIC_DRAW );
glBufferSubData( GL_ARRAY_BUFFER, 0, vertexArraySize, (const GLvoid*)(&points[0]) );
//Set up Vertex Arrays
glEnableVertexAttribArray( 0 ); //SimpleShader attrib at position 0 = "vPosition"
glVertexAttribPointer( (GLuint)0, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0) );
//Unbind
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
void PointArray::draw() {
glBindVertexArray(vertex_array_object_id);
glLineWidth(4);
glDrawArrays( GL_LINE_STRIP, 0, vertexArraySize );
glBindVertexArray(0);
}
ここで、マウスのコールバックにポイントを追加しています
void mouseMovement(int x, int y)
{
mouseDX = x - lastX ;
mouseDY = y - lastY ;
lastX = x;
lastY = y;
if(mouse_drag)
{
cam->RotateByMouse(glm::vec2(mouseDX*mouseSens, mouseDY * mouseSens));
}
if(sketching)
{
sketchLine.addPoint(glm::vec2((float)x,(float)y));
sketchLine.repopulateObjectBuffer();
updatePickray(x,y);
}
}
最後に、私のシンプルなオルソ頂点シェーダー
in vec2 vPosition;
void main(){
const float right = 800.0;
const float bottom = 600.0;
const float left = 0.0;
const float top = 0.0;
const float far = 1.0;
const float near = -1.0;
mat4 orthoMat = mat4(
vec4(2.0 / (right - left), 0, 0, 0),
vec4(0, 2.0 / (top - bottom), 0, 0),
vec4(0, 0, -2.0 / (far - near), 0),
vec4(-(right + left) / (right - left), -(top + bottom) / (top - bottom), -(far + near) / (far - near), 1)
);
gl_Position = orthoMat * vec4(vPosition, 0.0, 1.0);
}