OpenGL程序演示

OpenGL 程序演示

一. OpenGL 基本绘制   

 开发环境:VC++2008 + OpenGL 3


   用两种不同的方法绘制两个正方形;绘制四个顶点;绘制两条平行线;如下图;



代码如下:


#include <GL/glut.h>

#include <math.h>


const int n = 200;

const GLfloat R = 0.5f;

const GLfloat Pi = 3.1415926536f;



void myDisplay(void)

{

int i;

// 画一个绿色正方形

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(0.0f,1.0f,0.0f);

    glRectf(-0.5f, 0.4f, 0.0f, 0.9f); //画一个绿色的正方形

    //glFlush();


//glClearColor(0.0,0.0,0.0,0.0);

     //glClear(GL_COLOR_BUFFER_BIT);

     glColor4f(1.0,0.0,0.0,1.0);     // set the quad color

     glBegin(GL_QUADS);

         glVertex3f(-0.2,-0.2,0.0);

         glVertex3f(0.2,-0.2,0.0);

         glVertex3f(0.2,0.2,0.0);

         glVertex3f(-0.2,0.2,0.0);

    glEnd();


glColor4f(1.0,0.0,0.0,1.0);   // set the point color

      glPointSize(10);

      glBegin(GL_POINTS);

          glVertex3f(-0.5,-0.5,0.0);

          glVertex3f(0.5,-0.5,0.0);

          glVertex3f(0.5,0.5,0.0);

          glVertex3f(-0.5,0.5,0.0);

     glEnd();


glColor4f(1.0,0.0,0.0,1.0); // set the line color

      glLineWidth(5);

      glBegin(GL_LINES);

            glVertex3f(-0.5,-0.5,0.0);

            glVertex3f(0.5,-0.5,0.0);

            glVertex3f(0.5,0.5,0.0);

            glVertex3f(-0.5,0.5,0.0);

      glEnd();


 /*glBegin(GL_POLYGON);

for(i=0; i<n; ++i)

glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));

glEnd();*/




    glFlush();

}


int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

    glutInitWindowPosition(100, 0);

    glutInitWindowSize(1024, 768);

    glutCreateWindow("OpenGL基本绘制");

    glutDisplayFunc(&myDisplay);

    glutMainLoop();

    return 0;

}


二. OpenGL 机器人(用长方形构成的机器人)


 


代码分为以下部分:

头文件和变量,

DrawCube,在指定位置绘制一个立方体,

DrawArm,绘制机器人的一条手臂,

DrawHead,绘制机器人的头,

DrawTorso,绘制机器人的躯干,

DrawLeg,绘制机器人的一条腿,

DrawRobot,在位置xPos、yPos、zPos处绘制机器人,

Render,处理场景的绘制,

SetupPixelFormat,为设备环境设置像素格式,

WndProc,窗口过程


两个机器人:

 


OpenGL图形学演示程序 在计算机发展初期,人们就开始从事计算机图形的开发,但直到20世纪80年代末90年代初,三维图形才开始迅速发展。于是各种三维图形工具软件包相继推出,如GL,RenderMan等,但没有一种软件包能够在三维图形建模能力和编程方便程度上与OpenGL相比拟。 OpenGL(Open Graphics Library,开放图形库),是一个三维的计算机图形和模型库,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI公司在1992年6月发布1.0版,后成为工业标准。目前,OpenGL标准由1992年成立的独立财团OpenGL Architecture Review Board(ARB)以投票方式产生,并制成规范文档公布,各软硬件厂商据此开发自己系统上的实现。目前最新版规范是1999年5月通过的1.2.1。 OpenGL作为一个性能优越的图形应用程序设计界面(API),它独立于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。 OpenGL在军事、广播电视、CAD/CAM/CAE、娱乐、艺术造型、医疗影像、虚拟世界等领域都有着广泛的应用。它具有以下功能。 1. 模型绘制 OpenGL能够绘制点、线和多边形。应用这些基本的形体,可以构造出几乎所有的三维模型。OpenGL通常用模型的多边形的顶点来描述三维模型。 2. 模型观察 在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。观察三维模型是通过一系列的坐标变换进行的。模型的坐标变换在使观察者能够在视点位置观察与视点相适应的三维模型景观。在整个三维模型的观察过程中,投影变换的类型决定观察三维模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。最后的视窗变换则对模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图象。 3. 颜色模式的指定 OpenGL应用了一些专门的函数来指定三维模型的颜色。程序开发者可以选择二个颜色模式,即RGBA模式和颜色表模式。在RGBA模式中,颜色直接由RGB值来指定;在颜色表模式中,颜色值则由颜色表中的一个颜色索引值来指定。开发者还可以选择平面着色和光滑着色二种着色方式对整个三维景观进行着色。 4. 光照应用 用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。OpenGL提供了管理四种光(辐射光、环境光、镜面光和漫射光)的方法,另外还可以指定模型表面的反射特性。 5. 图象效果增强 OpenGL提供了一系列的增强三维景观的图象效果的函数,这些函数通过反走样、混合和雾化来增强图象的效果。反走样用于改善图象中线段图形的锯齿而更平滑,混合用于处理模型的半透明效果,雾使得影像从视点到远处逐渐褪色,更接近于真实。 6. 位图和图象处理 OpenGL还提供了专门对位图和图象进行操作的函数。 7. 纹理映射 三维景物因缺少景物的具体细节而显得不够真实,为了更加逼真地表现三维景物,OpenGL提供了纹理映射的功能。OpenGL提供的一系列纹理映射函数使得开发者可以十分方便地把真实图象贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。 8. 实时动画 为了获得平滑的动画效果,需要先在内存中生成下一幅图象,然后把已经生成的图象从内存拷贝到屏幕上,这就是OpenGL的双缓存技术(double buffer)。OpenGL提供了双缓存技术的一系列函数。 9. 交互技术 目前有许多图形应用需要人机交互,OpenGL提供了方便的三维图形人机交互接口,用户可以选择修改三维景观中的物体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值