OpenGL入门笔记(二)

简介:
第一篇笔记中的OpenGL框架其实很简单,大致有如下几个步骤:
1,取得窗口的实例,然后定义窗口类
2,注册窗口类
3,创建窗口
4,描述像素格式
5,获取设备描述表
6,找到与此前我们选定的象素格式相对应的象素格式
7,设置象素格式
8,取得绘制描述表
9,激活绘制描述表
10,显示窗口
11,将屏幕的宽度和高度设置给透视OpenGL屏幕(设置视口,进行投影,模型透视)
 
   其他就是对窗口事件的处理了,尤其是重画事件(WM_PAINT等),但只是画了一个空窗口,现在加一些代码来画简单的基本图元。:
OpenGL框架完整代码


其中最核心的代码是:
int DrawGLScene(GLvoid)                                    // Here's Where We Do All The Drawing
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // Clear Screen And Depth Buffer
    glLoadIdentity();
    
    glTranslatef(-1.5f,0.0f,-6.0f);                        // Move Left 1.5 Units And Into The Screen 6.0
    glBegin(GL_TRIANGLES);                                // Drawing Using Triangles
        glVertex3f( 0.0f, 1.0f, 0.0f);                    // Top
        glVertex3f(-1.0f,-1.0f, 0.0f);                    // Bottom Left
        glVertex3f( 1.0f,-1.0f, 0.0f);                    // Bottom Right

    glEnd();                                            // Finished Drawing The Triangle
    glTranslatef(3.0f,0.0f,0.0f);                        // Move Right 3 Units
    glBegin(GL_QUADS);                                    // Draw A Quad
        glVertex3f(-1.0f, 1.0f, 0.0f);                    // Top Left
        glVertex3f( 1.0f, 1.0f, 0.0f);                    // Top Right
        glVertex3f( 1.0f,-1.0f, 0.0f);                    // Bottom Right
        glVertex3f(-1.0f,-1.0f, 0.0f);                    // Bottom Left
    glEnd();                                            // Done Drawing The Quad// Reset The Current Modelview Matrix
    return TRUE;                                        // Everything Went OK
}




200741601.JPG


按照我的个人理解,,就好比照相机拍照一样,被拍的物体移动和照相机反方向移动可以得到相同的效果(使得成像的大小变化),这里的glTranslatef是用来进行造型变换的(类似移动物体却不移动照相机)。通过改变平移值的大小可以明显看出平移的效果。
 
这里要注意的是存在两种不同的坐标变换方式,glTranslatef(x,y,z)中的x,y,z是相对与当前所在点的位移,但glVertex(x,y,z)是相对于glTranslatef(x,y,z)移动后的新原点的位移。因而这里可以认为glTranslate移动的是坐标原点,glVertex中的点是相对最新的坐标原点的坐标值。
 
当调用glLoadIdentity()之后,实际上将当前点移到了屏幕中心,X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是负值,移出屏幕则是正值。

   glTranslatef(x, y, z)沿着X,Y和Z轴移动。根据前面的次序,下面的代码沿着X轴左移1.5个单位,Y轴不动(0.0f),最后移入屏幕6.0f个单位。注意在glTranslatef(x, y, z)中当移动的时候,并不是相对屏幕中心移动,而是相对与当前所在的屏幕位置。

       glTranslatef(-1.5f,0.0f,-6.0f); // 左移1.5单位,并移入屏幕6.0

   现在我们已经移到了屏幕的左半部分,并且将视图推入屏幕背后足够的距离以便我们可以看见全部的场景-创建三角形。
 
在屏幕的左半部分画完三角形后,我们要移到右半部分来画正方形。为此要再次使用glTranslate。这次右移,所以X坐标值为正值。因为前面左移了1.5个单位,这次要先向右移回屏幕中心(1.5个单位),再向右移动1.5个单位。总共要向右移3.0个单位。

       glTranslatef(3.0f,0.0f,0.0f);           // 右移3单位

   还有一点值得特别注意:我们使用顺时针次序来画正方形-左上-右上-右下-左下。采用顺时针绘制的是对象的后表面。这就是说我们所看见的是正方形的背面。逆时针画出来的正方形才是正面朝着我们的。


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/04/16/715968.html,如需转载请自行联系原作者
目录
相关文章
|
vr&ar Android开发 C++
Android OpenGL入门
Android OpenGL入门
Android OpenGL入门
|
存储 缓存 安全
OpenGL ES 入门:GLKit加载图片
OpenGL ES 入门:GLKit加载图片
181 0
OpenGL ES 入门:GLKit加载图片
|
存储 缓存
案例 02、OpenGL入门--正方形键位控制
OpenGL入门--正方形键位控制
146 0
案例 02、OpenGL入门--正方形键位控制
|
缓存 容器
案例 01、OpenGL入门--绘制三角形
OpenGL中三角形的绘制,就类似于学习编程时的Hello world,是一个入门级的使用,重点在于理解图形是如何绘制的
270 0
案例 01、OpenGL入门--绘制三角形
|
C++ 异构计算 Python
OpenGL渲染入门
## 前言 在开始之前,先来看一段图像解码序列(格式为YUV420)的4个渲染结果,这里我分别截了4张图 ![image.png](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/dca46d1be7dfee07981a7dea14ae3aa1.png) 其中4个渲染效果分别是 左上:直接渲染视频帧并绘制到窗口上 右上:
1806 0
|
API
OpenGL ES 入门API大全
本文章正确使用姿势:command/Ctrl + f  进行搜索对应的功能代码,找到它的详细解释。 (以下内容如有偏差,欢迎进行指正) 一.CAEAGLLayer 的使用: CAEAGLLayer 官方解释如图CAEAGLLayer,我来简单翻译一下: CAEAGLLayer 是继承于CALayer 的,可以用它在iOS 和tvOS 的设备上使用。
1494 0