2012-02-09 7 views
2

なぜこのプログラムでは、glVertex3fで描画された4点が、指し示された位置でレンダリングされますが、4つの配列点がウィンドウの中央に1つだけレンダリングされるのはなぜですか?OpenGLで点の配列を描く

#include <GL/glew.h> 
#include <GL/glut.h> 

#include <iostream> 
#include <vector> 

using namespace std; 

struct point3 { 
    GLfloat x, y, z; 
}; 

vector<point3> Vertices(4); 

void display(void) 
{ 
    glClear (GL_COLOR_BUFFER_BIT); 
    GLuint abuffer; 
    glGenVertexArrays(1, &abuffer); 
    glBindVertexArray(abuffer); 
    GLuint buffer; 
    glGenBuffers(1, &buffer); 
    glBindBuffer(GL_ARRAY_BUFFER, buffer); 
    Vertices = {{0.3f, 0.3f, 0.5f}, {0.6f, 0.6f, 0.5f}, {0.6f, 0.3f, 0.5f}, {0.3f, 0.6f, 0.5f}}; 
    glBufferData(GL_ARRAY_BUFFER, Vertices.size() * sizeof(Vertices[0]), &Vertices[0], GL_STATIC_DRAW); 
    glVertexPointer(3, GL_FLOAT, 0, &Vertices[0]); 
    glDrawArrays(GL_POINTS, 0, Vertices.size()); 
    glFlush(); 
    glBegin(GL_POINTS); 
    glVertex3f(0.25f, 0.25f, 0.5f); 
    glVertex3f(0.25f, 0.75f, 0.5f); 
    glVertex3f(0.75f, 0.75f, 0.5f); 
    glVertex3f(0.75f, 0.25f, 0.5f); 
    glEnd();  
    glFlush(); 
} 

void init (void) 
{ 
    glClearColor (0.0, 0.0, 0.0, 0.0); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 

} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(500, 500); 
    glutInitWindowPosition(0, 0); 
    glutCreateWindow("simple OpenGL example"); 
    glutDisplayFunc(display); 
    GLenum err = glewInit(); 
    if (GLEW_OK != err) { 
     cerr << "Error: " << glewGetErrorString(err) << endl; 
    } 
    cout << "Status: Using GLEW" << glewGetString(GLEW_VERSION) << endl;  
    init(); 
    glutMainLoop(); 
} 
+1

なぜレンダリングするごとに頂点配列とバッファオブジェクト*を生成していますか?これは一度のセットアップ作業であり、すべてのフレーム作業ではありません。 –

+0

@ニコルボラス、私はそれを働かせようとし、多くのことをしました、確かに別の機能にする必要があります。 – Yola

+0

@ NicolBolas良い点ですが、これはSOのためのちょうど縮小された例かもしれません。 – Kos

答えて

2

アトリビュートを実際に使用するように設定していません。

  • あなたはglVertexPointer(GL2)またはglVertexAttribPointerとを指して何それなし(OpenGLの2)glEnableClientState(GL_VERTEX_ARRAY)(またはGL_COLOR_ARRAY、など)
  • (OpenGLの3)glEnableVertexArray(attributeId)

、:あなたがすることによってそれを行います(GL3)は実際には使用されません。

+0

です。コードスニペットを表示できますか? – Yola

関連する問題