学习《Opengl编程指南》第7版 第2章(一)
来源:互联网 发布:api数据对原油的影响 编辑:程序博客网 时间:2024/06/09 22:09
(一)画点、直线、多边形
在这里提供《Opengl编程指南》第7版的电子版书、及源代码下载,方便大学参考学习,
下载地址:http://download.csdn.net/detail/jujueduoluo/5617639
我不准备讲一些概念,直接贴代码,然后对代码进行解释:
1)画圆
#include <gl/glut.h>
#include <cmath>
const int vertexNum = 100;
const GLfloat Pi = 3.1415926536f;
void DrawCircle(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat vertexVal;
glColor3f(1.0,0.0,0.0);
glBegin(GL_LINES);
for (int i=0; i<vertexNum; ++i)
{
vertexVal = 2*Pi*i/vertexNum;
glVertex2f(sin(vertexVal),cos(vertexVal));
}
glEnd();
glFlush();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("hello");
glutDisplayFunc(DrawCircle);
glutMainLoop();
return 0;
}
glCearColor 设置当前清除颜色,用于清除RGBA模式下的颜色缓冲区。red、green、blue和alpha值会根据需要截取,其范围限定在【0,1】之内,默认颜色为(0,0,0,0),也就是黑色
glclear 用当前缓冲区清除值清除指定的缓冲区;缓冲区有GL_COLOR_BUFFER_BIT(颜色缓冲区)、GL_DEPTH_BUFFER_BIT(深度缓冲区)等
GLfloat 是Opengl的类型定义,表示32位的float类型,关于Opengl的类型定义,请参考书里面Opengl函数的语法
glColor3f 设置颜色,范围在0.0--1.0之间的浮点数
glVertex2f 用于指定顶点
其它的已经在第1章有过介绍,这里就不在重复,看一下运行效果
2)画正弦
void DrawSin(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glBegin(GL_LINES);
//画X、Y轴
glVertex2f(-1.0,0.0);
glVertex2f(1.0,0.0);
glVertex2f(0.0,1.0);
glVertex2f(0.0,-1.0);
//画正弦
for(GLfloat i=-1.0; i<1.0; i += 0.1*factor)
{
glVertex2f(i,sin(Pi*i));
}
glEnd();
glFlush();
}
运行效果:
3)画余弦
void DrawCos(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,1.0,0.0);
glBegin(GL_LINES);
//画X、Y轴
glVertex2f(-1.0,0.0);
glVertex2f(1.0,0.0);
glVertex2f(0.0,1.0);
glVertex2f(0.0,-1.0);
//画余弦
for(GLfloat i=-1.0; i<1.0; i += 0.1*factor)
{
glVertex2f(i,cos(Pi*i));
}
glEnd();
glFlush();
}
效果如下:
大家可以把glBegin函数的的参数,变换一下,如换成:GL_POINTS、GL_LINE_STRIP等,然后看看他们的运行效果,具体的可以查下glBegin有哪些参数
4)坐标系统
这里简单的介绍二维坐标系统,无论是在刚打开窗口、还是以后移动窗口、改变窗口大小的时候,窗口系统都会发送一个事件传为通知。如果使用的是GLUT工具库,
它会自动产生通知,并且在glutReshapeFunc中注册的那个函数会被调用。另外,必顺注册一个回调函数,完成下列这些任务:
a)重新建立一个矩形区域,把它作为新的渲染画布。
b)定义一个用于绘制物体的坐标系统。
可以像这样使用:
void reshape(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,w,0.0,h);
}
这个reshape是作为glutReshapeFunc函数的回调函数
- 学习《Opengl编程指南》第7版 第2章(一)
- 学习《Opengl编程指南》第7版 第1章
- 学习《Opengl编程指南》第7版 第2章(二)
- OpenGL编程指南(第六版)学习-第0天
- 《OpenGL编程指南第7版》3视图
- opengl编程指南第8版 环境搭建及原理
- 《OpenGL编程指南》读书笔记2—第2章 着色器基础
- OpenGL 编程指南笔记——第8章 OpenGL 绘制像素、位图、字体和图像
- 《OpenGL编程指南》读书笔记1—第1章 OpenGL概述
- OpenGL ES 3.0编程指南学习笔记 第6章 顶点属性、顶点数组和缓冲区对象
- Android编程权威指南(第二版)学习笔记(一)——第1章 Android开发初体验
- 【笔记】《WebGL编程指南》学习-第7章进入三维世界(2-可视范围)
- 学习opengl(一)opengl 超级宝典 第5版 vs2013+opengl配置
- 【笔记】《WebGL编程指南》学习-第1章WebGL概述
- Android编程权威指南(第2版)第1/2章中的挑战练习思路
- Android编程权威指南(第2版)—第2章挑战练习
- Android编程权威指南(第2版)—第6章挑战练习
- Android编程权威指南(第2版)—第5章挑战练习
- iOS Library With Resources
- windows获取文件大小
- Android UI自动化测试的最佳实践
- 用C#读取LDAP记录
- 将纯文本控件从模板中复制到应用程序的word中
- 学习《Opengl编程指南》第7版 第2章(一)
- Java实现二维码QRCode的编码和解码
- 矩阵顺时针螺旋赋值
- linux下抓包命令--tcpdump的使用
- 设置ASP.NET页面不被缓存
- Debian Wheezy 64 - 解决插ntfs格式的u盘或者移动硬盘时报错,不能自动挂载
- GitHub
- SQLServer 中多列变一行的终极办法,无需编写函数实现
- 拼出漂亮的表格