那些年我们一起编...吧 关注:9贴子:106
  • 8回复贴,共1

【0420:Opengl小程序】

只看楼主收藏回复



1楼2014-04-20 14:25回复
    1.输出一个蓝色的窗口
    #include<gl/glut.h>
    void RenderScene(void)
    {
    glClear(GL_COLOR_BUFFER_BIT); //用当前颜色清除窗口
    glFlush(); //刷新绘图命令
    }
    //设置渲染状态
    void SetupRC(void)
    {
    glClearColor(0.0f,0.0f,1.0f,1.0f);
    }
    int main(int argc,char * argv[])
    {
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
    glutCreateWindow("simple");
    glutDisplayFunc(RenderScene);
    SetupRC();
    glutMainLoop();
    return 0;
    }


    2楼2014-04-20 14:49
    回复


      3楼2014-04-20 14:53
      回复
        每次配置一遍整个人都不好了
        连接器输入项:glut32.lib Opengl32.lib Glu32.lib glaux.lib
        C++预处理:GLUT_BUILDING_LIB


        4楼2014-04-20 15:03
        回复
          2.绘制红色矩形,调整窗口大小会改变矩形。
          #include<gl/glut.h>
          void RenderScene(void)
          {
          glClear(GL_COLOR_BUFFER_BIT);
          //用当前颜色清除窗口
          glColor3f(1.0f,0.0f,0.0f);
          glRectf(-25.0f,25.0f,25.0f,-25.0f);
          glFlush(); //刷新绘图命令
          }
          //设置渲染状态
          void SetupRC(void)
          {
          glClearColor(0.0f,0.0f,1.0f,1.0f);
          }
          void ChangeSzie(GLsizei w,GLsizei h)
          {
          GLfloat aspectRatio;
          //防止被0所除
          //把视口设置为窗口的大小
          glViewport(0,0,w,h);
          //重置坐标系统
          glMatrixMode(GL_PROJECTION);
          glLoadIdentity();
          //建立剪裁区域(左,右,底,顶,近,远)
          aspectRatio = (GLfloat)w / (GLfloat)h;
          if(w<=h)
          glOrtho (-100.0,100.0,-100.0/aspectRatio,100/aspectRatio,1.0,-1.0);
          else
          glOrtho (-100.0*aspectRatio,100.0*aspectRatio,-100.0,100,1.0,-1.0);
          glMatrixMode(GL_MODELVIEW);
          glLoadIdentity();
          }
          int main(int argc,char * argv[])
          {
          glutInit(&argc,argv);
          glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
          glutCreateWindow("simple");
          glutDisplayFunc(RenderScene);
          glutReshapeFunc(ChangeSzie);
          SetupRC();
          glutMainLoop();
          return 0;
          }



          5楼2014-04-20 15:42
          回复
            具体代码:http://blog.csdn.net/yuxiaohen/article/details/8761343
            ///*cube pos value*/
            GLfloat rfCubeX = 0.0f;
            GLfloat rfCubeY = 0.0f;
            GLfloat rfCubeSize = 25.0f;
            GLfloat rfCubeXStep = 1.0f;
            GLfloat rfCubeYStep = 1.0f;
            ///*clip volume size*/
            GLfloat rfClipVolumeHalfWidth = 0.0f;
            GLfloat rfClipVolumeHalfHeight = 0.0f;
            void fRenderScene(void)
            {
            glClear(GL_COLOR_BUFFER_BIT);
            glColor3f(1.0f,0.0f,0.0f);
            glRectf(rfCubeX,rfCubeY,rfCubeX+rfCubeSize,rfCubeY-rfCubeSize);
            //glFlush();
            glutSwapBuffers();
            }
            void fReshapeScene(GLsizei w,GLsizei h)
            {
            GLfloat rfAspectRatio;
            if(!h) {
            h = 1;
            }
            rfAspectRatio = (GLfloat)w/(GLfloat)h;
            glViewport(0,0,w,h);
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            if(w <= h) {
            rfClipVolumeHalfWidth = 100.0f;
            rfClipVolumeHalfHeight = rfClipVolumeHalfWidth/rfAspectRatio;
            glOrtho(-100.0f,100.0f,-rfClipVolumeHalfHeight,rfClipVolumeHalfHeight,0.000000001f,0.0f);
            } else
            {
            rfClipVolumeHalfHeight = 100.0f;
            rfClipVolumeHalfWidth = rfClipVolumeHalfHeight*rfAspectRatio;
            glOrtho(-rfClipVolumeHalfWidth,rfClipVolumeHalfWidth,-100.0f,100.0f,0.00000001f,0.0f);
            }
            //glOrtho(-100.0f,100.0f,-100.0f/rfAspectRatio,100.0f/rfAspectRatio,1.0f,-1.0f);
            glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
            }
            void fSetupRC(void)
            {
            glClearColor(0.0f,1.0f,0.0f,1.0f);
            }
            void fTimerFunction(int iValue)
            {
            ///*turn*/
            if(rfCubeX<=-rfClipVolumeHalfWidth||rfCubeX>=rfClipVolumeHalfWidth-rfCubeSize) {
            rfCubeXStep = -rfCubeXStep;
            }
            if(rfCubeY<=-rfClipVolumeHalfHeight+rfCubeSize||rfCubeY>=rfClipVolumeHalfHeight) {
            rfCubeYStep = -rfCubeYStep;
            }
            rfCubeX += rfCubeXStep;
            rfCubeY += rfCubeYStep;
            ///*horizontal overflow*/
            if(rfCubeX<-rfClipVolumeHalfWidth) {
            rfCubeX = -rfClipVolumeHalfWidth;
            } else
            if( rfCubeX>(rfClipVolumeHalfWidth-rfCubeSize)) {
            rfCubeX = rfClipVolumeHalfWidth-rfCubeSize;
            }
            ///*vertical overflow*/
            if(rfCubeY>rfClipVolumeHalfHeight) {
            rfCubeY = rfClipVolumeHalfHeight;
            } else
            if( rfCubeY<(-rfClipVolumeHalfHeight+rfCubeSize) ) {
            rfCubeY = -rfClipVolumeHalfHeight+rfCubeSize;
            }
            glutPostRedisplay();
            glutTimerFunc(20,fTimerFunction,1);
            }
            int main(int argc,char* argv[])
            {
            glutInit(&argc,argv);
            glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
            glutInitWindowSize(300,400);
            glutCreateWindow("Animation");
            glutDisplayFunc(fRenderScene);
            glutReshapeFunc(fReshapeScene);
            glutTimerFunc(20,fTimerFunction,1);
            fSetupRC();
            glutMainLoop();
            return (0);
            }
            运行结果:


            6楼2014-04-20 18:33
            回复


              7楼2014-04-20 18:41
              回复


                8楼2014-04-20 18:42
                回复
                  4.画线,螺旋线
                  #include<gl/glut.h>
                  #include<math.h>
                  #define GL_PI 3.1415f
                  void RenderScene(void)
                  {
                  GLfloat x,y,z,angle;//存储坐标和角度
                  glClear(GL_COLOR_BUFFER_BIT);//用当前颜色清除窗口
                  //保持矩阵状态并进行旋转
                  glPushMatrix();
                  glRotatef(60.0f,1.0f,0.0f,0.0f);
                  glRotatef(60.0f,0.0f,1.0f,0.0f);
                  //对所有剩余的点只调用一次
                  glBegin(GL_POINTS);
                  z = -50.0f;
                  for(angle = 0.0f;angle<=(2.0f*GL_PI)*3.0f;angle+=0.1f)
                  {
                  x = 50.0f*sin(angle);
                  y = 50.0f*cos(angle);
                  //指定点并稍稍变化z值
                  glVertex3f(x,y,z);
                  z+=0.5f;
                  }
                  glEnd();
                  //恢复变换
                  glPopMatrix();
                  //刷新绘图命令
                  glutSwapBuffers();
                  }
                  //设置渲染状态
                  void SetupRC(void)
                  {
                  //黑色背景
                  glClearColor(0.0f,0.0f,0.0f,1.0f);
                  //把绘图颜色置为绿色
                  glColor3f(0.0f,1.0f,0.0f);
                  }
                  void ChangeSzie(GLsizei w,GLsizei h)
                  {
                  GLfloat nRange = 100.0f;
                  //防止被0所除
                  if(h==0)
                  h=1;
                  //把视口设置为窗口的大小
                  glViewport(0,0,w,h);
                  //重置投影矩阵堆栈
                  glMatrixMode(GL_PROJECTION);
                  glLoadIdentity();
                  //建立剪裁区域(左,右,底,顶,近,远)
                  if(w<=h)
                  glOrtho (-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);
                  else
                  glOrtho (-nRange*w/h,nRange*w/h,-nRange,nRange,-nRange,nRange);
                  //重置模型视图矩阵堆栈
                  glMatrixMode(GL_MODELVIEW);
                  glLoadIdentity();
                  }
                  int main(int argc,char * argv[])
                  {
                  glutInit(&argc,argv);
                  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
                  glutInitWindowSize(300,400);
                  glutCreateWindow("POINT");
                  glutDisplayFunc(RenderScene);
                  glutReshapeFunc(ChangeSzie);
                  SetupRC();
                  glutMainLoop();
                  return 0;
                  }


                  9楼2014-04-20 19:28
                  回复