关闭
当前搜索:

OpenGL(二十) 投影 的shader实现

简单说来 投影 是将一个纹理贴到另一个模型或图片上的技术。在现实生活中,皮影戏就是根据这个原理产生的。原理参照皮影戏,我们需要一个投射器,一个采样图和一个成像模型。这样一想,跟OpenGL(十九)阴影 通过ShadowMap的shader实现中提到的投影模型是差不多的。不同之处在于,不需要采集深度图,当进行到第二步时,也不需要比较深度。而是直接取出采样图中texcoord对应的颜色进行混合。实现依......
阅读(107) 评论(0)

OpenGL(十九) 阴影 通过ShadowMap的shader实现

阴影 可以使角色与地面的关系更加明确。本文主要介绍如何通过 ShadowMap 在OpenGL中实现 阴影 。核心原理Shadow Map的基本思想:通过LightView画一张DepthMap,然后Camera View渲场景的时候,把Pixel坐标变换到Light Space,比较Depth即可(Pixel的Depth大于Shadow Map的Depth即在阴影区)。也可以直接是ScreenS......
阅读(77) 评论(0)

OpenGL(十八)Gamma校正 色域 与 HDR

通常来说,在不同设备上看到的颜色是不同的。其中最常提及的概念是高动态光照渲染(High-Dynamic Range,简称 HDR )。它可以使图像在亮度的表现上更丰富。这篇文章讨论设备颜色和校正的相关概念。眼前的黑不是黑人眼对亮度的敏感程度不是线性的,因此我们我们更容易看到亮的区域。上图中左侧是线性渐变的图,右侧是我们实际看到的。在显示器上,输入线性信号就会显示出右图的效果。为了解决这个问题,在显......
阅读(128) 评论(0)

OpenGL(十七)Photoshop blend算法 与 图层混合模式

使用混合模式可以制作丰富多彩的效果。而OpenGL中可以轻松开启这种模式,但更关键的是图形算法。本文参照 Photoshop blend算法 ,介绍如何通过shader,在OpenGL中实现混合效果。OpenGL中开启混合在OpenGL中可以开启混合模式:glEnable( GL_BLEND ); // 启用混合 glDisable( GL_BLEND ); // 禁用关闭混合 统一说法,参......
阅读(67) 评论(0)

OpenGL(十六)通过 卷积 实现: 边缘混合 、 Blur 和 高斯模糊

卷积卷积 (Convolution)是两个变量在某范围内相乘后求和的结果。卷积计算通常用来处理边缘的颜色或整体的混色。作为采样之后的处理,可以供很多功能使用。因此在图像效果处理时,它还是应用比较广泛的。区域缩暗通过最简单的像素采样,可以将图片中整体的锐利度降低,通过在一个3x3的区域取颜色,并取出区域中的最小色值,可以实现整体变暗,并且边界会像内缩一段距离。void main() { ve...
阅读(174) 评论(0)

OpenGL(十五)雾效 的 shader 实现

雾效 可以表现出一个线性的颜色变化,常用于烘托场景气氛。这种效果的实现原理并不复杂,本文着重讨论如何通过shader编写完成雾效的实现。核心原理雾效 的核心在于:计算视点与物体之间的距离,然后根据一个衰减公式进行颜色混合。常规的算法有线性衰减,指数衰减,指数幂衰减。线性雾效使用线性差值衰减,即可达到这种 雾效 。示意图如下:对应shader如下://vs varying vec3 V_Normal...
阅读(81) 评论(0)

OpenGL(十四)环境反射 环境折射 的shader实现

在上一节我们讲解了如何制作天空盒,本篇文章介绍它的一个衍生功能——在物体上叠加 环境反射 。核心原理核心很简单,在天空盒中,视线照射到天空盒上的区域即需要绘制的部分。在环境反射中,需要绘制的区域变成了视线在物体表面的反射光线,反射光线照射到天空盒的位置即要绘制的部分。环境反射按照上面的说法,将法线方向传入shader中,具体编写如下://vs attribute vec3 pos; attribu...
阅读(106) 评论(0)

Unit3d开发 (二十一) 更改Apk的smali 排查Java层问题

有时候我们会被系统层诡异的Bug绊翻了车,不得已的情况下,需要更改Android代码。有些类我们能拿到源码,一切好说,但更多情况下,是引擎内或SDK中的jar文件,我们无法获得源码。面对这种情况,我的思路是.........
阅读(500) 评论(0)

OpenGL(十三) 天空盒 的 shader 实现

天空盒 的使用可以使用户感觉所处一个封闭的世界环境,使得游戏更加真实。本文主要介绍如何通过OpenGL和GLSL来实现天空盒。天空盒 的核心原理其实并不复杂,它相当于在视线外套上一个盒子。盒子有6个面,分别使用6张可以拼接在一起的图片。从原理上讲,通过比较视线的xyz,可以找到方向......
阅读(1310) 评论(0)

OpenGL(十二) 光源类型 平行光 、 点光源 、 聚光灯 的实现

常规的 光源类型 有三种。最简单的自然是平行光。稍复杂些的为点光源,最复杂的为聚光灯。总体说来,在可编程管线中原理是一样的。在OpenGL代码中传入必要的参数,在shader中进行相关的计算绘制出效果。本文分别介绍三种效果的shader实现。...
阅读(1544) 评论(0)

OpenGL(十一) 可编程管线 基础光照 的实现

在OpenGL中创建 基础光照 ,主要的工作将模型中的法线信息和法线空间运算矩阵传入到shader中。另一方面,LightDir,ViewDir通常是在shader中从引擎参数获取的,为了简化光照模型的实现,这里我们可以在shader中写死......
阅读(2397) 评论(0)

OpenGL(十) 手机不可用特性 ComputeShader GeometryShader ...

由于当前市场上还存在大量低端Android机器,它们只支持到OpenGL ES2.0,因此 手机不可用特性 有很多。对于一些3.0 甚至4.0的特性,只能看看热闹了。当然基本了解还是需要的,万一哪天都升级到3.0了呢。由于我现在也使用Unity3d开发,文中也有Unity3d的相关指标一起参考......
阅读(1617) 评论(0)

OpenGL(九)使用 FrameBufferObject

在OpenGL中所有的图形,都会绘制到 FrameBufferObject 上。如果想使用界面的做分屏渲染,或需要屏幕图像制成贴图以备后期处理,就需要用到 FrameBufferObject 技术,这种方式也被称为 RTT (Render to Texture)。...
阅读(2616) 评论(78)

Dota2 AI 开发 (二)定制AI阵容 配置英雄出装

在Dota2 AI 开发(一)环境配置 中介绍了如何搭建 Dota2 AI 的开发环境,但这是远远不够的,在这篇文章中,主要介绍Dota2中AI的常规控制方式,并介绍如何在人机比赛中配置一个裸跳刀的Sven。...
阅读(3593) 评论(1)

OpenGL(八)使用 subroutine 切换可编程管线

Subroutine 功能是在OpenGL 4.0 版本里才增加的,因此对于各种Android手机,这个功能基本跪了。如果你发现你的程序报错:ARB_shader_subroutine,那就说明当前显卡不支持。不过大体思路可以了解一下,因为思路类似的功能有其他的实现方式。...
阅读(1981) 评论(0)

OpenGL(七) GeometryInstancing 几何体实例化

几何体实例化( GeometryInstancing ),是一种用于大批量重复物件渲染的GPU技术,以降低客户端和显卡端数据传输量,所谓的“一次提交,多次渲染”。简单说来就是合并DrawCall。通过接口可以绘制多次几何体,这样就可以实现合并。...
阅读(1069) 评论(0)

OpenGL(六)使用 VAO 打包指令 优化代码结构

通常说来当创建好vbo的数据结构,还需要设置 glVertexAttribPointer 等一系列属性,在OpenGL中提供了 VAO (Vertex Array Object)它相当于同时记录了数据在哪里和数据是怎样分布。从实际应用的角度,它最重要的贡献就是简化了代码。...
阅读(1083) 评论(0)

OpenGL(五) 指令错误 检测的封装方法

OpenGL的指令,返回值均为void,因此没法通过返回值来判断 指令错误 。为了能够第一时间发现问题,需要加入一个封装来监测是否有指令调用失败。当OpenGL调用出现错误时,会将错误的ID储存到一个`GLenum`中。这个值可以通过glGetError()获取到。...
阅读(1335) 评论(0)

Unity3d开发(二十) OnMouse_产生GC 的问题修复

最近发现一个特别奇怪的现象,在游戏运行时,每帧 OnMouse_产生GC ,大小是0.6KB的整数倍,比如1.2KB,1.8KB。解决方法 :具体Profiler效果如下图所示:经过比照发现这个问题与摄像机相关。由于是代码创建的摄像机组件,因此并未挂载.......
阅读(2313) 评论(1)

OpenGL(四)Shader错误 检测

由于shader不需要预编译,因此在OpenGL动态加载时会碰到 shader错误 。因此需要区分错误属于C++代码还是shader代码。本文主要探讨如何封装检测 shader错误 的接口。在OpenGL中有方法能够获取到 shader错误 信息。...
阅读(2709) 评论(0)
246条 共13页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:2223901次
    • 积分:17950
    • 等级:
    • 排名:第628名
    • 原创:226篇
    • 转载:19篇
    • 译文:1篇
    • 评论:693条
    关于

    左手代码右手艺术 追求新浪潮。


    个人网站:blog.songyang.net


    开源项目:


    UIAP : Unity3D内购插件

    UExtend : Unity3D常用功能合集


    微信公众号:松阳论道



    微博:

    我写的书:


    实例妙解Cocos2d-x游戏开发
    博客专栏
    文章分类
    最新评论