不正确的随机彩色矩形
Posted
技术标签:
【中文标题】不正确的随机彩色矩形【英文标题】:Incorrect random coloured rectangle 【发布时间】:2019-03-11 15:27:01 【问题描述】:我想在 GL_POLYGON 中显示随机颜色。
但颜色仅在最小化和最大化时发生变化。它在最大化时选择不同的颜色,在最小化时选择不同的颜色。但只要我继续最小化和最大化,它就会随机化颜色
#include <GL/gl.h>
#include <GL/glut.h>
#include <cstdlib>
void display( void )
glClear( GL_COLOR_BUFFER_BIT );
glBegin( GL_POLYGON );
for( int i = 0; i < 255; i++ )
glColor3ub( rand(), rand(), rand() );
glVertex3f( 0.25, 0.25, 0.0 );
glVertex3f( 0.75, 0.25, 0.0 );
glVertex3f( 0.75, 0.75, 0.0 );
glVertex3f( 0.25, 0.75, 0.0 );
glEnd();
glColor3f( 0.0, 0.0, 0.0 );
glRectf( 0.45, 0.25, 0.55, 0.05 );
glRectf( 0.35, 0.08, 0.65, 0.02 );
glFlush();
void init( void )
glClearColor( 1.0, 1.0, 1.0, 1.0 );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0.0, 1.0, 0.0, 1.0, -1.0, 1.0 );
int main( int argc, char** argv )
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize( 250, 250 );
glutInitWindowPosition( 100, 100 );
glutCreateWindow( "Assignment" );
init();
glutDisplayFunc( display );
glutMainLoop();
return 0;
【问题讨论】:
【参考方案1】:glutDisplayFunc()
仅在操作系统需要重新绘制窗口时调用您的回调。如果您想要更多常规电话,您需要通过glutPostRedisplay()
自己触发它们:
... 当 GLUT 确定需要重新显示窗口的法线平面时,会调用窗口的显示回调。 ...
...
GLUT 根据窗口的重新显示状态确定何时触发显示回调。可以通过调用
glutPostRedisplay
显式设置窗口的重新显示状态,或者作为窗口系统报告的窗口损坏的结果隐式设置。一个窗口的多个发布的重新显示由 GLUT 合并以最小化调用的显示回调的数量。
我喜欢用glutTimerFunc()
定期调用glutPostRedisplay()
:
#include <GL/glut.h>
#include <cstdlib>
void timer( int value )
glutPostRedisplay();
glutTimerFunc( 16, timer, 0 );
void display()
glClearColor( 0.2, 0.2, 0.2, 1 );
glClear( GL_COLOR_BUFFER_BIT );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glBegin( GL_POLYGON );
glColor3ub( rand(), rand(), rand() );
glVertex3f( 0.25, 0.25, 0.0 );
glVertex3f( 0.75, 0.25, 0.0 );
glVertex3f( 0.75, 0.75, 0.0 );
glVertex3f( 0.25, 0.75, 0.0 );
glEnd();
glColor3f( 0.0, 0.0, 0.0 );
glRectf( 0.45, 0.25, 0.55, 0.05 );
glRectf( 0.35, 0.08, 0.65, 0.02 );
glutSwapBuffers();
int main( int argc, char** argv )
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowSize( 250, 250 );
glutCreateWindow( "GLUT" );
glutDisplayFunc( display );
glutTimerFunc( 0, timer, 0 );
glutMainLoop();
return 0;
【讨论】:
以上是关于不正确的随机彩色矩形的主要内容,如果未能解决你的问题,请参考以下文章