2012-11-01 3 views
3
는 점 목록에없는 출처에서 추가 점 추가 될 것으로 보인다 점에서 화면에 내 스케치 선을 그릴 때 내가 OpenGL을에 문제를 겪고

:OpenGL을 직교 스케치와 GL_LINE_STRIP

img

(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); 
} 
+2

나중에 참조 할 수 있도록 이미지를 인라인 할 수 없더라도 하나의 이미지로 링크 할 수 있습니다 (그리고 나 자신과 같은 사람이 아마도 인라인으로 표시 할 수 있습니다). – Tim

답변

2

vertexArraySize을 glDrawArrays에 대한 매개 변수로 사용하는 것 같지만 올바르지 않습니다. glDrawArrays의 수는 정점 배열의 바이트 수가 아닌 정점 수이어야합니다.

귀하의 경우에는 glDrawArrays(GL_LINE_STRIP, 0, points.size()); 일 것입니다.

+0

나는 내가 그것을 놓쳤다 고 믿을 수 없다. 분명히 너무 오랫동안 그것을보고 있었다. 정말 고마워. – rowanth

+0

@rowanth이 답변을 올바른 것으로 표시해야합니다. – Patrik