Автор Гілка: Відмалювання масиву точок в OpenGL (glDrawArrays)  (Прочитано 2548 раз)

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Наступна програма не працює, тобто виводиться 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
« Змінено: 2012-02-09 16:58:14 від Yola »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Проблема була в цьому рядку:
glVertexPointer(3, GL_FLOAT, 0, &Vertices[0]); - останній параметр має бути NULL.