博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机图形学(OpenGL版)-第一个OpenGL程序
阅读量:6259 次
发布时间:2019-06-22

本文共 3190 字,大约阅读时间需要 10 分钟。

获取和安装了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 
#include
#include
#include
//<<<<<<<<<<<<<<<<<<<<<<< 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

你可能感兴趣的文章
html3秒跳转
查看>>
机器学习与R语言
查看>>
反距离权重插值inverse distance weighting,IDW
查看>>
2017第18周六
查看>>
Postman 网络调试工具
查看>>
hive建表范例
查看>>
【转】svn 的开发目录结构和流程
查看>>
水晶报表使用IEnumerable<T>数据源
查看>>
阿里面试的一点感受
查看>>
IE 窗口缩小css-IE,firefox居中的区别
查看>>
jQuery ajax - get() 方法
查看>>
opengl
查看>>
撒列实现关键字过滤,速度可快了
查看>>
将不确定变为确定系列~目录(“机器最能证明一切”)
查看>>
ListView 控件的使用
查看>>
奇怪的WinSCP登录问题
查看>>
UBUNTU中安装SMPLAYER
查看>>
[zz]struct epoll_event
查看>>
[PAL编程规范]SAP HANA PAL线性回归预测分析Linear Regression编程规范LRREGRESSION(模型)...
查看>>
ORA-00001: unique constraint violated并不一定是主键冲突
查看>>