我的 OpenGL 三角形不显示
My OpenGL triangle doesen't show
三角形没有出现在屏幕上。
我正在使用 Dev c++ 4.9.9.2(我知道你不喜欢它,但对我来说它仍然是最好的 :) 并且有免费的过剩。
代码如下:
#include <GL/glut.h>
void display(){
glClear ( GL_COLOR_BUFFER_BIT );
glutSwapBuffers();
glBegin ( GL_TRIANGLES );
glColor3f ( 0.0, 1.0, 0.0);
glVertex2f (-0.5,-0.5);
glVertex2f (0.5,-0.5);
glVertex2f (0.0, 0.5);
glEnd();
}
void reshape ( int width, int height ){
glViewport ( 0, 0, width, height );
}
void initOpenGL(){
glClearColor ( 1.0, 0.1, 0.0, 1.0 );
}
int main (int argc, char **argv){
glutInit ( &argc , argv );
glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH );
glutInitWindowSize ( 500, 500 );
glutInitWindowPosition ( 100, 100 );
glutCreateWindow ( "OpenGl" );
initOpenGL();
glutDisplayFunc ( display );
glutIdleFunc ( display );
glutReshapeFunc ( reshape );
glutMainLoop ();
return 0;
}
让我们仔细看看您的 display
函数:
display()
{
glClear();
glutSwapBuffers();
drawTriangle();
}
glClear()
将后台缓冲区清除为恒定颜色。 glutSwapBuffers()
交换前缓冲区和后缓冲区。这将在屏幕上显示后备缓冲区的当前内容(只是清晰的颜色)。新后备缓冲区的内容将是未定义的。每个绘制调用都会绘制到后台缓冲区。
如您所见,程序从来没有机会在屏幕上显示除清晰颜色以外的其他内容。只需将 glutSwapBuffers()
移动到函数的末尾即可:
display()
{
glClear();
drawTriangle();
glutSwapBuffers();
}
请选择更新的教程。您正在使用已弃用大约 10 年的固定功能管道。您可以通过 glBegin()
或 glVertex3f()
等调用来识别它。没有理由学习正在消亡(或在某些平台上已经消亡)的东西。
三角形没有出现在屏幕上。 我正在使用 Dev c++ 4.9.9.2(我知道你不喜欢它,但对我来说它仍然是最好的 :) 并且有免费的过剩。
代码如下:
#include <GL/glut.h>
void display(){
glClear ( GL_COLOR_BUFFER_BIT );
glutSwapBuffers();
glBegin ( GL_TRIANGLES );
glColor3f ( 0.0, 1.0, 0.0);
glVertex2f (-0.5,-0.5);
glVertex2f (0.5,-0.5);
glVertex2f (0.0, 0.5);
glEnd();
}
void reshape ( int width, int height ){
glViewport ( 0, 0, width, height );
}
void initOpenGL(){
glClearColor ( 1.0, 0.1, 0.0, 1.0 );
}
int main (int argc, char **argv){
glutInit ( &argc , argv );
glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH );
glutInitWindowSize ( 500, 500 );
glutInitWindowPosition ( 100, 100 );
glutCreateWindow ( "OpenGl" );
initOpenGL();
glutDisplayFunc ( display );
glutIdleFunc ( display );
glutReshapeFunc ( reshape );
glutMainLoop ();
return 0;
}
让我们仔细看看您的 display
函数:
display()
{
glClear();
glutSwapBuffers();
drawTriangle();
}
glClear()
将后台缓冲区清除为恒定颜色。 glutSwapBuffers()
交换前缓冲区和后缓冲区。这将在屏幕上显示后备缓冲区的当前内容(只是清晰的颜色)。新后备缓冲区的内容将是未定义的。每个绘制调用都会绘制到后台缓冲区。
如您所见,程序从来没有机会在屏幕上显示除清晰颜色以外的其他内容。只需将 glutSwapBuffers()
移动到函数的末尾即可:
display()
{
glClear();
drawTriangle();
glutSwapBuffers();
}
请选择更新的教程。您正在使用已弃用大约 10 年的固定功能管道。您可以通过 glBegin()
或 glVertex3f()
等调用来识别它。没有理由学习正在消亡(或在某些平台上已经消亡)的东西。