OpenGL学习
yangyong0717
这个作者很懒,什么都没留下…
展开
-
OpenGL实现Bezier曲线
Bezier曲线的形状是通过一组多边折线(特征多边形)的各顶点唯一地定义出来的。在这组顶点中:(1)只有第一个顶点和最后一个顶点在曲线上;(2)其余的顶点则用于定义曲线的导数、阶次和形状;(3)第一条边和最后一条边则表示了曲线在两端点处的切线方向。// BezierCurve.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include原创 2017-05-02 16:32:12 · 2890 阅读 · 0 评论 -
关于OpenGL中深度截取(GL_DEPTH_CLAMP)的讲解
关于透视投影视椎体,如下图所示在视觉坐标系下,片段fragment的深度放缩到0-1之间的一个有限范围内。片段的深度值为0的话则表明它与近裁截面重合相交(如果是真实世界的话就是刺入你的眼睛),1代表物体的最远距离(但不是无限远)。为了消除远裁截面并在任意距离上绘制图形,我们需要在深度缓存depth buffer中储存任意大的深度值–当然这是计算机不可能实现的。那么假设,我们原创 2017-10-23 19:04:19 · 6917 阅读 · 1 评论 -
对OpenGL中模板缓冲区解释
前段时间转载了一篇关于OpenGL的博客,但是并没有对里面的内容理解的很透彻,今天通过实例重新讲解一下。关于模板缓冲区的基础知识参考上篇博客http://blog.csdn.net/yangyong0717/article/details/78313725。对于模板缓冲区的值是如何设置的是一个关键问题,主要是借助于glStencilFuncSeparate()和glStencilOpSep原创 2017-10-22 22:12:53 · 568 阅读 · 0 评论 -
OpenGL中关于模板缓冲区的详细解释
模板缓冲区的概念,至今依然不是特别理解,这篇博客写的很好,相信对大家的理解也有帮助。模板缓存是深度缓存的扩充,当你需要控制哪一个像素需要被渲染,哪一个像素需要被忽略时,模板缓存能够为你提供更多的方法。和深度缓存一样,模板缓存存储了所有像素的模板值,但是这次你必须手动控制这些值如何改变。记住,如果一个像素深度测试失败了的话,模板测试将不会再决定该像素是否绘制,而像素会反过来影响模板缓存中的值。为了转载 2017-10-22 21:53:38 · 4081 阅读 · 0 评论 -
OpenGL关于glStencilFuncSeparate()和glStencilFunc()函数的区别
glStencilFunc()函数是OpenGL提供的对模板缓冲区进行控制的命令,这是OpenGL2.0之前使用的函数,其函数原型为void glStencilFunc(GLenum func, GLint ref, GLuint mask).func指定比较函数,它指定了测试通过的条件,其取值可以是:(为方便表示,参考值为refValue, 缓冲区值bufferValue)G原创 2017-10-22 16:58:51 · 2109 阅读 · 0 评论 -
OpenGL中关于帧缓冲区的理解
《OpenGL超级宝典》中对帧缓冲区的解释比较简单,文中说一个OpenGL窗口的表面被称作“帧缓冲区”。又查了一些资料可以更加容易理解一些,帧缓冲区(显存):是由像素组成的二维数组,每一个存储单元对应屏幕上的一个像素,整个帧缓冲对应一帧图像即当前屏幕画面。帧缓冲通常包括:颜色缓冲,深度缓冲,模板缓冲和累积缓冲。这些缓冲区可能是在一块内存区域,也可能单独分开,看硬件。原创 2017-10-18 15:56:40 · 6204 阅读 · 0 评论 -
《OpenGL超级宝典》第五版第六章着色器的程序运行结果都是白色的问题?
今天运行《OpenGL超级宝典》着色器的第一个例子ShadedTriangle,发现运行窗口总是提示无法加载顶点程序,所以运行之后图形都是白色的,没有进行任何的渲染。去网上没有看到合适的解决办法,后来自己仔细查看了错误。发现只需要把自己写的顶点程序复制到项目目录下面即可得到正确的运行结果。可以和之前加载贴图.tga文件放置的位置相同,例如我建立的ShadedTriangle工程,我把Shade原创 2017-10-05 19:20:11 · 626 阅读 · 0 评论 -
关于OpenGL中几种纹理环绕模式的理解
最近在学习OpenGL的纹理坐标时,有一个疑惑就是纹理坐标范围大于1的概念一直没有搞懂是什么意思,通过这篇博客下面的图示,明白了坐标大于1就是说在场景中的模型,大于原来贴图的尺寸时候的情况。下面是对这几个环绕模式的具体解释,原博客的地址:http://blog.csdn.net/l_andy/article/details/53405758在纹理映射中,纹理坐标的范围为[0.0转载 2017-10-10 21:13:46 · 7695 阅读 · 1 评论 -
《OpenGL超级宝典》中第七章TextureRect示例程序,RenderScene()函数解析
这是蓝宝书第七章上面的TextureRect示例的部分源代码,刚开始阅读时候存在很多疑惑,慢慢的结合前面的知识,逐渐的知道这些代码的原理,对其中的部分代码做一些注解仅供理解参考,这里只对RenderScene(),场景渲染函数进行注解:void RenderScene(void){//基于时间的旋转动画static CStopWatchrotTimer;原创 2017-10-08 14:46:44 · 2617 阅读 · 0 评论 -
OpenGL中矩阵堆栈为什么要进行多次的压栈和出栈操作?
对于OpenGL中矩阵堆栈的频繁压栈和出栈操作,一直不是很理解。今天搜集了一些资料,对频繁压栈、出栈的操作有了一定的了解。OpenGL的矩阵堆栈类GLMatrixStack, 这个矩阵堆栈在初始化时候包含了单位矩阵。它的应用场合主要是在场景对象分层方式中,将一个对象或者多个对象相对于前一个对象进行绘制时。对于这句话的含义后面举例加以解释。在这种由多对象组成的复杂场景的3D空间,利用矩阵堆栈进行原创 2017-10-07 20:17:54 · 2905 阅读 · 0 评论 -
《OpenGL超级宝典(第五版)》 在 VS2010 / VS2015中 的配置方法 +
注意:今天终于把OpenGL超级宝典+VS2010环境彻底配置好了,浪费了很多无用功。但是有一点是下面转载的这篇博文个人感觉是在网上看到的所有配置环境中最详细的教程。由于在配置过程中并不像博主介绍的那样顺利,比如我在第一步配置freeglut的时候就出现了很多问题,本想记下来过程,但是中间没有截图,很后悔。曾经一度怀疑自己安装的VS是否有问题,或者下载的源文件是否有问题。但是请大家在配置的时候根据原创 2017-05-18 21:01:28 · 972 阅读 · 0 评论 -
OpenGL的SetupRC()函数解析
最近在学习OpenGL,经常遇到SetupRC( )函数,查了下《OpenGL超级宝典》,该函数名的全称为:SetupRenderingContex( )。故名思议,该函数的作用主要是对GLUT的渲染环境进行设置,实际上,这个函数是一个自定义的函数,对OpenGL没有什么影响。但是为书写规范化,对于OpenGL的初始化操作一般都会放在这个函数里面。在任何OpenGL函数起作用之前必须建立一原创 2017-09-16 16:51:55 · 2144 阅读 · 0 评论 -
OpenGL中的glutInitDisplayMode()函数的理解
OpenGL中的glutInitDisplayMode()函数的作用主要是在创建窗口的时候,指定其显示模式的类型。函数原型为:void glutInitDisplayMode(unsigned int mode);mode参数是一个GLUT库里预定义的可能的布尔组合。你使用mode去指定颜色模式,数量和缓冲区类型。其中大部分情况下使用的参数为:GLUT_DOUBLE | GLUT_原创 2017-09-16 16:01:18 · 9918 阅读 · 0 评论 -
OpenGL状态机的概念理解
原文地址:http://blog.csdn.net/pizi0475/article/details/5388084/今天看了关于OpenGL状态机这一概念比较不错的文章,分享在这里前一段时间里,论坛有位朋友问什么是状态机。按我的理解,状态机就是一种存在于理论中的机器,它具有以下的特点:1. 它有记忆的能力,能够记住自己当前的状态。2. 它可以接收输入,根据输入的内容和自己转载 2017-09-23 13:39:04 · 4415 阅读 · 0 评论 -
OpenGL中对混合操作的实例演示
对于混合的基本概念这里不仔细讲,可参考这篇博客http://blog.csdn.net/augusdi/article/details/23769375。这里直接通过代码,测试效果:#include #include #include #include const int n = 100;const GLfloat R = 0.5f;const GLfloat Pi = 3.原创 2017-10-23 21:21:04 · 378 阅读 · 0 评论