OpenGL幾何圖元和緩衝區(四)

線段和閉合線段

圖元GL_LINE_STRIP會連接起所有的點,但是首尾兩點不連接。以下代碼段將演示:

glBegin(GL_LINE_STRIP);

    glVertex3f(0.0f,0.0f,0.0f);

    glVertex3f(10.0f,15.0f,0.0f);

    glVertex3f(100.0f,0.0f,0.0);

glEnd();

另外一個圖元GL_LINE_LOOP是用來繪製閉合的線段的:

glBegin(GL_LINE_LOOP);

    glVertex3f(0.0f,0.0f,0.0f);

    glVertex3f(10.0f,15.0f,0.0f);

    glVertex3f(100.0f,0.0f,0.0);

glEnd();

此處的代碼的第一個點和最後一個點會連接。

下面程序將使用GL_LINE_STRIP圖元繪製一條螺旋曲線:

#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); //清除顏色

z = -50.0f;


//保存矩陣狀態並旋轉
glPushMatrix();
glRotatef(30.0f,1.0f,0.0f,0.0f);
glRotatef(60.0f,0.0f,1.0f,0.0f);

glBegin(GL_LINE_STRIP);

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

glutSwapBuffers();
}


//當窗口大小變化時調用
void ChangeSize(GLsizei w,GLsizei h)
{
GLfloat nRange = 100.f;

if(0 == h)
  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();

}

//設置渲染
void SetupRC(void)       
{
glClearColor(0.0f,0.0f,0.0f,1.0f); //背景黑色
glColor3f(0.0f,1.0f,0.0f);    //繪圖顏色爲綠色
}

int main(int argc,char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutCreateWindow("OpenGL Sample");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
SetupRC();
glutMainLoop();
return 0;
}

下面是程序的運行截圖:

睡覺......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章