2017-12-09 3 views
1

의 땅을 그립니다 :사용 벡터는 OpenGL을

vector<vector<GLfloat> > ground_vertices { 
    {-10, -0.1, 50}, 
    {10, -0.1, 50}, 
    {-10, -0.1, -300}, 
    {10, -0.1, -300} }; 

내 그리기 기능이

void Ground() { 
    glBegin(GL_QUADS);     
    for (int i=0; i < 4; i++) 
    { 
     glColor3f(0.0f, 1.0f, 0.0f); 
     glVertex3f(ground_vertices[i]); 
    } 
    glEnd(); 

}

비슷하지만 점점 유지

ground.cpp | 37 col 40 error | 변환 할 수 없습니다 '__gnu_cxx :: __ alloc_traits> :: VALUE_TYPE {일명 표준 : : 벡터}'인수 '1' '무효 glVertex3f (GLfloat, GLfloat, GLfloat)'

에 대한 'GLfloat {일명 떠}'에 내가 어떻게 고칠 수 있을지 궁금해. 고맙습니다!

+0

이의를 사용하여 begin-end 블록 안의 루프는 좋은 생각이 아닙니다. 10 년 이래로이 코드는 사용되지 않았을뿐 아니라 현대 OpenGL에서는 전혀 작동하지 않을뿐만 아니라 _20 년부터 정점 배열로 완전히 대체되었습니다. – derhass

+0

@derhass 안녕하세요. 의견을 주셔서 감사합니다. 그 때 사용하기 위하여 당신은 무엇을 제안합니까? –

+1

[Vertex Buffer Objects] (https://en.wikipedia.org/wiki/Vertex_buffer_object)와 최신 OpenGL 튜토리얼 [paroj.github.io/gltut/](https://paroj.github.io/) gltut /) 또는 [open.gl] (http://open.gl). – derhass

답변

1

함수 glVertex3fv(const GLfloat * v)을 사용하고 정점 데이터에 대한 포인터를 전달합니다.

당신은 std::vector std::vector::data에 의해에 포함 된 데이터에 대한 포인터를 얻을 수 있습니다

:

glVertex3fv(ground_vertices[i].data()); 


참고 glVertex3f(GLfloat x, GLfloat y, GLfloat z)의 사용과 올바른 코딩은 다음과 같습니다

glVertex3f(
    ground_vertices[i][0], 
    ground_vertices[i][1], 
    ground_vertices[i][2]); 
+0

효과가있었습니다. 고맙습니다! –