2013-08-08 4 views
0

Я новичок opengl. Я установил DLL, библиотеку, заголовок, но произошла ошибка. Моя среда разработки - win7 (64 бит).opengl белое окно - Visual Studio 2010

Для справки - библиотеки DLL: C: \ Windows \ System32, C: \ Windows \ SysWOW64 // glu32.dll, glut.dll, glut32.dll, opengl32.dll

Libs: C: \ Program Файлы (x86) \ Microsoft SDK \ Windows \ v7.0A \ Lib, C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ lib // glut.lib, glut32.lib

Заголовок: C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Include \ gl, C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ include \ gl // GL.H, GLAUX.H, GLU .H, glut.h

#include <Windows.h> 
#include <gl/glut.H> 

void DoDisplay (void) 
{ 
    glClearColor (0.0f, 0.0f, 1.0f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glBegin (GL_TRIANGLES); 

    glVertex2f (0.0, 0.5); 
    glVertex2f (-0.5, -0.5); 
    glVertex2f (0.5, -0.5); 

    glEnd(); 
    glFlush(); 
} 

int main (int argc, char ** argv) 
{ 
    glutInit (&argc, argv); 
    glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE); 
    glutInitWindowSize (300, 300); 
    glutInitWindowPosition (0, 0); 
    glutCreateWindow ("OpenGL"); 
    glutDisplayFunc (DoDisplay); 
    glutMainLoop(); 

    return 0; 
} 

Edit:

White Window: http://i.stack.imgur.com/9GJoN.jpg

Этот код просто вывести белый треугольник.

Проект Win32 -> Проект консоли.

Проблема не решена .. извините.

Ошибка http://i.stack.imgur.com/9GJoN.jpg

+2

Какая ошибка? – sje397

+1

no 'glutInit()', отсутствует 'glBegin()' и некоторые другие проблемы, вам нужно будет более точно определить, что является проблемой и что вы на самом деле пытаетесь сделать. – PeterT

ответ

2
  • Вы используете непосредственный режим. У вас есть glEnd(), но не glBegin()
  • Как PeterT также отметил, вы не имеете вызова glutInit
  • Если ваши пути определяются как то, как вы напечатали, вы столкнетесь с проблемой. У вас есть как передняя, ​​так и обратная косая черта, которая по крайней мере по моему опыту разрушает путь.
  • Вы не очищаете экран до определенного цвета и не устанавливаете свои вершины на определенный цвет. Это может быть случай, когда белого медведя можно встретить в снежной буре.

Заканчивать

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

и

glClearColor(r, g, b, a); 
  • Как Дрю McGowen отметил, что вы не уточняя никаких преобразований или проекционных матриц.
  • Я бы сильно рекомендую искать учебник по OpenGL, чтобы получить хорошее объяснение всех вещей, которые вам нужно сделать, чтобы нарисовать треугольник и почему. Lighthouse3d, Swiftless, OGLDev - есть много, которые должны показать вам основы.
  • Еще один момент: вы пытаетесь узнать код, который устарел в течение ~ 7 лет. Вы должны изучить новый программируемый конвейер вместо конвейера с фиксированной функцией, потому что он быстрее и дает вам больше контроля.
+1

Чтобы добавить к этому, не существует матричного набора 'GL_MODELVIEW' или' GL_PROJECTION', что может также вызвать проблемы (если GLUT не устанавливает значения по умолчанию). –

+0

Thx, но моя проблема не решена. Извините, не могли бы вы снова посмотреть мой код? – HiKi

+0

Thx !, Я многому научился! – HiKi

1
void DoDisplay (void) 
{ 
    ... 
    glFlush(); 
} 

int main (int argc, char ** argv) 
{ 
    ... 
    glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE); 
    .... 
} 

glFlush() недостаточна при использовании GLUT_DOUBLE.Вместо этого используйте glutSwapBuffers().

+0

Thx !! Задача решена! – HiKi

+0

У меня такая же проблема, я попробовал свой код и другие инструкции пользователя, но не смог. Так скажите мне, как вы это сделали –

+0

@SachinKumar: запустите новый вопрос (http://stackoverflow.com/questions/ask) и включите [MCVE] (http://stackoverflow.com/help/mcve) , – genpfault