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之间波动,然后图形就不会出屏幕,应该就是这个原因吧。

 

posted @ 2016-07-22 21:10  琐碎之人  阅读(283)  评论(0编辑  收藏  举报