FreeGlut(类似于 OpenGL)正在拍摄我的桌面而不是绘制形状
FreeGlut (Similar to OpenGL) is taking picture of my desktop instead of drawing shapes
Genpfault 极大地帮助了我编译代码。下面的代码是我目前正在使用的代码的简化版本。但是,Glut 不允许我绘制形状。当我 运行 编译后的可执行文件时,唯一发生的事情是我看到了桌面的屏幕截图。
我该如何补救才能真正在黑屏上绘制彩色三角形和多边形? Screenshot of what the program looks like when it runs
#include <iostream>
#include <GL/freeglut.h>
namespace GameBoxes
{
template<class T>
class Box
{
public:
void display( void );
};
} //GameBoxes
namespace GameBoxes
{
template <class T>
void Box<T>::display( void )
{
glClearColor( 0.0, 0.0, 0.0, 0.0 ); // black background
glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 0.2, 0.2, 0.2 );
glBegin( GL_TRIANGLES );
glVertex2f( -0.5, -0.5 );
glVertex2f( 0.5, -0.5 );
glVertex2f( 0.0, 0.5 );
glutSwapBuffers();
}
} // GameBoxes
int main( int argc, char **argv )
{
glutInit( &argc, argv );
int windowPos1 = 0, windowPos2 = 0, windowSize1 = 400, windowSize2 = 400;
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
glutInitWindowPosition( windowPos1, windowPos2 );
glutInitWindowSize( windowSize1, windowSize2 );
glutCreateWindow( "square" );
GameBoxes::Box<double> square;
glutSetWindowData( &square );
glutDisplayFunc( []()
{
auto instance = static_cast< GameBoxes::Box<double>* >( glutGetWindowData() );
instance->display();
} );
glutMainLoop();
return 0;
};
您错过了 glEnd
完成 glBegin
/glEnd
序列
template <class T>
void Box<T>::display( void )
{
glClearColor( 0.0, 0.0, 0.0, 0.0 ); // black background
glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 0.2, 0.2, 0.2 );
glBegin( GL_TRIANGLES );
glVertex2f( -0.5, -0.5 );
glVertex2f( 0.5, -0.5 );
glVertex2f( 0.0, 0.5 );
glEnd(); // <-------------- add glEnd
glutSwapBuffers();
}
请注意,几十年来不推荐使用 glBegin
/glEnd
序列绘制。
阅读 Fixed Function Pipeline and see Vertex Specification and Shader 了解最先进的渲染方式。
Genpfault 极大地帮助了我编译代码。下面的代码是我目前正在使用的代码的简化版本。但是,Glut 不允许我绘制形状。当我 运行 编译后的可执行文件时,唯一发生的事情是我看到了桌面的屏幕截图。
我该如何补救才能真正在黑屏上绘制彩色三角形和多边形? Screenshot of what the program looks like when it runs
#include <iostream>
#include <GL/freeglut.h>
namespace GameBoxes
{
template<class T>
class Box
{
public:
void display( void );
};
} //GameBoxes
namespace GameBoxes
{
template <class T>
void Box<T>::display( void )
{
glClearColor( 0.0, 0.0, 0.0, 0.0 ); // black background
glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 0.2, 0.2, 0.2 );
glBegin( GL_TRIANGLES );
glVertex2f( -0.5, -0.5 );
glVertex2f( 0.5, -0.5 );
glVertex2f( 0.0, 0.5 );
glutSwapBuffers();
}
} // GameBoxes
int main( int argc, char **argv )
{
glutInit( &argc, argv );
int windowPos1 = 0, windowPos2 = 0, windowSize1 = 400, windowSize2 = 400;
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
glutInitWindowPosition( windowPos1, windowPos2 );
glutInitWindowSize( windowSize1, windowSize2 );
glutCreateWindow( "square" );
GameBoxes::Box<double> square;
glutSetWindowData( &square );
glutDisplayFunc( []()
{
auto instance = static_cast< GameBoxes::Box<double>* >( glutGetWindowData() );
instance->display();
} );
glutMainLoop();
return 0;
};
您错过了 glEnd
glBegin
/glEnd
序列
template <class T>
void Box<T>::display( void )
{
glClearColor( 0.0, 0.0, 0.0, 0.0 ); // black background
glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 0.2, 0.2, 0.2 );
glBegin( GL_TRIANGLES );
glVertex2f( -0.5, -0.5 );
glVertex2f( 0.5, -0.5 );
glVertex2f( 0.0, 0.5 );
glEnd(); // <-------------- add glEnd
glutSwapBuffers();
}
请注意,几十年来不推荐使用 glBegin
/glEnd
序列绘制。
阅读 Fixed Function Pipeline and see Vertex Specification and Shader 了解最先进的渲染方式。