OpenGL
林小竹
这个作者很懒,什么都没留下…
展开
-
OpenGL 各个shader的作用和区别
penGL4.0发布了Tessellation shader(Control + Evaluation shader)。到OpenGL4.* 为止,现在OpenGL已经支持了5种不同类型的shader。1.Vertex Shader,简称VS2.TESS Control Shader (D3D11 叫Hull shader),简称TCS3.TESS Evaluation Shader (D3D...转载 2018-07-12 11:01:15 · 4092 阅读 · 0 评论 -
OpenGL ES 三种类型修饰 uniform attribute varying
1.uniform变量uniform变量是外部application程序传递给(vertex和fragment)shader的变量。因此它是application通过函数glUniform**()函数赋值的。在(vertex和fragment)shader程序内部,uniform变量就像是C语言里面的常量(const ),它不能被shader程序修改。(shader只能用,不能改)转载 2017-08-29 10:04:13 · 349 阅读 · 0 评论 -
180度vr直播用,鱼眼视频展开到全景
对于180度VR的直播,一般来说低成本的做法是采用鱼眼镜头拍摄整个180度的视频。鱼眼镜头成像过程:不同的鱼眼镜头有不同的成像方式,我们采用的也是比较常用的等距投影模型。对于输入来说,由于镜头的成像范围,我们的输入是一部分的鱼眼图。输出我们希望是一个全景图,该图可以在带上vr头盔后以180度范围观看全景。也就是鱼眼到全景的转换转载 2017-08-14 15:50:23 · 3360 阅读 · 0 评论 -
RenderMonkey基本使用方法
http://www.cnblogs.com/mixiyou/archive/2009/10/05/1578208.html楔子: 差不多从年中开始由于工作需要,开始研究Direct3D,这是继大二开始自学DX开始,睽违了6年后再重新学习DX。虽然时间很久了,但是幸亏还是有点基础,所以上手还是比较顺利的。当然由于DX本身难度就比较大,再经过了一两个月的熟悉后,后来发现刚开始写转载 2017-08-03 17:11:54 · 1168 阅读 · 0 评论 -
Android OpenGLES2.0(十二)——FBO离屏渲染
之前的博客我们所做的示例都是直接渲染到屏幕上的,如果我们并不需要渲染到屏幕上,也就是离屏渲染,该怎么做呢?FBO离屏渲染是一个很好的选择。在这篇博客中,我们将以渲染摄像头数据为例,使用FBO进行离屏渲染。关于FBO离屏渲染所谓的FBO就是Frame Buffer Object。之前我们使用OpenGLES渲染,都是直接渲染到屏幕上,FBO可以让我们的渲染不渲染到屏幕上,而是渲染到离转载 2017-08-02 15:59:48 · 1671 阅读 · 0 评论 -
图像及其它坐标系
像素坐标系:如下图所示:像素坐标系u-v的原点为O0,横坐标u和纵坐标v分别是图像所在的行和列,在视觉处理库OpenCV中,u对应x,v对应y;图像坐标系:图像坐标系x-y的原点是O1,为像素坐标系的中点,如图所示:假设(u0,v0)代表O1在u-v坐标系下的坐标,dx和dy分别表示每个像素在横轴x和纵轴y转载 2017-08-08 09:31:24 · 280 阅读 · 0 评论 -
Android OpenGL es 纹理坐标设定与贴图规则
http://blog.csdn.net/cjkwin/article/details/6016224当opengl对一个四方形进行贴图时,会定义纹理贴图坐标,一串数组,相信初学openggl es者看到后会很头疼,不知道写得是什么东西。现在就将我的研究成果与大家分享下!当纹理映射启动后绘图时,你必须为OpenGL ES提供其他数据,即顶点数组中各顶点的纹理坐标。纹理坐标定义了图像的哪一部转载 2017-08-16 15:01:15 · 1227 阅读 · 0 评论 -
OpenGL/3D图形渲染管线
3D图形渲染管线 什么是渲染(Rendering) 渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景(如图1): 图1:Rendering什么是渲染管线 渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。一个流水线是一序列可以并行和按照固定顺转载 2017-08-29 10:49:07 · 1395 阅读 · 0 评论 -
opengl中将三维坐标转换到屏幕坐标
OpenGL的通过四个变换,得到的结果就是屏幕上的像素坐标。前三个变换(Model, View, Projection)都是4x4矩阵,操作对象是四维向量,所以需要把(x,y,z)补上w分量,变成(x,y,z,1)。然后把前三个变换的矩阵依次左乘到这个向量上,得到的四维向量做齐次除法(所有分量都除以w分量),然后用其中x和y分量再进行第四个变换(Viewport),就得到屏转载 2017-08-30 14:07:34 · 2362 阅读 · 0 评论 -
opengles中的Tessellation(曲面细分)
从opengles3.2开始,支持了一项新的特性,Tessellation Shader,这是一个新的shader,发生在顶点处理阶段,曲面细分可以在显卡上动态生成新的顶点和面,这在支持gles3.2的设备上,可以用来表现模型的lod,我们不用传输大量的顶点数据给显卡,而使显卡能够根据一定规则自动生成细节层次更多的顶点。也有应用结合高度图生成细节更加复杂的模型,因为不用再cpu这边准备高面...转载 2018-07-12 09:35:40 · 2726 阅读 · 0 评论 -
OpenGL学习脚印:几何着色器(geometry shader)
写在前面 一直以来我们使用了顶点着色器(vertex shader)和片元着色器(fragment shader),实际上OpenGL还提供了一个可选的几何着色器(geometry shader)。几何着色器位于顶点和片元着色器之间,如果没有使用时,则顶点着色器输出到片元着色器,在使用几何着色器后,顶点着色器输出组成一个基础图元的顶点信息到几何着色器,经过几何着色器处理后,再输出到片元着色器。几何...转载 2018-07-12 10:12:24 · 470 阅读 · 0 评论 -
法线贴图
教程 26法线贴图原文: http://ogldev.atspace.co.uk/www/tutorial26/tutorial26.htmlCSDN完整版专栏: http://blog.csdn.net/column/details/13062.html背景之前的我们的光线着色器类已经可以达到很不错的效果了,光线效果通过插值计算遍布到整个模型表面,使整个场景看上去比较真实,但这个效果还可以进行更...转载 2018-07-13 10:28:56 · 1191 阅读 · 0 评论 -
opengl shader内置变量和函数
1、uint CreateShader(enum type) : 创建空的shader object; type: VERTEX_SHADER,2、void ShaderSource(uint shader, sizeicount, const **string, const int *length):加载shader源码进shader object;可能多个字符串3、转载 2017-07-31 13:45:58 · 2328 阅读 · 0 评论 -
OpenGL: gluPerspective和gluLookAt的关系
看了Opengl的相关程序,发现有些东西还是特别迷茫,尤其是gluLookAt的函数做啥用的,而gluPerspective又有什么功能.在网上查看到了这篇: 终于搞明白gluPerspective和gluLookAt的关系了(zz)http://cowboy.1988.blog.163.com/blog/static/751057982010101574732212/转载 2017-07-31 11:31:45 · 379 阅读 · 0 评论 -
LearnOpenGL学习笔记6:坐标
一、 坐标系统将坐标转换为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分步,也就是类似于流水线那样子,实现的,在流水线里面我们在将对象转换到屏幕空间之前会先将其转换到多个坐标系统(Coordinate System)。将对象的坐标转换到几个过渡坐标系(Intermediate Coordinate System)的优点在于,在这些特定的坐标系统中进行一些操作或运算更加方便和容易,这一点转载 2017-04-25 11:43:08 · 1160 阅读 · 0 评论 -
OpenGL学习笔记1:环境配置和基本流程
虽然游戏引擎能够满足游戏开发的绝大部分需求,但是如果仅仅会使用引擎而不懂得游戏引擎的运作原理和图形处理原理,势必会沦为引擎的奴隶。为了让自己不仅能够知其然,还要能知其所以然,决定从OpenGL开始研究图形学和游戏引擎开发技术。前面还有很长的路,慢慢来。环境配置和往常一样,还没开始研究OpenGL就开始在网上找OpenGL的库,结果找了好久都没找到最新的库,官网上也都是文档(转载 2017-04-25 11:30:51 · 249 阅读 · 0 评论 -
OpenGL学习笔记2:绘制和混合
绘制OpenGL几何图元在使用OpenGL在计算机屏幕上进行绘图时不需要从一个点的绘制开始。我们关心的不是物理屏幕坐标和像素,而是视景体中的位置坐标,我们将从7个由定义的几何图元来开始绘制实心几何图形:图元描述GL_POINTS每个顶点在屏幕上都是一个单独的点GL_LINES每一对顶点定义了一个线段转载 2017-04-25 11:32:35 · 715 阅读 · 0 评论 -
OpenGL学习笔记3:变换,矩阵,更多对象
变换进行图形开发,3D图形数学基础是必不可少,限于其专业性,OpenGL笔记里不做详细赘述。但是对相关术语及其在OpenGL对应的内容还是需要一定的了解。基础向量点乘 两个(三分量)单位向量之间的点乘运算将得到一个标量(只有一个值),它表示两个向量之间的夹角。要进行这种运算,这两个向量必须为单位长度,而返回的结果将在-1.0到1.0之间。这个数字实际上就是这两个转载 2017-04-25 11:34:13 · 549 阅读 · 0 评论 -
OpenGL学习笔记6:高级纹理知识
矩形纹理纹理目标为GL_TEXTURE_RECTANGLE。 首选,矩形纹理不能进行Mip贴图; 然后,矩形纹理不是标准化的(实际上是对像素寻址) 最后,纹理坐标不能重复,并且不支持纹理压缩加载矩形纹理bool LoadTGATextureRect(const char *szFileName, GLenum minFilter, GLenum magFilter,转载 2017-04-25 11:37:27 · 294 阅读 · 0 评论 -
OpenGL学习笔记5:着色器2
初识着色器语言变量和数据类型可用的数据类型只有4种:有符号整数,无符号整数,浮点数,布尔值。 OpenGL着色语言中没有指针和字符串或字符。返回值可以为void。向量类型所有4种基本数据类型都可以存储在二维、三维或者四维向量中: OpenGL着色语言向量数据类型类型描述vec2,vec3,vec42转载 2017-04-25 11:36:07 · 783 阅读 · 0 评论 -
OpenGL学习笔记4:纹理
原始图像数据像素包装图像数据在内存中很少以紧密包装的形式存在。在许多硬件平台上,处于性能上的考虑,一幅图像的每一行都应该从一种特定字节对齐地址开始。绝大多数编译器会自动把变量和缓冲区放置在一个针对该架构对齐优化的地址上。 例如一个包含3个分量的rgb图像,每个分量存储在一个字节中,如果图像有199个像素,那么一行需要597个像素。如果硬件本身的体系结构是4字节排列,那么图像每一转载 2017-04-25 11:29:06 · 659 阅读 · 0 评论 -
opengl设置了光源之后,画图的颜色设置为什么不生效了?怎么改?
图形显示出来的颜色就是光源的颜色,glColor3f设置颜色压根没用。应该如何操作才能显示后头设置的画图颜色呢?如果在光照下希望模型的颜色可以起作用,需要启动颜色材料模式:glEnable( GL_COLOR_MATERIAL );然后还需要设置材料属性:glLightModeli( GL_FRONT, GL_AMBIENT_AND_DIFFUSE );// 这个表示模型的原创 2017-05-24 09:33:25 · 3047 阅读 · 0 评论 -
LearnOpenGL学习笔记7:摄像机
一、 摄像机1. 摄像机/观察空间定义一个摄像机,我们需要一个摄像机在世界空间中的位置、观察的方向、一个指向它的右测的向量以及一个指向它上方的向量。 摄像机的位置 获取摄像机位置很简单。摄像机位置简单来说就是世界空间中代表摄像机位置的向量。我们把摄像机位置设置为前面教程中的那个相同的位置:glm::vec3 cameraPos = glm::vec3(0.0f, 0.0转载 2017-04-25 11:44:19 · 908 阅读 · 0 评论 -
LearnOpenGL学习笔记8:光照基础
一、 颜色当我们把光源的颜色与物体的颜色相乘,所得到的就是这个物体所反射该光源的颜色(也就是我们感知到的颜色)。二、 光照基础光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个元素组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。这些光照元素看转载 2017-04-25 11:47:22 · 494 阅读 · 0 评论 -
LearnOpenGL学习笔记9:材质
一、 材质通过为每个元素指定一个颜色,我们已经对物体的颜色输出有了精密的控制。现在把一个镜面高光元素添加到这三个颜色里,这是我们需要的所有材质属性:#version 330 corestruct Material{ vec3 ambient; vec3 diffuse; vec3 specular; float shininess;};unifo转载 2017-04-25 11:48:14 · 296 阅读 · 0 评论 -
opengl显示结果保存为图片
#includebool writeBMP(const char filename[], unsigned char* data, unsigned int w, unsigned int h){std::ofstream out_file;/** 检查data */if (!data){std::cerr out_file.close();return原创 2017-07-05 09:45:23 · 1641 阅读 · 1 评论 -
Android/windows 顶点对应方法(shader)
下面的方式windows和安卓下都可以使用纹理的渲染有了纹理对象且存储了图像数据后, 就可以拿来进行纹理渲染了. 使用时, 直接再次绑定GL_TEXTURE_2D即可, 表示接下来读取GL_TEXTURE_2D时要使用的是_textureID纹理对象中的数据:// 第一行和第三行不是严格必须的,默认使用GL_TEXTURE0作为当前激活的纹理单元glActiveTextu原创 2017-07-13 13:07:33 · 245 阅读 · 0 评论 -
[OpenGL]纹理贴图实现 总结
实现步骤第一步:设置所需要的OpenGL环境设置上下文环境删除已经存在的渲染的缓存设置颜色缓存设置帧缓存清除缓存设置窗口大小开启功能编译shander使用program获取shader中的属性和uniform索引第二步:绘制图片获取图片数据并且的到对应的纹理id指定纹理,绑定纹理开始对图形进行渲染(启用顶点属性数组纹理坐标转载 2017-07-12 19:36:15 · 2913 阅读 · 0 评论 -
error C2381: “exit” : 重定义;__declspec(noreturn) 不同
解决办法一、#if defined(_WIN32)# ifndef GLUT_BUILDING_LIBextern _CRTIMP void __cdecl exit(int);上面是glut.h中对exit的使用,意思是如果没有定义宏GLUT_BUILDING_LIB,就使用它的exit,那我们就在项目的属性——预处理器 里定义这个宏,这样就不执行glu转载 2017-06-01 09:09:59 · 1531 阅读 · 0 评论 -
Opengl基本知识点(面试用)持续更新。。。
1. GLSL语言,概念,工作原理,及如何传递数据的参考learnopengl着色器着色器(shader)是运行在GPU上的小程序,类似于C语言,构造一个着色器在其开头必须声明版本。本质上来说,着色器是一个把输入转化为输出的程序。着色器定义了in和out等关键字实现数据的输入和输出,从而实现数据的交流。如果从一个着色器向另一个着色器发送数据,则必须在发送方声明一个输出,在接收方声明一个转载 2017-04-26 11:23:42 · 8853 阅读 · 0 评论 -
OpenGl面试题(持续更新)
1.什么是model,view,project矩阵?世界矩阵(World Matrix)、视图矩阵(View Matrix)以及投影矩阵(Projection Matirx); 世界矩阵确定一个统一的世界坐标,用于组织独立的物体形成一个完整的场景; 视图矩阵就是我们能看到的那部分场景,由虚拟摄像机负责拍摄; 投影矩阵就是3维物体的平面影射.把三维场景在一个二维的平面上显示.转载 2017-04-26 10:59:16 · 6027 阅读 · 0 评论 -
opengl:绘制球体
数学基础球面参数方程球面的参数曲线可以用球坐标表示,引入参数u,v,其中v是球面点与原点的连线与z轴正向的夹角,u表示连线在xy平面的投影与x轴正向的夹角,如下图所示:则球面参数方程可以表示为:球面法向量已知球面的参数方程以后,很容易求得给定点的法向量,分别对u和v方向求偏导数,然后对两个所得向量进行叉积即可: 实现细节已转载 2017-05-03 09:53:32 · 6855 阅读 · 2 评论