OpenGL几何图元和缓冲区(一)

图元:组成图形的基本单元。

下面记录如何在3D空间中绘制图形。

1.设置3D画布

我们可以把计算机屏幕的宽看做X轴,高看做Y轴,计算机屏幕正对我们的方向看成Z轴。

下图绘制的就是一张空间坐标系:

3D空间中的点:

我们会使用OpenGL函数glVertex进行顶点的绘制。例如:

glVertex3f(50.0f,50.0f,50.0f);//三个参数分别表示x,y,z轴的值。

函数glVertex还有两种形式。glVertex2f和glVertex4f。这两个函数分别接受两个和四个参数。前者两个参数表述x,y轴的值;后者接受的四个参数表示x,y,z轴的值和缩放值。

图元的绘制

通常一个图元的绘制是在glBegin和glEnd函数之间进行。

现在我们从最简单的点开始绘制。

glBegin(GL_POINTS);

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

   glVertex3f(10.0f,10.0f,10.0f);

glEnd();

以上程序片段绘制了两个点,参数GL_POINTS表示绘制点。

下面将编写第一个3D空间中的OpenGL程序。

#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(30.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);
   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;
}

以下是程序运行的截图:

......睡觉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值