计算机图形学(OpenGL版)-第一个OpenGL程序

本文详细解答了在使用OpenGL进行编程时遇到的常见问题,特别是针对不同操作系统下的dll安装和库放置问题,提供了具体的解决步骤。通过实例代码展示了如何正确初始化OpenGL环境,包括设置背景色、绘制点集以及绘制窗口的基本操作。

获取和安装了OpenGL之后,就可以写第一个OpenGL程序了。虽然Helloj2ee在获取和安装OpenGL非常顺利。但是实际中大家会遇到不同的问题。具体说来主要有以下两个问题。

1、按照上一篇的步骤,VS运行OpenGL程序仍然找不到glut.dll和glut32.dll。这个问题主要是操作系统不一样。64位操作系统,需要将这两个dll安装到系统目录syswow64目录下。

2、lib放置的问题。仍然是部分机器,会存在Program File以及Program Files(x86)目录,您的VS多半会在后一个目录,因此需要找到相应的VS2010安装目录的lib文件夹下。比如Helloj2ee的机器lib的路径是C:\Program Files\Microsoft Visual Studio 10.0\VC\lib,您也可能是C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\lib。

当然Helloj2ee还遇到了同学不知道安装目录到底在哪儿。呃。这Helloj2ee就无能为力,回天乏术了。

一切顺利,您可以开始写第一个OpenGL程序了,程序代码如下图所示。

#include <windows.h>   
#include <gl/Gl.h>
#include <gl/glu.h>
#include <gl/glut.h>

//<<<<<<<<<<<<<<<<<<<<<<< myInit >>>>>>>>>>>>>>>>>>>>
 void myInit(void)
 {
    glClearColor(0.0, 0.0, 0.0, 0.0);      // 设置背景颜色为亮白
    glColor3f(1.0f, 1.0f, 1.0f);           // 设置绘制颜色为黑
     glPointSize(4.0);                    //设置点的大小为4*4像素
    glMatrixMode(GL_PROJECTION);// 设置合适的投影矩阵-以后解释 
    glLoadIdentity();// 以后解释
    gluOrtho2D(0.0, 640.0, 0.0, 480.0);// 以后解释
 }
//<<<<<<<<<<<<<<<<<<<<<<<< myDisplay >>>>>>>>>>>>>>>>>
// 重绘函数
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);     // 清屏幕 
    glBegin(GL_POINTS);
        glVertex2i(100, 50);         // 绘制若干个点
        glVertex2i(100, 130);
        glVertex2i(150, 130);
    glEnd();    
    glFlush();                         // 将所有输出到显示屏上 
}
//<<<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>>
void main(int argc, char **argv)
{
    glutInit(&argc, argv);          // 初始化工具包
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显式模式
    glutInitWindowSize(640,480);     // 设置窗口大小
    glutInitWindowPosition(100, 150); // 设置窗口位置
    glutCreateWindow("my first attempt"); // 打开屏幕窗口
    glutDisplayFunc(myDisplay);     // 注册绘制函数
    myInit();                   
    glutMainLoop();              // 进入主循环
}

 

 

Helloj2ee逐一解释一下。但凡gl开头的函数都是opengl的gl库,glu开头的函数都是glu库,glut开头的函数都是glut库,其他除main外,就是Helloj2ee操刀写的函数。除去亲自操刀写的函数不解释外,其他Helloj2ee都略做解释。

glutInit(int *argcp, char **argv)

该函数初始化工具包,其参数是传送有关命令行信息的标准参数。

glutInitDisplayMode(unsigned int mode)

该函数指明显式屏幕窗口如何被初始化。内置常数GLUT_SINGLE和GLUT_RGB是或的关系,表明应分配单个显式缓存(相对双缓存),而且颜色所需的红、蓝、绿三色的数量来指定。

glutInitWindowSize(int width, int height)

该函数指定显式屏幕窗口的初始尺寸,示例中宽640像素,高480像素。程序运行时,用户可以根据需要调整窗口大小。

glutInitWindowPosition(int x, int y)

该函数指定窗口在屏幕上相对于左上角的位置,示例中距左边100个像素,距顶端150个像素。程序运行时,用户可以根据需要移动窗口。

glutCreateWindow(char* name)

该函数打开并显式屏幕窗口,示例中是将标题设置为了“My First Attempt”。

 glutDsiplayFunc(void (*func)(void))

无论系统何时决定重画一个屏幕窗口,它都会发出一个重新绘制事件。出现下列情况之一,就会发生该事件:第一次打开窗口,或覆盖它的窗口被移走而露出该窗口。示例中函数myDisplay()在这里被注册为重新绘制事件的回调函数。

glutMainLoop()

执行这个函数时,程序绘制完初始图形,并进入循环,一直等待事件发生。用鼠标单击关闭窗口按钮,程序正常终止。

 glBegin(GLenum mode)和glEnd()

绘制函数应该处于这两个函数之间,示例中GL_POINTS内置于OpenGL中。如果需要绘制点集合、线集合以及多边形,可以传递GL_POINTS,GL_LINES以及GL_POLYGON等。

 

OpenGl函数命名非常有规则,以glvertex2i为例,gl  代表gl库,Vertex 代表基本命令,2 参数数目,i 参数类型,OpenGL用到的参数类型如下所示。

参数类型

后缀

数据类型

典型的CC++类型

OpenGL类型名

b

8位整型

signed char

GLbyte

s

16位整型

short

GLshort

i

32位整型

int 或long

GLint,GLsizei

f

32位浮点型

Float

GLfloat,GLclampf

d

64位浮点型

double

GLdouble,GLclampd

ub

8位无符号整型

unsigned char

GLubyte,GLboolean

us

16位无符号整型

unsigned short

GLushort

ui

32位无符号整型

unsigned int或unsigned long

GLuint,GLenum,GLbitfield

 

 

 

转载于:https://www.cnblogs.com/helloj2ee/archive/2013/03/06/2946243.html

计算机图形学pdf 内容可copy 适合要学习开发3d游戏的朋友们学习 希望对大家有所帮助 目录: 第1章基本图形的生成 1.1 直线 1.1.1 生成直线的DDA 算法 1.1.2 生成直线的中点算法 1.1.2 生成直线的Bresenham算法 1.1.3 程序设计案例 1.2 圆 1.2.1 DDA 算法 1.2.2 Bresenham算法 1.2.3 程序设计案例 1.3 椭圆 1.4 区域填充 1.4.1 扫描线填充 1.4.2 种子填充 1.4.3 程序设计案例 1.5 字符的生成 1.6 图形裁剪 1.6.1 线裁剪 1.6.2 多边形裁剪 1.6.3 字符裁剪 1.6.4 裁剪程序设计案例 1.7 Visual C++中基本绘图函数 1.8 课后练习 第 2 章二维图形 2.1 用户坐标到屏幕坐标的变换 2.1.1 窗口到视口的变换内容 2.1.2 窗口区到视图区的坐标变换 2.2 几何变换 2.1.1 基本变换 2.1.2 复合变换 2.1.3 几何变换程序设计案例 2.4 平面曲线图 2.4.1 正叶线 2.4.2 正叶线蝴蝶结 2.5 平面曲线程序设计案例 2.6 课后练习 第 3 章图形交互技术 3.1 用户接口设计 3.2 逻辑输入设备与输入处理 3.2.1 逻辑输入设备 业搜---www.yeaso.com CAD教育网制作www.cadedu.com 《计算机图形学原理及算法教程》(Visual C++)和青芳清华大学出社出 3.2.2 输入模式 3.3 交互式绘图技术 3.4 交互技术程序设计案例 3.5 课后练习 第 4 章简单 CAD 绘图系统开发实例 4.1 计算机图形学绘图基础 4.1.1 Visual C++开发系统基本绘图知识 4.1.2 计算机图形学会图系统设计基本原则 4.1.3 图形程序设计步骤 4.1.4 在Visual C++集成开发环境下程序的调试 4.1.5 计算机程序结构设计基础 4.1.6 绘图程序设计基本方法 4.1.6.1 图形层次结构和程序模块结构 4.1.6.2 面向对象程序设计 4.1.6.3 绘图子程序和主程序 4.1.6.4 编程绘图方法 4.2 图形的数据结构 4.2.1 图形信息的分类 4.2.2 图形数据结构 4.2.3 计算机对数据的管理—数据文件 4.2.4 图形数据的存储状态 4.2.5 动态文件数据结构的组织原则 4.2.6 简单CAD 绘图系统编程实例中的数据结构 4.2.6.1 图形元素基类的组织 4.2.6.2 组织图形类系统文档 4.2.6.3 增加图形元素 4.2.6.4 实现各类图形的绘制 4.2.6.5 保存图形数据到文档 4.3 简单CAD 绘图系统功能简介 4.3.1 简单CAD 绘图系统运行界面 4.3.2 简单CAD 绘图系统功能 第5章三维图形 5.1 三维图形几何变换矩阵 5.2 三维图形基本变换 5.2.1 平移变换矩阵 5.2.2 比例变换矩阵 5.2.3 旋转变换矩阵 5.2.4 对称变换 5.2.5 错切变换 5.3 图形的投影变换 5.3.1 投影变换分类 5.3.2 平行投影 5.3.2.1 正平行投影(三视图) 5.3.2.2 斜平行投影 业搜---www.yeaso.com CAD教育网制作www.cadedu.com 《计算机图形学原理及算法教程》(Visual C++)和青芳清华大学出社出 5.3.2.3 透视投影 5.4 三维变换程序设计案例 5.5 课后练习 第 6 章曲线与曲面 6.1 曲线曲面参数表示的基础知识 6.1.1 非参数表示和参数表示 6.1.2 参数表示的基本特征 6.1.3 曲线段之间的连续性 6.1.4 曲线曲面设计中的几个概念 6.2 常用参数曲线 6.2.1 一般规则空间曲线 6.2.2 Bezier 曲线 6.2.3 B 样条曲线 6.3 参数曲面 6.3.1 函数式曲面 6.3.2 旋转曲面 6.4 常用曲面 6.4.1 双曲线曲面 6.4.2 Bezier 曲面 6.4.3 B 样条曲面 6.5 曲面与曲线程序设计案例 6.6 课后练习 第 7 章几何造型 7.1 实体的表示模型 7.1.1 形体的边界表示模型 7.1.2 构造表示 7.1.3.边界表示 7.1.3.1 欧拉操作 7.1.3.2 集合运算 7.2 求交分类 7.2.1 求交分类 7.2.2 基本的求交算法 7.2.2.1 线与线的求交计算 7.2.2.2 线与面的求交计算 7.2.2.3 曲面与曲面的求交 7.3 图形相交-相切程序设计案例 7.4 非传统造型技术 7.4.1 基本概念 7.4.2 分形造型对模型的基本要求 7.4.3 分形造型的常用模型 7.4.4 分数维图形应用 7.5 分形造型程序设计案例 7.6 课后练习 业搜---www.yeaso.com CAD教育网制作www.cadedu.com 《计算机图形学原理及算法教程》(Visual C++)和青芳清华大学出社出 第 8 章消隐技术 8.1 线消隐 8.2 面消隐 8.2.1 区域排序算法 8.2.2 深度缓存(Z-buffer)算法 8.2.3 扫描线算法 8.3 消隐 8.4 消隐技术程序设计案例 8.5 课后练习 第 9 章真实感图形绘制 9.1 颜色模型 9.1.1 CIE 色度图 9.1.2 常用的颜色模型 9.2 简单光照明模型 9.2.1 Phong 光照明模型 9.3 局部光照明模型 9.3.1 局部光照明模型 9.4 光透射模型 9.4.1 透明效果的简单模型 9.4.2 Whitted 光透射模型 4.4.3 Hall 光透射模型 9.4.4 简单光反射透射模型 9.5 纹理及纹理映射 9.5.1 纹理的概述 9.6 整体光照明模型 9.6.1 光线跟踪算法 9.6.2 辐射度方法 9.7 真实感图形学程序设计案例 9.8 课后练习 第 10 章计算机动画 10.1计算机动画概述 10.2计算机动画的应用领域 10.3 计算机动画的分类和原理 10.4 目前计算机动画面临的问题 10.5 计算机动画程序设计案例 10.5.1 帧动画 10.5.1 实时动画 10.6 练习题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值