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

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

三维螺旋线

效果

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;  

  }   

测试opengl程序

 

效果

clip_image002

程序如下:

/*

* File: main.c

* Author: leo

*

* Created on 2011年8月22日, 下午4:42

*/

 

#include <stdio.h>

 

#include <stdlib.h>

 

#include <GL/gl.h>

 

#include <GL/glu.h>

 

#include <GL/glut.h>

 

 

//called to draw scene

 

void RenderScene(void)

 

{

 

//clear the window with current clearing color

 

glClear(GL_COLOR_BUFFER_BIT);

 

//flush drawing commands

 

glFlush();

 

}

 

//set up the rendering state

 

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_RGB);

 

glutCreateWindow("Test Glut");

 

glutDisplayFunc(RenderScene);

 

SetupRC();

 

glutMainLoop();

 

return (EXIT_SUCCESS);

 

}