Наступна програма не працює, тобто виводиться 5 точок, всі чотири з glVertex3f і лише одна з масиву, і виводиться вона по центру, а не в одній з вказаних координат.
#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());
glBegin(GL_POINTS);
glVertex3f(0.25, 0.25, 0.5f);
glVertex3f(0.25, 0.75, 0.5f);
glVertex3f(0.75, 0.75, 0.5f);
glVertex3f(0.75, 0.25, 0.5f);
glEnd();
glFlush ();
}
void init (void)
{
glClearColor (0.3, 0.3, 0.3, 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();
}
Буду також дуже вдячний за зауваження с приводу, чи не використовую я якісь застарілі підходи і т.п.
Одразу наведу мейкфайл, якщо хтось буде збирати:
CC=g++
CFLAGS=-c -std=c++0x
LIBS=-lGL -lglut -lGLEW
all: first
first: first.o
$(CC) first.o -o first $(LIBS)
first.o: first.cpp
$(CC) $(CFLAGS) first.cpp
clean:
rm -rf *o first