OpenGL
smsmn
在学校曾获得过福建省大学生程序设计竞赛并参加过ACM/ICPC亚洲区的预选赛,曾获得过高等数学竞赛一等奖和全国数学建模竞赛福建赛区一等奖;对C#、.net和SQL熟悉,在学校用.net和C#做过教学管理系统;在学校通过了全国计算机四级和大学英语四级的考试。<br/>在工作的这一两年除了用C/C++进行三维开发之外,也涉及了网络编程的开发,对ASIO和socket熟悉。<br/>在杭州和厦门这段时间都是使用OpenGL进行开发,前者是做虚拟现实,后者是底层导航引擎开发。<br/>总之,我对于C/C++开发特别感兴趣,也想在三维、嵌入式、视频监控系统或者游戏方面有所发展。
展开
-
缓冲区对象
<br /> 今天在做CUDA的程序,突然出现了有关OpenGL缓冲区对象的函数,这让我很是纠结,因为我的OpenGL的基础不是很好,才接触不到一个月,今天我就稍微介绍一下缓冲区对象的有关函数。(参考OpenGL编程指南)<br /> 在许多OpenGL操作中,我们向OpenGL发送一大块数据,例如向它传递需要处理的顶点数据。传输这种数据可能非常简单,例如把数据从系统的内存中复制到图形卡。但是,由于OpenGL按照客户机-服务器模式而设计的,在OpenGL需要数据的任何时候,都必须把数原创 2011-04-10 23:53:00 · 1034 阅读 · 0 评论 -
GLSL核心课程---纹理坐标
纹理坐标通常用作如何将一个一张图片贴到表面上。然而纹理坐标并不是限制执行这种贴图。纹理坐标本身同样也可以用作绘画模型。在这里我们用两个例子来说明纹理坐标如何使用。第一步就是使纹理坐标在我们的着色器有效。纹理坐标仅仅是又一个属性变量,就像法向量一样。因此在应用程序中,我们需要像这样处理,比如,我们需要添加包含纹理坐标的包含其他属性的顶点数组对象的缓冲区(请看这一节来了解更多属性细节)。在顶点翻译 2013-08-12 13:32:09 · 3404 阅读 · 0 评论 -
几何方法---测试盒子
测试一个盒子是比球体和点更棘手的问题。一个简单的方式就是测试盒子的八个点。一个简单的方法认为就是如果所有的点都是在视景体之外那么可以认为在视景体之外。然而下面的图展示了这个并不总是这个情况。黄色盒子的点都在视景体之外,但是盒子有部分在视景体之内,因此它不应该被抛弃。一个安全的方式来解决这个问题来抛弃这个盒子,也仅仅,所有的点在同一个平面的错误边。在上面的黄色盒子中并没有这样的平翻译 2013-08-24 15:56:06 · 789 阅读 · 0 评论 -
几何方法---测试盒子 二
盒子测试还可以优化,在一定程度上,仅仅只有测试它的顶点,叫做“正顶点”和“负顶点”(叫做最大顶点和最小顶点)。盒子在(视景体)之外在足够的情况下测试一个单独的顶点,其中的第二个顶点,仅仅在需要区分盒子完全在视景体之内还是部分在视景体之内的情况下做测试。因此什么是这些点呢?找到这些点有多高的难度?假设一个平面和它的法线,一个正顶点是从盒子沿着法线方向延伸,负顶点刚好是相反。翻译 2013-08-25 13:47:05 · 819 阅读 · 0 评论 -
GLSL核心课程---纹理图像
大多数时候我们会将一幅纹理图像应用到模型上,或多或少就像壁纸一样。有时候纹理还可以看成是数据,不是颜色值。纹理坐标提供了在图像和模型之间的映射关系。在我们着色器中处理使用纹理之前我们需要在我们的OpenGL应用程序中做一些设置步骤。在这一节中,我们将覆盖一下经典纹理用法案例。OpenGL在我们着色器中使用纹理的第一步就是需要创建一个OpenGL纹理对象。一个通用的用法就是我们同样需要从文件翻译 2013-08-13 19:18:26 · 1123 阅读 · 0 评论 -
GLSL核心课程---纹理图像
大多数时候我们会将一幅纹理图像应用到模型上,或多或少就像壁纸一样。有时候纹理还可以看成是数据,不是颜色值。纹理坐标提供了在图像和模型之间的映射关系。在我们着色器中处理使用纹理之前我们需要在我们的OpenGL应用程序中做一些设置步骤。在这一节中,我们将覆盖一下经典纹理用法案例。OpenGL在我们着色器中使用纹理的第一步就是需要创建一个OpenGL纹理对象。一个通用的用法就是我们同样需要从文件翻译 2013-08-14 21:45:33 · 2858 阅读 · 0 评论 -
使用几何着色器来实现绘制模型轮廓线
我们经常要实现绘制模型轮廓线的效果,这一节就介绍使用几何着色器来实现这个效果。这一节的介绍是参考Philip Rideout 博客,下一节我会介绍这个博客复杂一点的效果实现步骤。几何着色器最重要的一个特性就是我们可以获得当前图元的相邻顶点信息,以下为例:其中的实线代表当前三角形本身的顶点,其中的虚线代表相邻的顶点信息。因此我们根据相邻点信息来判断当前线段是否处于轮廓线。原创 2013-08-17 16:52:33 · 2056 阅读 · 0 评论 -
几何分析--源代码
视景体文件保护了源代码和一个vc6.0的工程。这个工程包含了运行这个测试所有的全部类,其中允许测试点、球体和轴对齐的包围盒。尝试并比较在每一帧有和没有视景体裁剪的区别。注意,fps计时器是每秒更新一次,所以请认真盯着计时器看。像往常一样,为本课程也提供了一个源代码,它可以有很多方式的优化,它同样没有保证没有任何错误,或者在任何地方都能运行。顺便说一句,如果你找到bug,或者可以提高的地翻译 2013-08-28 16:38:40 · 889 阅读 · 0 评论 -
裁剪空间法-引出平面
在这里另外一种扩展视景体空间的方法就是基于裁剪空间属性。假设一个点p=(x,y,z,1)位于3D空间中。同样假设一个模型变换矩阵M和投影矩阵P。点p经过矩阵M和矩阵P变换之后的在裁剪空间中的点pc=(xc,yc,zc,wc):pc是本地坐标,当规范化后的点pcn:在规范化的裁剪空间中视景体是中心在原点的轴对齐的长方体,是通过下面的平面包围的:1. 左平面:x’= -1;翻译 2013-08-29 11:51:27 · 1114 阅读 · 0 评论 -
裁剪空间法--实现细节
下面从类FrustumG的函数,就像下面描述的平面,假设给予的参数矩阵A=M*P:#define m(row,col) m[col*4+row-5]void FrustumG::setFrustum(float *m) { pl[NEARP].setCoefficients( m(3,1) + m(4,1),翻译 2013-08-30 19:12:15 · 964 阅读 · 0 评论 -
射线方法--测试点
前面提出的方法是基于由六个平面限制的视景体。在这些方法中就是使用扩展的平面方程来设置参数,其中的测试都是跟平面做测试。在这一节中将提出不一样的方法,这个方法是基于名字来源于Game Programming Gems 5 的技术。假设相机是基于三个单元向量组成:在下图中显示的X,Y和Z。注意下面参考的不是一个右手坐标系(在OpenGL中),因为在本课程中使用这样的Z方向看起来更直观。给一个要翻译 2013-09-02 11:46:43 · 780 阅读 · 0 评论 -
射线方法--点测试 2
要测试点需要计算点p在相机参考坐标系下的坐标值,pc已经详细说过了。我们同样假设点的pc.z在nearDist和farDist之间,因此需要测试其他坐标,叫做pc.y和pc.x。假设一个2D的视景体如下图所示,水平箭头展示了pc.z的值,距相机的距离,pc.z视景体有一个高度h。其中的a是视景体在垂直方向上的角度。对于实现方式,pc在y方向上要在视景体之内需要:-h/2 或翻译 2013-09-05 15:33:11 · 702 阅读 · 0 评论 -
ARB assembly语言
最近涉及到ARB assembly语言,说白了就是OpenGL的低级着色语言,语言组织看起来有点像汇编语言,下面就摘抄点网络上对这个语言的介绍:ARB assembly language is a low-level shading language, which can be characterized as an assembly language. It was created原创 2013-12-20 22:11:39 · 1377 阅读 · 0 评论 -
[译]CSAA (覆盖取样抗锯齿)
转载于:http://getix.blog.163.com/blog/static/116992306200962510481030/原文于:https://developer.nvidia.com/csaa-coverage-sampling-antialiasing声明:本文原文由Peter Young撰写,由GeTiX翻译。本文仅供学习交流之用。如需转载,请注明作者及出处转载 2013-12-22 22:43:01 · 2896 阅读 · 0 评论 -
各种抗锯齿模式略解:SSAA MSAA CSAA CFAA
转载于:http://itbbs.pconline.com.cn/8692740.htmlFSAA--Full Screen Anti-Aliasing的缩写,望文生义就是指全屏抗锯齿画面增强技术,用以缩小3D建模边缘锯齿形状,使得较低的分辨率拥有接近较高分辨率的画面表现。关于3D建模和AA的原理不赘述,枯燥的文章网上大把,这里重点说明一下各种流行的AA实现方法。1,SSAA-转载 2013-12-22 22:41:40 · 3028 阅读 · 0 评论 -
西川善司的3D图形技术概念和渲染管线的处理
from: http://psv.tgbus.com/news/ynzx/201305/20130528094843.shtml 3D图形技术概念和渲染管线的处理一:3D图形的概念图1是3D图形的流程模型。这个虽然是对应DirectX 10/SM4的GPU流程模型,不过部分流程会根据GPU的不同,有时会有更细致的处理,有时也会做一些简略,这点敬请谅解。 首转载 2014-02-13 13:33:29 · 5380 阅读 · 0 评论 -
【翻译】【西川善司】GPU和Shader技术的基础知识 (一共有99回,翻译中)
from: http://www.opengpu.org/forum.php?mod=viewthread&tid=7376&extra=page%3D1本连载的主要目的,是介绍最新的PC和GAME所使用的最新3D图形技术的发展趋势。暂时的方针是,首先是考虑介绍比较新的PC Game和PS3,XBOX360等新时代游戏机的游戏所采用的技术。那么首先,想回顾一下近年来的3D图形技转载 2014-02-13 13:42:44 · 1901 阅读 · 0 评论 -
OpenGL Performance Optimization
转载于:http://www.opengpu.org/forum.php?mod=viewthread&tid=392可能这篇文章有点老,但是对于转载 2014-04-24 13:05:38 · 847 阅读 · 0 评论 -
几何方法---测试点和球
几何方法---测试点和球一旦平面定义好了。那么我们就可以测试点是在视景体之内还是之外。计算符号的距离可以告诉我们点是在平面的哪一边。假设平面的法向是向内的,如果点的符号距离是负的,那么说明点在视景体之外。否则点就在平面的右侧。下面的类frustumG方法说明了实现的方式,参数就是测试的点:int FrustumG::pointInFrustum(Vec3 &p) { in翻译 2013-08-23 13:31:59 · 738 阅读 · 0 评论 -
使用VAO遇到的问题:
这两天在使用VAO的时候,出现了在使用glGenVertexArrays来申请VAO的时候发生访问冲突,还记得这个问题在以前遇到过,只是忘记了,当时是怎么解决,晚上查了一下,就是在使用这个VAO之前要先使用glewInit()函数初始化,估计这个跟扩展有关系。原创 2013-08-11 12:56:29 · 1181 阅读 · 1 评论 -
最近编译GLEW库所得
前几天在OGL 4.0 shading language cookbook中编译使用这个库,但是很郁闷的是,就一直报错(说找不到Lib文件,但是很明显,我都已经包含进去了,后面网上找了答案,其实问题就是库可能跟当前环境有冲突,这时最简单的解决方法就是重新编译这个库,后面我重新下载了glew库的源代码重新编译了一下,顺利通过。这让我联想之前也有一些奇怪的问题,现在终于都想通了,其实以后要是遇到这个问原创 2013-08-11 12:56:04 · 808 阅读 · 0 评论 -
OpenGL VBO顶点缓冲的使用(转)
<br />OpenGL VBO并不难,但是较繁琐,其实其概念跟加载纹理类似:<br />初始化阶段:<br />1. glGenBuffersARB(1, &nVBOVertices); //生成一个句柄<br />2. glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); //声明该句柄为一个vbo句柄,并选择之<br />3. glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices), vertices转载 2011-04-13 15:38:00 · 1003 阅读 · 0 评论 -
Win32消息处理API---PeekMessage
<br />03、PeekMessage<br />功能说明<br />WinCE/Win32:该函数从进程消息队列中检索一个消息,并将该消息(如果存在的话)赋值给指定的消息结构。跟GetMessage不同之处在于:PeekMessage不会等待消息,而是不间断地访问消息队列,不管消息队列的目前状态如何。<br />PeekMessage在检索应用程序的消息队列时,如果其中有消息就将其放入lpMsg(如下所示的函数原型的声明中)所指的结构中,同时PeekMessage函数不会等到有消息放入队列时才返回。同样转载 2011-04-13 15:39:00 · 1060 阅读 · 0 评论 -
理解OpenGL中的模型视图矩阵变换
<br />对于学习OpenGL,或者其他的API,基础的矩阵变换是最重要的。矩阵变换是重中之重。<br />下面就拿红皮书上的最简单的demo:cube.c来说。<br />调用函数 glMatrixMode (GL_MODELVIEW);指定修改模型视图矩阵,以后调用glLoadIdentity (); 将当前的矩阵置为单位矩阵,有利于后面的运算。<br />下面我们假设将对创建的模型glutWireCube (1.0); 进行平移,缩放,旋转(就绕x轴吧),<br />按照OpenGL提供的语句只需转载 2011-05-05 20:29:00 · 1366 阅读 · 0 评论 -
OpenGL中的抗锯齿功能
<br /> 可能读者有注意到了,在有些OpenGL图像中,直线(尤其是接近于水平或垂直的直线)会呈现出锯齿状边缘,这种“锯齿”现象是由于理想的直线是由一系列的像素模拟的,而这些像素又必须位于它们各自的像素网格中,下面我有一个呈现来说明减少这种“锯齿”效果的抗锯齿技巧。<br /> 效果图如下:<br /><br />程序如下:<br />#include "GLUT.H"#include <stdio.h>static float rotAngle = 0.;//初始化函数v原创 2011-05-05 21:46:00 · 1878 阅读 · 0 评论 -
搜集的优良OpenGL教程
搜集的优良OpenGL教程2009-1-18 14:12:37 | 发布:zwqxin本日志为推荐日志,罗列一些我在学习过程中特意或无意搜集到的网站或教程,对OpenGL初学者或者进阶者都很有用的喔。(可能会不定期更新,方便搜索苦手啊。 )ZwqXin不怕做广转载 2011-07-05 22:03:22 · 626 阅读 · 0 评论 -
有关于OpenGL、OpenGL ES、WebGL的小结
一. OpenGL简介 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图西象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。原创 2011-09-28 21:03:27 · 9062 阅读 · 0 评论 -
OpenGL ES 2.0 shadow mapping阴影
最近一直在做阴影算法的研究,其实阴影算法目前主流就三四种,有shadow volume还有就是shadow mapping,由于shadow mapping比较简单容易实现,但是锯齿比较严重,之前我是在opengl 下的实现,但这次我是在opengl es 2.0下实现shadow mapping阴影算法,其实算法无外乎两个步骤,首先将摄像机移动到光源处绘制场景,得到深度图;其次就是移原创 2012-11-30 17:04:28 · 2935 阅读 · 0 评论 -
webgl的shadow mapping(pcf处理)的例子
http://devmaster.net/forums/topic/14542-webgl-shadow-maps-and-hackery/挺不错的。。可以参考参考。原创 2012-12-04 16:58:33 · 1351 阅读 · 0 评论 -
gluLookAt矩阵、矩阵的转置与求逆矩阵方法
1. gluLookAt矩阵这次使用opengl es 2.0中,由于里面没有gluLookAt这个函数,参考了网上的一些代码自己封装了一个,经过使用,没发现问题,具体代码如下:void ESUTIL_API esGluLookAt(ESMatrix *result, float eyeX, float eyeY, float eyeZ, float centerX, float ce原创 2012-12-04 15:36:07 · 3109 阅读 · 0 评论 -
OpenGL光照追踪
1.光照追踪简介光线追踪,简单地说,就是从摄影机的位置,通过影像平面上的像素位置(比较正确的说法是取样(sampling)位置),发射一束光线到场景,求光线和几何图形间最近的交点,再求该交点的著色。如果该交点的材质是反射性的,可以在该交点向反射方向继续追踪。光线追踪除了容易支持一些全局光照效果外,亦不局限于三角形作为几何图形的单位。任何几何图形,能与一束光线计算交点(intersection原创 2012-12-06 15:05:54 · 5762 阅读 · 0 评论 -
OpenGL拣选
OpenGL拣选1. 名字堆栈OpenGL提供一个在3D场景拣选模型的方法,这个章节将向你讲解这种方法的使用,下面就拣选的步骤:(1) 得到鼠标单击的窗口坐标;(2) 进入拣选模式;(3) 重新定义投影矩阵,使只有鼠标附近的模型被渲染;(4) 绘制场景,使用所有的图元进行拣选操作;(5) 退出拣选模式,识别出哪原创 2013-02-27 17:05:00 · 968 阅读 · 0 评论 -
视景体裁剪课程---视景体形状
在这个章节中我们将在OpenGL应用程序中引进视景体的形状。它是使用函数gluPerspective来定义透视投影,然后使用gluLookAt函数来定义相机的位置。首先,让我们回味一下这些函数的参数(都是float类型):1. gluPerspective(fovy, ratio, nearDist, farDist)2. gluLookAt(px, py, pz, lx, ly, l翻译 2013-08-20 22:13:47 · 1570 阅读 · 0 评论 -
几何方法--实现
几何方法--实现一个用来实现视景体的功能的类已经在下面呈现出来了。注意下面的代码并没有任何方面的优化,它仅仅只是用来伴随本课程出现的。这个类包含六个平面的数组,加上其他变量比如说视景体的八个顶点和相机的定义参数。平面只是用来裁剪操作,但是保存变量对我们的调试有用并且可视化的目的。类的头文件如下:class FrustumG {private: enum {翻译 2013-08-22 16:12:06 · 846 阅读 · 0 评论 -
GLSL 1.2教程-管线概述
在发展过程中,下面的图是一个(非常)简化图的管道阶段和数据,在他们旅行。虽然极其简化但它足以呈现着色器编程的一些重要的概念。在本节内固定管道阶段被代替。注意,这个管道是一个抽象的,不一定包含任何特定实现的步骤。顶点变换在这里一个顶点是一组属性,如它的位置在空间、以及它的颜色,法线、纹理坐标、还有其他。对这个阶段的输入是每个顶点属性。一些操作的固定功能在这个阶段是:1.翻译 2013-08-11 13:42:49 · 1198 阅读 · 0 评论 -
GLSL核心课程---聚光灯
聚光灯局限于点光源,例如,光源光线仅仅发射限制于一个方向。我们经常使用一个椎体来定义这个限制,但是其他形状同样也是可能的。下面的图展示了一个聚光灯椎体形状和相关数据:1. 位置:就是椎体的顶点(sp);2. 聚光灯方向:椎体轴定义的方向向量(sd);3. 截止角:椎体的光圈。在这里我们将假设是从方向向量到椎体边缘的角度()。顶点着色器跟点光源一样。它是在片段着色器中翻译 2013-08-11 12:25:57 · 1413 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-09-15 11:05:24 · 388 阅读 · 0 评论