OpenGL小探2--几何图元,3D初步



glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
//第一行把清除颜色设置为黑色
//第二行把整个窗口清除为当前清除颜色,参数表示需要清除的缓冲区
glClearDepth(1.0); //指定了深度缓冲区中的每个像素需要设置的值。
glClearIndex(),glClearAccum(),glClearStencil()
glClear()函数的参数:
    颜色缓冲区   GL_COLOR_BUFFER_BIT
    深度缓冲区   GL_DEPTH_BUFFER_BIT
    累积缓冲区   GL_ACCUM_BUFFER_BIT
    模板缓冲区   GL_STENCIL_BUFFER_BIT
设置颜色: glColor3f(r,g,b);
glFlush(): 不等待绘图完成,强制绘图命令开始执行。
绘制几何图元,glBegin(GLenum mode):
  GL_POINT:  单个点
  GL_LINES:  一对顶点被解释为一条直线
  GL_LINE_STRIP: 一系列的连接直线
  GL_LINE_LOOP: 和上面相同,但始终点相连
  GL_TRIANGLES: 三角形
  GL_TRIANGLE_STRIP:  三角形的连接串(可画圆)
  GL_TRIANGLE_FAN:  连接成扇形的三角形系列(可画圆)
  GL_QUADS: 四边形
  GL_QUAD_STRIP: 四边形的连接串
  GL_POLYGON: 多边形
glEnd();
glBegin()和glEnd()之间的合法函数:
    glVertex*(): 设置顶点坐标   //只有这类函数才能显示生成顶点
    glColor*(): 设置RGBA颜色
    glIndex*(): 设置颜色索引
    glSecondaryColor(): 设置纹理应用后的辅助颜色
    glNormal*(): 设置法线向量坐标
    glMaterialf(): 设置材质属性
    glFogCoord*(): 设置雾坐标
    glTexCoord*(): 设置纹理坐标
    glVertexAttrib*(): 设置通用的顶点属性
    glEdgeFlag*(): 控制边界的控制
    glArrayElement():提取顶点数组数据
    glEvalCoord*(),glEvalPoint*(): 生成坐标
    glCallList(),glCallLists(): 执行显示列表
打开或关闭一些状态(默认关闭):
      void glEnable(GLenum cap);
      void glDisable(GLenum cap);
      GL_BLEND(控制RGB的混合),GL_DEPTH_TEST(深度测试,并对深度缓冲区进行更新),GL_FOG(控制雾),
      GL_LINE_STIPPLE(直线的点画模式),GL_LIGHTING(光照)等等.
查询一个状态是处于打开还是关闭状态:
          GLboolean glIsEnabled(GLenum cap); //return GL_TRUE or GL_FALSE
设置被渲染点的大小:
    void glPointSize(GLfloat size);  //单位像素,默认为1
设置直线的宽度:
    void glLineWidth(GLfloat width);
点画线:
    glLineStipple(1,0x3F07); //定义点画模式
    glEnable(GL_LINE_STIPPLE); //启动直线点画功能
多边形渲染模式:
    void glPolygonMode(GLenum face, GLenum mode);
    face可以是:GL_FRONT_AND_BACK,GL_FRONT,GL_BACK; mode可以是:GL_POINT,GL_LINE,GL_FILL
eg: //正面填充,背面轮廓
    glPolygonMode(GL_FRONT,GL_FILL);
    glPolygonMode(GL_BACK,GL_LINE);
沿x,y,z轴移动: glTranslate(x,y,z);
eg:
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();   //重置模型观察矩阵,将当前点移到了屏幕中心:
    glBegin(GL_TRIANGLES);  //在外面调用glColor3f一次性设置所有的点颜色
        glColor3f(1.0f,0.0f,0.0f);  //设置当前点为红色
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(0.0f,1.0f,0.0f);  //设置当前点为绿色
        glVertex3f(-1.0f,-1.0f,0.0f);
        glVertex3f(1.0f,-1.0f,0.0f);
    glEnd();
    glTranslatef(3.0f,0.0f,0.0f);
绕坐标轴旋转:
    glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
创建3D物体:
int DrawGLScene(GLvoid){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(-1.5f,0.0f,-6.0f);
    glRotatef(rtri,0.0f,1.0f,0.0f);//绕y轴旋转金字塔
    glBegin(GL_TRIANGLES);
            glColor3f(1.0f,0.0f,0.0);  //前侧面
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(-1.0f,-1.0f,1.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(1.0f,-1.0f,1.0f);
            glColor3f(1.0f,0.0f,0.0f); //右侧面(逆时针)
        glVertex3f(0.0,1.0f,0.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(1.0f,-1.0f,1.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(1.0f,-1.0f,-1.0f);
            glColor3f(1.0f,0.0f,0.0f);  // 后侧面
        glVertex(0.0f,1.0f,0.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(1.0f,-1.0f,-1.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(-1.0f,-1.0f,-1.0f);
            glColor3f(1.0f,0.0f,0.0f);  //左侧面
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(-1.0f,-1.0f,-1.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(-1.0f,-1.0f,1.0f);
    glEnd();  //金字塔绘制结束
    glLoadIdentity();   //绘制立方体
    glTranslate(1.5f,0.0f,-7.0f); //先右移再移入屏幕
    glRotatef(rquad,1.0f,1.0f,1.0f); //在xyz轴上旋转立方体
    glBegin(GL_QUADS);
                glColor3f(0.0f,1.0f,0.0f);  //顶面
        glVertex3f(1.0f,1.0f,-1.0f);
        glVertex3f(-1.0f,1.0f,-1.0f);
        glVertex3f(-1.0f,1.0f,1.0f);
        glVertex3f(1.0f,1.0f,1.0f);
             glColor3f(1.0f,0.5f,0.0f); //底面,橙色
        glVertex3f(1.0f,-1.0f,-1.0f);
        glVertex3f(-1.0f,-1.0f,-1.0f);
        glVertex3f(-1.0f,-1.0f,1.0f);
        glVertex3f(1.0f,-1.0f,1.0f);
             glColor3f(1.0f,0.0f,0.0f)  //前面
        glVertex3f(1.0f,1.0f,1.0f);
        glVertex3f(-1.0f,1.0f,1.0f);
        glVertex3f(-1.0f,-1.0f,1.0f);
        glVertex3f(1.0f,-1.0f,1.0f);
              glColor3f(1.0f,1.0f,0.0f); //后面,黄色
        glVertex3f(1.0f,1.0f,-1.0f);
        glVertex3f(-1.0f,1.0f,-1.0f);
        glVertex3f(-1.0f,-1.0f,-1.0f);
        glVertex3f(1.0f,-1.0f,-1.0f);
             glColor3f(0.0f,0.0f,1.0f); //左面
        glVertex3f(-1.0f,1.0f,1.0f);
        glVertex3f(-1.0f,1.0f,-1.0f);
        glVertex3f(-1.0f,-1.0f,-1.0f);
        glVertex3f(-1.0f,-1.0f,1.0f);
             glColor3f(1.0f,0.0f,1.0f); //右面,紫色
        glVertex3f(1.0f,1.0f,-1.0f);
        glVertex3f(1.0f,1.0f,1.0f);
        glVertex3f(1.0f,-1.0f,1.0f);
        glVertex3f(1.0,-1.0f,-1.0f);
    glEnd();
    rtri += 0.2f;  //增加三角形的旋转变量
    rquad -= 0.15f;  //减少四边形的旋转变量
    return TRUE;
}



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值