OpenGL
wudiliyao
这个作者很懒,什么都没留下…
展开
-
OpenGL从1.0开始-顶点数组简析
相信大家在之前的代码实现中已经被频繁的点坐标指定函数所折磨,同样,我们的计算机也对大量的函数调用和资源请求所拖累而减缓了图形程序的执行。下面我们可以看看一个执行正方形渲染的代码段(详细代码以后补充)typedef GLint vertex3[3];vertex3 pt[8] = { { 0, 0, 0 }, { 0, 1, 0 }, { 1, 0, 0 }, { 1, 1, 0 }, { 0, 0原创 2017-09-28 13:19:08 · 453 阅读 · 0 评论 -
OpenGL从1.0开始--二维几何变换
在我们在做图形显示时,实际上我们不是对每一个图形都去从头开始绘制,对于形状相同或相似的图案,我们可以运用几何变换函数提高效率。我们看一看一个简单的示例。#include <Gl/glut.h>void init(){ glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(-400原创 2017-11-14 21:35:30 · 1139 阅读 · 0 评论 -
OpenGL从1.0开始--二维观察
正本清源,这一节我们重新来给大家解释下OpenGL如何实现图元在屏幕上的显示功能。#include <Gl/glut.h>class wcPt2D{public: GLfloat x, y;};void init(){ glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrt原创 2017-11-16 17:43:37 · 715 阅读 · 0 评论 -
OpenGL着色器程序解析--keypress
该程序示范了如何写键盘响应函数。////////////////////////////////////////////////////////////////////////////////// Triangles.cpp////////////////////////////////////////////////////////////////////////////////#in原创 2017-12-10 15:34:16 · 385 阅读 · 0 评论 -
OpenGL从1.0开始--计算机动画
在计算机图形学中生成计算机动画的技术有很多,我们现在不想过多地涉猎其中,只简单使用双缓存技术来实现动画效果。 在光栅系统中使用两个刷新缓存生成实时动画的技术称为双缓存。初始状态时,在第一个缓存中创建动画的一帧;然后,当用该缓存中的帧刷新屏幕时,在第二个缓存中创建下一帧;下一帧创建完成后,互换两个缓存的角色;因而刷新进程开始用第二个缓存中的帧来刷新屏幕,同时在第一个缓存创建下一帧。 下列代码给出一原创 2017-11-22 16:48:53 · 473 阅读 · 0 评论 -
OpenGL从1.0开始--绘制规则多面体
我们之前已经讲解了很多二维图元的绘制,终于我们现在有了基础来绘制三维图元了。 幸运的是,某些标准的形体–五种规则多面体–由GLUT库中的子程序预先定义。这些多面体也称为柏拉图式实体,由它的每一面是一个单位规则多边形来标识。 GLUT中总共有10个函数用来生成这些实体 glutWireTetrahedron();//规则三棱锥线框图 glutSolidTetrahedron();//原创 2017-11-22 18:38:36 · 2220 阅读 · 0 评论 -
OpenGL从1.0开始--绘制二次曲面
类似规则多面体,GLUT可以绘制球面或其他三维的二次曲面对象,甚至能绘制一个茶壶。同样的这些函数分为两个版本:一个生产线框图,一个把曲面显示为一组填充多边形面片。这两个版本都是将曲面细分成小平面以逼近二次曲面。 主要代码和上一篇相同,我们来看看核心代码段。glutWireSphere(r,nLongitudes,nLatitudes);//球面线框图,参数分别为半径,经纬度数目glutSolid原创 2017-11-22 20:18:54 · 1121 阅读 · 2 评论 -
OpenGL着色器程序解析--初识着色器
OpenGL的版本已经从1994年的1.0版本发展到了现在的4.6版本,OpenGL早已发生了质的变迁,我们现在抛开以前的固定管线来谈谈渲染管线,即着色器的使用。 在这里我们使用的代码都来自于《OpenGL编程指南(第八版)》,由于网络上各种资源已经非常丰富(源码http://www.opengl-redbook.com/,教材https://yq.aliyun.com/articles/212原创 2017-12-05 14:30:32 · 476 阅读 · 0 评论 -
OpenGL从1.0开始--光照和表面绘制函数
对场景的对象进行透视投影,然后再可见面上产生自然光照效果,可以实现场景的真实感显示。多说无益,看一个示例是最直接的方法(示例代码来源于http://blog.csdn.net/timidsmile/article/details/7017197)。 #include <gl/glut.h> #define WIDTH 400 #define HEIGHT 400 static GLfl原创 2017-11-27 16:05:29 · 1028 阅读 · 0 评论 -
OpenGL从1.0开始--纹理与表面细节
要让绘制对象更加逼真,除了需要添加光照外,另一个重要的因素就是纹理了。,我们先看一个简单的示例。 #include <Gl/glut.h>void init(){ glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 200.0, 0.0, 150.0);}voi原创 2017-11-27 20:51:44 · 577 阅读 · 0 评论 -
OpenGL从1.0开始--交互式输入设备函数
在OpenGL程序中,交互设备输入有GLUT中的子程序处理,GLUT有从标准输入设备(包括鼠标、键盘、数据板、空间球、按钮盒和拨号盘)接受输入的函数。我们来看一个示例。#include <Gl/glut.h>GLsizei winWidth = 400, winHeight = 300;void init(){ glClearColor(0.0,0.0,1.0, 1.0); g原创 2017-11-28 14:42:00 · 1080 阅读 · 0 评论 -
OpenGL从1.0开始--填充区属性
和点属性和线属性一样,OpenGL也提供面的属性,我们称之为填充区属性。 简明扼要,我们先来看一个示例(代码借鉴于http://www.xuebuyuan.com/2205027.html) #include <windows.h>#include <GL/gl.h>#include <GL/glu.h>#include <GL/glut.h>void display(void){原创 2017-11-14 20:45:38 · 723 阅读 · 0 评论 -
OpenGL从1.0开始--GLUT菜单
我们现在来学习如何利用GLUT添加弹出式菜单,直接看示例:#include <Gl/glut.h>#include <stdio.h>const GLint pickBuffsize = 32;GLsizei winWidth = 400, winHeight = 400;GLfloat red = 1.0, green = 1.0, blue = 1.0;GLenum fillMode原创 2017-11-28 20:34:53 · 1383 阅读 · 0 评论 -
OpenGL从1.0开始--拾取操作
基本上,拾取操作是通过一个修正观察体来实现的,而这个观察体根据一个指定的拾取窗口形成。我们队一个场景内的对象用整数进行标识。所有与观察体相交的对象的标识符都保存在一个拾取缓冲区数组中。因此,为了使用OpenGL的拾取功能,我们必须在程序中包含以下过程: 1.创建并显示一个场景 2.拾取一个屏幕位置,并且在鼠标回调函数内部进行如下操作: 设置一个拾取缓冲区 激活拾取原创 2017-11-28 17:31:04 · 1311 阅读 · 0 评论 -
OpenGL从1.0开始--输出图元
图元绘制:点、线、面原创 2017-09-25 17:05:10 · 462 阅读 · 0 评论 -
OpenGL从1.0开始--第一个OpenGL程序
OpenGL的“Hello World”是一个线段绘制小程序。原创 2017-09-25 14:24:02 · 1284 阅读 · 0 评论 -
OpenGL从1.0开始-图元输出(下)
这个世界远远不是用简单几何图形就能表达的,OpenGL的像素阵列函数和字符函数让我们能做到的更多。原创 2017-10-10 18:18:59 · 392 阅读 · 0 评论 -
OpenGL从1.0开始--点和线的属性
上一节我们已经讲到了颜色属性,颜色属性是属性的一种,这一节我们从属性对象角度来看看OpenGL如何处理属性信息。一、点的属性一般情况下,我们可以设定点的两个属性:颜色和大小。我们看看下面这个示例,一切不言自明。#include void display(void){ glClear(GL_COLOR_BUFFER_BIT); glClearColor(1, 1,原创 2017-11-07 22:05:32 · 906 阅读 · 0 评论 -
OpenGL从1.0开始--OpenGL显示表(下)
在上一篇中,我们接触到了两个新知识点。下面为大家一一解惑。 第一个知识点是OpenGL显示窗口重定形函数glutReshapeFunc(winReshapeFcn)。 该函数在显示窗口尺寸输入后立即激活,对显示窗口尺寸的改变做出反应。winReshapeFcn函数的变量是接受新窗口宽度和高度的过程名,新窗口宽度和高度在窗口尺寸改变的过程中自动获取。 第二个知识点是OpenGL显示表。原创 2017-10-23 15:33:58 · 566 阅读 · 0 评论 -
OpenGL从1.0开始--OpenGL显示表(上)
这一篇开始,我们给大家带来一点真正的挑战。 让我们来头脑风暴下如何实现窗口重定形函数,使六边形中心位置不受窗口尺寸变化的影响。原创 2017-10-15 21:27:15 · 324 阅读 · 0 评论 -
OpenGL从1.0开始--绘制常用统计图
通过前面几节的学习,我们已经有能力实现一些高级的图形绘制功能。这一节我们给大家示例折线图、直方图和饼状图的绘制程序。 我们先看看要实现的效果。 下面我们默认大家已经掌握了前面的知识,并会把讲解的重点放在高级功能上。#include <gl/glut.h>GLsizei winWidth = 600, winHeight = 500;GLubyte label[36] = { 'J', 'a'原创 2017-11-01 16:00:48 · 1993 阅读 · 0 评论 -
OpenGL从1.0开始--曲线图形
这一些我们继续来实现一些有趣的高级图形,例如蜗形线limacon、心形线cardioid、三叶草threeLeaf、四叶草fourLeaf和螺旋线spiral等漂亮的曲线图形,如下面这些图形所示。 #include <gl/glut.h>#include <stdlib.h>#include <math.h>#include <iostream>using namespace原创 2017-11-01 17:01:36 · 762 阅读 · 0 评论 -
OpenGL从1.0开始--三维观察
我们这一篇文章将二维世界扩展到三维,通过上一篇文章我们已经明白了,几何变换和观察变换本质是一样的,所以暂且忽视三维几何变换,直接进入三维观察的世界。 三维观察流水线包括五个步骤:建模变换、观察变换、投影变换、规范化变换和裁剪、视口变换。物体从模型坐标系转换到世界坐标系的过程叫做建模变换,观察变换是将世界坐标系中建好的场景模型转换到选择的观察坐标系。观察坐标系定义了观察参数,包括投影平面的位置和方向原创 2017-11-17 16:57:18 · 1538 阅读 · 0 评论 -
OpenGL从1.0开始--颜色调和
一、图元属性任何影响图元显示方法的参数一般称为属性参数。OpenGL将属性选择加入图形软件包的方法是提供一张系统当前属性值表,并使用包含在图形软件包中的独立函数来为属性表设置当前值。维护属性和其他参数当前值表的图形系统称为状态系统或状态机。输出图元的属性和当前帧缓存位置等其他参数称为状态变量或状态参数。在给一个或几个状态参数赋值时,系统进入一个特定状态。该状态一直保留到状态参数的值再次改变。 属性原创 2017-11-03 21:10:26 · 3429 阅读 · 0 评论 -
OpenGL着色器程序解析--着色器基础
部分内容来源于https://yq.aliyun.com/articles/212816?spm=5176.100239.blogcont212814.16.7FHthK 现代OpenGL渲染管线严重依赖着色器来处理传入的数据。如果不使用着色器,那么用OpenGL可以做到的事情可能只有清除窗口内容了,可见着色器对于OpenGL的重要性。在OpenGL 3.0版本以前(含该版本),或者如果你用到了兼原创 2017-12-07 14:51:26 · 314 阅读 · 0 评论