zoukankan      html  css  js  c++  java
  • 在空间中绘图:线。点、多边形

    在空间中绘图:线。点、多边形

    三维螺旋线

    效果

    clip_image002

    代码
     
    void RenderScene(void){    
    GLfloat x,y,z,angle;    //使用当前的清除色清除窗口    
    glClear(GL_COLOR_BUFFER_BIT);    
    glPushMatrix();    
    glRotatef(xRot,1.0f,0.0f,0.0f);    
    glRotatef(yRot,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);        
    glVertex3f(x,y,z);        
    z += 0.5f;   
     }    
    glEnd();    
    glPopMatrix();    
    glFlush();}
     

    改变点大小

    效果

    clip_image004

    代码
    void RenderScene(void){   
     GLfloat x,y,z,angle;    
    GLfloat sizes[2];//保存支持点大小的范围   
     GLfloat step;   //保存支持的点增长 
       GLfloat curSize;//保存当前点大小   
     //使用当前的清除色清除窗口  
    glClear(GL_COLOR_BUFFER_BIT);    
    glPushMatrix();    
    glRotatef(xRot,1.0f,0.0f,0.0f);   
    glRotatef(yRot,0.0f,1.0f,0.0f);    //获取支持点的范围和增长   
    glGetFloatv(GL_POINT_SIZE_RANGE,sizes);   
    glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);    //设置初始点大小  
    curSize = sizes[0];    //设置z坐标起始值   
    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);      
    glPointSize(curSize);       
    glBegin(GL_POINTS);         
    glVertex3f(x,y,z);        
    glEnd();        
    z += 0.5f;       
    curSize += step;   
    }   
    glPopMatrix();  
    glFlush();
    }
     

    扇形

    效果

    clip_image006

    代码
    void RenderScene(void){    
    GLfloat x,y,z,angle;    //使用当前的清除色清除窗口   
     glClear(GL_COLOR_BUFFER_BIT);    
    glPushMatrix();     //对所有的点调用一次    
    glBegin(GL_LINES);    
    z = 0.0f;    
    for(angle = 0.0f; angle <= GL_PI*3.0f;angle += 0.5f)    
    {        
    x = 50.0f*sin(angle);        
    y = 50.0f*cos(angle);        
    glVertex3f(x,y,z);        
    x = 50.0f*sin(angle+3.1415f);        
    y = 50.0f*cos(angle+3.1415f);        
    glVertex3f(x,y,z);    
    }    
    glEnd();    
    glPopMatrix();    
    glFlush();}
     

    线段的跨接和循环

    效果

    clip_image008

    代码
    void RenderScene(void){   
    GLfloat x,y,z,angle;    //使用当前的清除色清除窗口  
    glClear(GL_COLOR_BUFFER_BIT);   
    glPushMatrix();     //对所有的点调用一次   
    glBegin(GL_LINE_STRIP);        
        glVertex3f(0.0f,0.0f,0.0f);       
         glVertex3f(50.0f,50.0f,0.0f);       
         glVertex3f(50.0f,100.0f,0.0f);  
    glEnd();   
    glPopMatrix();    
    glFlush();}
     

    将glBegin改为glBegin(GL_LINE_LOOP);后的结果将把最后一个点和第一个点连接起来,形成一个封闭的图形:

    clip_image010

    线宽度

    效果

    clip_image012

    代码
    void RenderScene(void)
    {   
     GLfloat y;   
     GLfloat fSizes[2];   
     GLfloat fCurrSize;   
     glClear(GL_COLOR_BUFFER_BIT);    
    glPushMatrix();    
    //get line size metrics and save the smallest value    
    glGetFloatv(GL_LINE_WIDTH_RANGE,fSizes);    //
    glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);   
     fCurrSize = fSizes[0];    
    for(y = -90.0f; y <= 90.0f;y += 20.0f)  
      {    
    //set the line width      
      glLineWidth(fCurrSize);    
        glBegin(GL_LINES);       
         glVertex2f(-80.0f,y);    
            glVertex2f(80.0f,y);  
          glEnd();    
        fCurrSize += 1.0f;  
      }   
  • 相关阅读:
    有关系统架构的高可用原则
    Redis面试篇 -- 如何保证缓存与数据库的双写一致性?
    Redis面试篇 -- Redis常见性能问题和解决方案?
    Redis面试篇 -- Redis主从复制原理
    Python3如何安装pip工具?
    Redis面试篇 -- Redis持久化的方式有哪些?优缺点分别是什么?
    Linux在丢失的情况下重置密码
    APC (Asynchronous Procedure Call)
    eigenface资料整合
    python+opencv模拟生成运动模糊核
  • 原文地址:https://www.cnblogs.com/shaoguangleo/p/2805979.html
Copyright © 2011-2022 走看看