2013-10-16 38 views
0

只是想利用過剩畫一個點,並GLEW對OpenGL 4.3版本的OpenGL繪圖沒有任何

我的代碼

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

「對於opengl 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是遠平面。如果他在NDC中畫畫,這將成爲屏幕的中心;然而,他的透視投影矩陣排除了NDC中的繪圖。 –

回答

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

你已要求核心內容。您需要:

  1. 指定頂點和片段着色器。 Core中沒有免費贈品。
  2. 停止使用不建議使用的功能,如glBegin()glMatrixMode()
  3. 開始使用VBOs提交您的幾何體。
  4. 開始使用glDrawArrays()和朋友繪製幾何圖形。
+0

詳細說明 - 所有列出的功能在指定版本的核心配置文件中完全不可用,並且會導致GL錯誤。要麼,要麼使用兼容性配置文件。 – keltar