【计算机图形学】OpenGl基础

OpenGL

  • 全称是Open Graphics Library ,开放图形库,它是图形硬件的软件接口。
  • 主要功能:模型绘制及观察,RGBA颜色,光照应用,图像效果增强,位图和图像处理,纹理映射,实时动画以及交互技术
  • OpenGL是状态机
    OpenGL只是设置流水线的状态参数

配置

在VS2017版本中,只需将opengl库复制到相应文件夹,添加附加依赖项等操作可由直接下载NuGet程序包。(每个解决方案都需重新下载一遍)
配置详细步骤

单位

没有具体单位,视口大小只与视椎体窗口比例有比例关系

相关的库

OpenGL Library(核心库)
115个函数,前缀gl
gl.h OpenGL.lib openGL32.dll

OpenGL utility library(实用程序库)
43个函数 前缀glu
glu.h glu.lib glu.dll

以上两个库可以在任何OpenGL的实现平台上使用,接口跨平台

辅助OpenGL工具库freeglut
freeglut.h freeglut.h freeglut32.h freeglut32.dll
窗口相关功能 鼠标,键盘交互 右键菜单 高层建模glutSolidSphere

freeglut.h 包含了 glu.h gl.h

编程基本模式,大循环,由消息驱动(windows惯用模式)
main()
{
设置显示窗口
初始化窗口
创建窗口glutCreatWindow
设置一些列回调函数(我们要做的)
(display , myReshape,键盘鼠标响应函数)
启动主循环glutMainLoop();
}

lib和dll区别

参考

怎样理解跨平台性

什么是回调函数

不由自己调用,又系统响应消息调用的函数

glutDisplayFunc(display)接收到重绘消息时

glutReshapeFunc(myReshape)投影变换,视口变换

glutSpecialFunc(processSpecialKeys);回车 空格等特殊按键
glutKeyboardFunc(processNomalKeys);

基本过程:
按键-全局变量值减小-重绘

glutIdleFunc(display);
注释掉后发现按键时没有调用重绘消息
关闭窗口再打开发现重绘了,因为再打开窗口调用了重绘函数
定时调用display,为了及时响应

glutPostRedisplay();明确知道什么时候重绘,抛出消息,触发reDisplay

为什么OpenGL自己不在核心库提供这些功能?
鼠标,键盘与平台有关
尽量把与平台有关的东西剥离

命名规则

前缀: gl glu glut 属于哪个库
后缀: 234参数维数, b s l f d ub us ui 参数数据类型, v 以数组方式传递

为什么重定义?

  • 数据类型: GLbyte

为了跨平台,机器之间字节可能不同

glVertex3f(3.0f,4.0f,5.0f)

GLfloat v[3] = { 3.0f,4.0f,5.0f}; glVertexfv(v);

  • 四个颜色分量

RGBA 每个量都是0-1
ub-无符号数 0 -255

  • 特殊符号

GL_RGBA
GLUT_DOUBLE
代表一个值

  • 双缓存模式

(GLUT_DOUBLE | GLUT_RGBA )
按位或 双缓存模式

如何绘制图元(Primitive)

glBegin(GL_TRIANGLES);
	glColor3f(1.0,0.0,0.0);
	glVertex3f(x1,y,1,z1);
	glVertex3f(x2,y2,z2);
	glVertex3f(x3,y3,z3);
glEnd();//画红色三角形

//Begin End之间,还可以设置颜色glColor 法相 glNormal

//每个顶点颜色不一样
glBegin(GL_TRIANGLES);
	glColor3f(1.0,0.0,0.0);
	glVertex3f(x1,y,1,z1);
	glColor3f(0.0,1.0,0.0);
	glVertex3f(x2,y2,z2);
	glColor3f(0.0,0.0,1.0);
	glVertex3f(x3,y3,z3);
glEnd();

基本图元

OpenGL3.1之后 GL_POLYGON GL_QUADS GL_QUAD_STRIP被取消
用三角形表达就行

去哪里查

为什么有时候看不见图

openGL默认视点在原点(屏幕中心),所以不移动视点可能会导致看不见物体/在物体内部
一般用glTranslatef(0.0f 0.0f -Distance)将物体放远一些(视线方向是z轴负方向)
默认坐标系右手坐标系unity左手坐标系

投影在myReshape

参考书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值