zoukankan      html  css  js  c++  java
  • OpenGL第12-14讲小结

      首先要为自己为什么没有写第10讲的控制3D场景和第11讲的红旗飘飘呢?因为没看啊~哈哈哈,而且我尝试着运行红旗飘飘的时候电脑蓝屏了(可能不是它的锅),暂时跳过了。

      恩,12到14主要了解了这么些东西,一个使用List来批量创建重复的对象,还有就是显示3D文字。

      创建一个List:(方便自己记直接贴代码了,其实就是懒) 

    GLvoid BuildLists()
    {
        box = glGenLists(2);// 创建两个显示列表的名称
    
        glNewList(box,GL_COMPILE);    // 创建第一个显示列表
    glBegin(GL_QUADS); // 开始绘制四边形 /*画多边形
    *
      */
    glEnd(); glEndList();
    top=box+1; //开始绘制第二个列表 glNewList(top,GL_COMPILE); // 盒子顶部的显示列表 glBegin(GL_QUADS); // 开始绘制四边形 // 上面 glEnd(); // 结束绘制四边形 glEndList(); // 第二个显示列表创建完毕 }

       这样得到的List,给我的感觉就是将glNewList(,)与glEndList()之间的代码存起来,后面的用glCallList()的效果就是把在这儿存起来的代码放到那去执行一遍,调一次就执行一次。

      而关于3D文字的效果:

    GLvoid BuildFont(GLvoid)
    {
        base =glGenLists(256);
         HFONT    font;                        // 字体句柄
         HFONT    oldfont;                        // 旧的字体句柄
         font = CreateFont(-24,                    // 字体高度
                 0,                // 字体宽度
                 0,                // 字体的旋转角度 Angle Of Escapement
                 0,                // 字体底线的旋转角度Orientation Angle
                 FW_BOLD,                // 字体的重量
                 FALSE,                // 是否使用斜体
                 FALSE,                // 是否使用下划线
                 FALSE,                // 是否使用删除线
                 ANSI_CHARSET,            // 设置字符集
                 OUT_TT_PRECIS,            // 输出精度
                 CLIP_DEFAULT_PRECIS,        // 裁剪精度
                 ANTIALIASED_QUALITY,        // 输出质量
                 FF_DONTCARE|DEFAULT_PITCH,        // Family And Pitch
                 "Courier New");            // 字体名称
         oldfont = (HFONT)SelectObject(hDC, font);            // 选择我们需要的字体
         //wglUseFontBitmaps(hDC, 32, 96, base);            // 创建96个显示列表,绘制从ASCII码为32-128的字符
        wglUseFontOutlines(    hDC,                    // 设置当前窗口设备描述表的句柄
            0,                // 用于创建显示列表字体的第一个字符的ASCII值
            255,                // 字符数
            base,                // 第一个显示列表的名称
            0.0f,                // 字体的光滑度,越小越光滑,0.0为最光滑的状态
            0.2f,                // 在z方向突出的距离
            WGL_FONT_POLYGONS,            // 使用多边形来生成字符,每个顶点具有独立的法线
            gmf);                //一个接收字形度量数据的数组的地址,每个数组元素用它对应的显示列表字符的数据填充 
    
        SelectObject(hDC, oldfont);                    // 选择原来的字体
         DeleteObject(font);                    // 删除字体    
    }

      从2D向3D的进化就是把注释那句换成后面的wglUseFontOutlines(),并且为了能看出来是3D,需要旋转一些角度。

      至于其他的话好像没有什么特别的,今天没有什么状态,没看多少,就到这里吧。

      对了,还有一点,就是例子里为什么用到了sin,cos之类的,后来想了下,可能是因为随着sin(x),cos(x)的X的不断增长,其值只会在-1~1之间波动,然后图形就不会出屏幕,应该就是这个原因吧。

     

  • 相关阅读:
    acdream 1738 世风日下的哗啦啦族I 分块
    hihocoder #1179 : 永恒游戏 暴力
    hihocoder #1178 : 计数 暴力
    hihocoder #1177 : 顺子 模拟
    刷了500道水题是什么体验?
    scu 4436: Easy Math 水题
    JVM系列三:JVM参数设置、分析
    Eclipse插件Target Management (RSE)
    修改jsp文件tomcat发布失败(Could not delete May be locked by another process)
    oracle中修改表名
  • 原文地址:https://www.cnblogs.com/ForRickHuan/p/5697146.html
Copyright © 2011-2022 走看看