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

今天學習一下在3D空間中如何畫直線。

通過指定圖元GL_LINES可以再空間中畫一條直線。下面的代碼段將畫一條直線:

glBegin(GL_LINES);

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

    glVertex3f(30.0f, 30.0f, 30.0f);

glEnd();

這裏有一點需要注意,空間中每兩個頂點確定一條直線。如果有奇數個點,最後一個點將被忽略。

下面的一個示例程序將展示如何畫線:

#include <GL/glut.h>
#include <math.h>
#define GL_PI 3.14
void RenderScene(void)
{
float x,y,z,angle;
glClear(GL_COLOR_BUFFER_BIT);       //清除顏色緩存
glColor3f(1.0f, 1.0f, 0.0f);
glBegin(GL_LINES);
    x = 0.0f;
    y = 0.0f;
    z = 0.0f;
    for(angle=0.0f; angle <= GL_PI; angle += (GL_PI/20.0f))
    {
     y = 50.0f * sin(angle);
     x = 50.0f * cos(angle);
     glVertex3f(x,y,z);

     y = 50.0f * sin(GL_PI + angle);
     x = 50.0f * cos(GL_PI + angle);
     glVertex3f(x,y,z);
    }
glEnd();

glFlush();                    //刷新
}

//當窗口大小變化時調用
void ChangeSize(GLsizei w,GLsizei h)
{
GLfloat aspectRatio;
if(0 == h)
  h = 1;

//設置視口大小
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.0,1.0,-1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}

//設置渲染
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("OpenGL Sample");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
SetupRC();
glutMainLoop();
return 0;
}

程序截圖如下:

......睡覺

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