2013-10-16 2 views
0
OpenGL

не рисунок Просто пытаюсь нарисовать точку с помощью перенасыщение и GLEW для OpenGL версии 4.3ничего

мой код

void Renderer(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    glBegin(GL_POINTS); 
    glPointSize(100); 
    glColor3f(255, 0, 0); 
    glVertex3d(10, 10, 0); 
    glEnd(); 

    glFlush(); 
    glutSwapBuffers(); 
} 

это ничего не оказывающей, может кто-то сказать мне, что я пропустил? вот полный код:

#include <iostream> 
using namespace std; 

#include "vgl.h" 
#include "LoadShaders.h" 

enum VAO_IDs { Triangles, NumVAOS }; 

#define WIDTH 1024 
#define HEIGHT 768 
#define REFRESH_DELAY  10 //ms 

//general 
long frameCount = 0; 

// mouse controls 
int mouse_old_x, mouse_old_y; 
int mouse_buttons = 0; 
float rotate_x = 0.0, rotate_y = 0.0; 
float translate_z = -3.0; 

///////////////////////////////////////////////////////////////////// 
//! Prototypes 
///////////////////////////////////////////////////////////////////// 
void keyboard(unsigned char key, int x, int y); 
void mouse(int button, int state, int x, int y); 
void motion(int x, int y); 

void timerEvent(int value) 
{ 
    glutPostRedisplay(); 
    glutTimerFunc(REFRESH_DELAY, timerEvent, frameCount++); 
} 

void init (void) 
{ 
    // default initialization 
    glClearColor(0.0, 0.0, 0.0, 1.0); 
    glDisable(GL_DEPTH_TEST); 

    // viewport 
    glViewport(0, 0, WIDTH, HEIGHT); 

    // projection 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(60.0, (GLfloat)WIDTH/(GLfloat)HEIGHT, 1, 10000.0); 
} 

void Renderer(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    glBegin(GL_POINTS); 
    glPointSize(100); 
    glColor3f(255, 0, 0); 
    glVertex3d(10, 10, 0); 
    glEnd(); 

    glFlush(); 
    glutSwapBuffers(); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA); 
    glutInitWindowSize(WIDTH, HEIGHT); 
    glutInitContextVersion(4, 3); 
    glutInitContextProfile(GLUT_CORE_PROFILE); 
    glutCreateWindow("The Abyss"); 
    glutKeyboardFunc(keyboard); 
    glutMotionFunc(motion); 
    glutMouseFunc(mouse); 

    glutTimerFunc(REFRESH_DELAY, timerEvent, frameCount); 

    if (glewInit()) //i guess this is true on failure 
    { 
     cerr << "Error initializing glew, Program aborted." << endl; 
     exit(EXIT_FAILURE); 
    } 


    //Init First 
    init(); 

    //Init callback for Rendering 
    glutDisplayFunc(Renderer); 

    //Main Loop 
    glutMainLoop(); 

    exit(EXIT_SUCCESS); 
} 

//////////////////////////////////////////////////////////////////////// 
//!Mouse and keyboard functionality 
//////////////////////////////////////////////////////////////////////// 
void keyboard(unsigned char key, int /*x*/, int /*y*/) 
{ 
    switch (key) 
    { 
     case (27) : 
      exit(EXIT_SUCCESS); 
      break; 
    } 
} 

void mouse(int button, int state, int x, int y) 
{ 
    if (state == GLUT_DOWN) 
    { 
     mouse_buttons |= 1<<button; 
    } 
    else if (state == GLUT_UP) 
    { 
     mouse_buttons = 0; 
    } 

    mouse_old_x = x; 
    mouse_old_y = y; 
} 

void motion(int x, int y) 
{ 
    float dx, dy; 
    dx = (float)(x - mouse_old_x); 
    dy = (float)(y - mouse_old_y); 

    if (mouse_buttons & 1) 
    { 
     rotate_x += dy * 0.2f; 
     rotate_y += dx * 0.2f; 
    } 
    else if (mouse_buttons & 4) 
    { 
     translate_z += dy * 0.01f; 
    } 

    mouse_old_x = x; 
    mouse_old_y = y; 
} 
+2

«for opengl version 4.3» хорошо, если это для версии 4.3, то почему вы используете все те функции, которые устарели от версии 3.1? – Vallentin

+1

Вы не рисуете нормализованные координаты? Что произойдет, если вы нарисуете (0,5, 0,5, 0,0)? – user1118321

+0

@ user1118321: (0.5, 0.5, 0.0) - это точный центр экрана в OpenGL NDC, где -1.0 - ближайшая плоскость, а 1.0 - дальняя. Если бы он рисовал в НДЦ, это было бы центром экрана; однако его проекционная матрица исключает использование в НДЦ. –

ответ

2
glutInitContextVersion(4, 3); 
glutInitContextProfile(GLUT_CORE_PROFILE); 

Вы запросили контекст Core. Вам необходимо:

  1. Укажите вершинный и фрагментарный шейдер. В Core нет бесплатной подписки.
  2. Прекратить использование устаревших функций, таких как glBegin() и glMatrixMode().
  3. Начните использовать VBOs, чтобы представить свою геометрию.
  4. Начните использовать glDrawArrays() и друзей, чтобы нарисовать вашу геометрию.
+0

Для разработки - все перечисленные функции полностью недоступны в основном профиле с указанной версией и приведут к ошибке GL. Либо это, либо использовать профиль совместимости. – keltar