
OpenGL
文章平均质量分 86
playbar
这个作者很懒,什么都没留下…
展开
-
OpenGL ES着色语言关键字使用
varying修饰符只能用在float, vec2, vec3, vec4, mat2, mat3, mat4和包含这些类型元素的数组上,不能用于修饰结构体。uniform修饰符可以和任意基本数据类型一起使用,或者包含基本数据类型元素的数组和结构体。attribute修饰符只能修饰float, vec2, vec3, vec4,mat2,mat3,mat4。attribut原创 2012-08-09 10:36:55 · 2661 阅读 · 0 评论 -
GLSE 语句和结构体
OpenGL ES着色器语言的程序块基本构成如下:语句和声明函数定义选择(if-else)迭代(for, while, do-while)跳跃(discard, return, break, continue)1函数定义 着色器是由一系列全局声明和函数定义组成的。函数声明规范如下: // prototype原创 2012-08-17 10:40:26 · 2439 阅读 · 0 评论 -
GLSL 内建函数
OpenGL ES着色语言为标量和向量操作定义了一套内建便利函数。有些内建函数可以用在多个类型的着色器中,有些是针对固定硬件的,所以这部分只能用在某个特定的着色器上。 内建函数基本上可以分为一下三类:(1)它们使用一些简便的方式提供必要的硬件功能,如材质贴图。这些函数单独通过着色器是无法模拟出来的。(2)它们展示了一些可以常简单的写入的繁琐操作(clamp, mix等),但原创 2012-08-17 10:50:54 · 117006 阅读 · 4 评论 -
GLSL 逐像素的光照
逐像素的方向光(Directional Light per Pixel)这一节将把前面的shader代码改为逐像素计算的方向光。我们需要将工作按照两个shader拆分,以确定哪些是需要逐像素操作的。首先看看每个顶点接收到的信息:•法线•半向量•光源方向我们需要将法线变换到视点空间然后归一化。我们还需要将半向量和光源方向也归一化,不过它们已经位于视点空间中了。这些归一化之后的原创 2012-08-16 11:12:04 · 3155 阅读 · 1 评论 -
判断点在多边形内的多种写法
再经典不过的算法了: // 功能:判断点是否在多边形内 // 方法:求解通过该点的水平线与多边形各边的交点 // 结论:单边交点为奇数,成立! //参数: // POINT p 指定的某个点 // LPPOINT ptPolygon 多边形的各个顶点坐标(首末点可以不一致) // int nCount 多边形定点的个数 BOOL PtInPolygon (POI原创 2012-09-05 16:50:42 · 32015 阅读 · 5 评论 -
GLSL 纹理贴图
简单的纹理贴图(Simple Texture)为了在GLSL中应用纹理,我们需要访问每个顶点的纹理坐标。GLSL中提供了一些属性变量,每个纹理单元一个:attribute vec4 gl_MultiTexCoord0;attribute vec4 gl_MultiTexCoord1;attribute vec4 gl_MultiTexCoord2;attribute vec原创 2012-08-16 11:20:36 · 15159 阅读 · 2 评论 -
iphone opengl环境搭建
最近开发游戏引擎,现在window平台完成opengl的功能开发,目前进展到移植到iphone平台上,y原创 2014-09-20 22:25:33 · 1240 阅读 · 0 评论 -
OpenGL中的FBO
第一篇,FBO --- Framebuffer ObjectFBO这个名字应该记住,同时还得记住VBO,PBO——这些算得上OpenGL的高级技术了,但是可以说,用处很广。从拓展到即将的核心,证明了它们的价值。这里我主要讲讲FBO(因为最近只用到FBO嘛嘿),全名Frame Buffer Object,目前主要用于离屏渲染技术。不知道是否有人曾经对D3D的RenderTarge原创 2014-10-13 22:53:52 · 3271 阅读 · 1 评论 -
OpenGL纹理映射总结
1.创建纹理对象,并为他指定一个纹理.2.确定纹理如何应用到每个像素上.3.启用纹理贴图4.绘制场景,提供纹理和几何坐标过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应,大小不同,所以需要设置过滤项目.允许我们进行插值或者匀和,指定放大缩小的函数.glTexParameter*(),使用过滤模式GL_NEAREST那么纹理单位最邻近的将被使用,GL_LIN原创 2014-10-22 14:21:22 · 3583 阅读 · 0 评论 -
OpenGL纹理
物体表面通常并不是具有简单颜色的平滑面,而是有着花纹图案等丰富细节的。计算机三维图形通过给面贴纹理来表现表面细节。OpenGL默认设置是关闭贴纹理的,所以必须先用命令打开纹理计算。前面提到过,可以给面指定材质来影响面上各点最终的颜色。能不能同时使用材质和纹理呢?当然是可以的,OpenGL允许你用glTexEnv(GL_TEXTUREN_ENV,GL_TEXTURE_ENV_MODE原创 2014-10-22 14:28:48 · 6414 阅读 · 0 评论 -
glCompressedTexImage2D 压缩纹理
NameglCompressedTexImage2D — 指明一个二维的压缩纹理图像C Specificationvoid glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,原创 2014-11-07 09:52:49 · 13003 阅读 · 1 评论 -
glBlendFunc函数
混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的物体,再绘制红色玻璃。在绘制红色玻璃的时候,利用“混合”功能,把将要绘制上去的红色和原来的绿色进行混合,于是得到一种新的颜色,看上去就好像玻璃是半透明的。要使用OpenG原创 2015-06-03 12:05:58 · 2020 阅读 · 1 评论 -
opengl shader 绘制心形
顶点着色器uniform mat4 uMVPMatrix; //总变换矩阵attribute vec3 aPosition; //顶点位置attribute vec2 aTexCoor; //顶点纹理坐标varying vec2 vTextureCoord; //用于传递给片元着色器的变量varying vec2 vPosition;void main()原创 2016-03-26 17:50:09 · 3665 阅读 · 2 评论 -
GLSL 内建变量
有些OpenGL ES操作在顶点处理器和片元处理器之间有特定的功能,有些在片元处理器之后又特定的功能,着色器通过内建变量同这些固定功能进行通信。 在OpenGL ES中,内建特殊变量部分来自顶点着色器的输出变量,部分来自于片元着色器的输入变量和输出变量。不同于用户定义的varying变量,内建特殊变量不用在顶点语言和片元语言之间保持严格的一对一对应。相反,两个语言各有自己的一套变原创 2012-08-17 10:42:02 · 18487 阅读 · 1 评论 -
GLSL shder的简单示例
GLSL的Hello World这一节中包含一个最基本的shader,它提供如下功能:顶点变换然后使用单一的颜色渲染图元。顶点shader前面已经说过,顶点shader负责完成顶点变换。这里将按照固定功能的方程完成顶点变换。固定功能流水线中一个顶点通过模型视图矩阵以及投影矩阵进行变换,使用如下公式:vTrans = projection * modelview *incomin原创 2012-08-16 10:48:31 · 3185 阅读 · 0 评论 -
OpenGL ES着色器语言之变量和数据类型
所有变量和函数在使用前必须声明。变量和函数名是标识符。 没有默认类型,所有变量和函数声明必须包含一个声明类型以及可选的修饰符。变量在声明的时候首先要标明类型,后边可以跟多个变量,之间用逗号隔开。很多情况下,变量在声明的时候可以使用等号“=”进行初始化。 用户定义类型可以使用struct,在结构体中所有变量类型都必须是OpenGL ES着色器语言定义的关键字。Op原创 2012-08-09 10:34:22 · 25828 阅读 · 2 评论 -
OpenGL ES着色器语言之操作数
5.1操作数OpenGL ES着色器语言包含如下操作符.5.2数组下标 数组元素通过数组下标操作符([ ])进行访问.这是操作数组的唯一操作符,举个访问数组元素的例子: diffuseColor += lightIntensity[3] * NdotL;5.3函数调用 如果一个函数有返原创 2012-08-09 10:42:57 · 3396 阅读 · 0 评论 -
glBlendFunc()的参数
OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜 色。(也可以不是相加,新版本的OpenGL可以设置运算方式,包括加、减、取两者中较大的、取两者中较小的、逻辑运算等,但我们这里为了简单起见,不讨 论这个了)下面用数学公式来表达一下这个运算方式。假设源颜色的四个分量(指红色,绿色,蓝色,原创 2012-05-31 10:43:12 · 1888 阅读 · 0 评论 -
egl gles2.0开发
在android中,java层需要创建surface,class MobileViewGLES extends GLSurfaceView implements Callback{ public void surfaceCreated(SurfaceHolder holder) { Log.e("MobileViewGLES", "surfaceCrea原创 2012-05-18 17:13:55 · 16803 阅读 · 1 评论 -
OpenGL中位图的操作
1、 BMP文件格式简单介绍BMP文件是一种像素文件,它保存了一幅图象中所有的像素。这种文件格式可以保存单色位图、16色或256色索引模式像素图、24位真彩色图象,每种模式种单一像素的大小分别为1/8字节,1/2字节,1字节和3字节。目前最常见的是256色BMP和24位色BMP。这种文件格式还定义了像素保存的几种方法,包括不压缩、RLE压缩等。常见的BMP文件大多是不压缩的。这原创 2012-04-13 09:09:13 · 3346 阅读 · 0 评论 -
OpenGL ES着色器语言之着色
OpenGL ES着色语言是两种紧密关联的语言。这些语言用来在OpenGL ES处理管线的可编程处理器创建着色器。 在本文档中,除非另外说明,一个语言功能适用于所有语言,并且通用用法将把他们当做一个语言来看待。特定语言将指出它们的目标处理器:顶点(vertext)或片元(fragment)。任何被着色器使用的OpenGL ES状态值都会自动地被跟踪并且作用于着色器上。这个自动状态跟踪机制允许应原创 2012-08-09 10:28:58 · 4643 阅读 · 0 评论 -
GLSL 图形流水线
流水线概述下图描述了一个简化的图形处理流水线,虽然简略但仍然可以展示着色器编程(shader programming)的一些重要概念。一个固定流水线包括如下功能:顶点变换(Vertex Transformation)这里一个顶点是一个信息集合,包括空间中的位置、顶点的颜色、法线、纹理坐标等。这一阶段的输入是独立的顶点信息,固定功能流水线在这一阶段通常进行如下工作原创 2012-08-16 10:21:08 · 2922 阅读 · 0 评论 -
GLSL 在OpenGL中使用GLSL
设置GLSL这一节讲述在OpenGL中配置GLSL,假设你已经写好了顶点shader和像素shader。如果你还没有准备好,可以从如下网址获得相关内容:http://www.3dshaders.com/home/http://www.opengl.org/sdk/tools/ShaderDesigner/http://developer.amd.com/archiv原创 2012-08-16 10:34:07 · 12230 阅读 · 2 评论 -
GLSL 在OpenGL中向shader传递信息
引言一个OpenGL程序可以用多种方式和shader通信。注意这种通信是单向的,因为shader的输出只能是渲染到某些目标,比如颜色和深度缓存。OpenGL的部分状态可以被shader访问,因此程序改变OpenGL某些状态就可以与shader进行通信了。例如一个程序想把光的颜色传给shader,可以直接调用OpenGL接口,就像使用固定功能流水线时做的那样。不过,使用OpenGL状态并原创 2012-08-16 10:42:11 · 27542 阅读 · 6 评论 -
GLSL 卡通着色
引言卡通着色可能是最简单的非真实模式shader。它使用很少的颜色,通常是几种色调(tone),因此不同色调之间是突变的效果。下图显示的就是我们试图达到的效果:茶壶上的色调是通过角度的余弦值选择的,这个角度是指光线和面的法线之间的夹角角度。如果法线和光的夹角比较小,我们使用较亮的色调,随着夹角变大,逐步使用更暗的色调。换句话说,角度余弦值将决定色调的强度。在本教程中,我们先介绍原创 2012-08-16 10:54:32 · 2387 阅读 · 0 评论 -
GLSL 逐顶点的光照
引言在OpenGL中有三种类型的光:方向光(directional)、点光(point)、聚光(spotlight)。本教程将从方向光讲起,首先我们将使用GLSL来模仿OpenGL中的光。我们将向shader中逐渐添加环境光、散射光和高光效果。后面的教程中我们将使用逐像素光照以获得更好的效果。接下来我们将实现逐像素的点光和聚光。这些内容与方向光很相近,大部分代码都是通用原创 2012-08-16 11:04:49 · 3018 阅读 · 0 评论 -
GLSL 其他说明
法线矩阵在很多顶点shader中都用到了gl_NormalMatrix。这里将介绍这个矩阵是什么,以及它的作用。大部分计算是在视图空间内完成的,主要原因是光照的运算要放在这个空间内,否则一些依赖观察点坐标的效果,比如镜面反射光就很难实现。所以我们需要将法线变换到视图空间。变换一个顶点到视图空间的方法如下:vertexEyeSpace = gl_ModelViewMatrix *原创 2012-08-16 11:26:11 · 2674 阅读 · 0 评论 -
glsurfaceview 使用skia
在java 层,使用glsurfaceview,创建opengl 环境,在 public void onSurfaceCreated(GL10 gl, EGLConfig config)函数中,创建GrContext和CurRenderTarget,如下void SkiaApp::windowChanged(int width,int height){LOGD("%s:(%d,%d原创 2015-08-18 18:02:50 · 2682 阅读 · 0 评论