`

GLSL语言学习笔记

 
阅读更多

1、什么是渲染管线?

    渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。

 

2、管线的大致工作流程

    顶点着色器中处理所有定点的位置、颜色,传递给下一阶段组装成精灵、线条和三角形,并根据视截体的可视范围来进行裁剪(抛弃不可见的元素),最后由片段着色器进行光栅化处理,光栅化的片段数量会远远高于顶点的数量。

 

3、着色器的数据类型

    ⑴:顶点着色器

        attribute //用户自定义的,包含每个定点的属性数据,如定点位置、定点颜色等

        uniform //用户自定义的,服务于所有定点的一个统一的值,如变换矩阵、光源位置等

        varying //用户自定义的,用于向片段着色器输出数据

        gl_Position //用户自定义的,用户接受顶点着色器的运算输出结果

        

attribute float size;
attribute vec3 customColor;
attribute float time;
uniform float globalTime; 

varying vec3 vColor;
varying float fAlpha;

void main() {
	
	vColor = customColor;
		
	vec3 pos = position;
		
	float animTime = min(1.4, max(1.0, globalTime - time));
		
	vec3 animated = vec3( pos.x * animTime, pos.y * animTime, pos.z * animTime );
		
	vec4 mvPosition = modelViewMatrix * vec4( animated, 1.0 );
		
	fAlpha = 1.0; + 
		
	gl_PointSize = size * ( 300.0 / length( mvPosition.xyz ) );
	
	gl_Position = projectionMatrix * mvPosition;
		
}

 

 

 

 

     ⑵:片段着色器

        varying//用户自定义的,用于接收由片段着色器发送的数据

        uniform//用户自定义的,服务于所有片段的一个恒定的值,如颜色等

        sampler//用户自定义的,用户纹理操作的一种特殊类型

        gl_FragColor//系统内置变量,用于接收片段着色器的输出结果

        precision mediump float;//精度限定符,声明于片段着色器的起始位置

        

precision mediump float;    // lowp, mediump, highp 
uniform vec3 color;
uniform sampler2D texture;
	
varying vec3 vColor;
varying float fAlpha;
	
void main() {
	
	float depth = gl_FragCoord.z / gl_FragCoord.w;
	float near = 100.0;
	float far = 400.0;
	float fog = 0.0 + smoothstep( near, far, depth );
	
	vec4 outColor = texture2D( texture, gl_PointCoord );
	if ( outColor.a < 0.24 ) discard; 
	
	gl_FragColor = vec4( color * vColor, fAlpha ); 
	gl_FragColor = gl_FragColor * outColor; 
	gl_FragColor = mix( gl_FragColor, vec4( vec3(0.0,0.0,0.0), gl_FragColor.w ), fog );
	
}

 

        

 

 

分享到:
评论

相关推荐

    shader学习笔记1

    本篇Shader学习笔记主要介绍了Shader的基础概念、Hello World示例、Uniform关键字以及用算法进行绘画的方法。 1. Shader基础: - **什么是Shader**:Shader是运行在GPU上的小程序,用于处理图形渲染,随着分辨率...

    从0开始编写minecraft光影包(0)GLSL,坐标系,光影包结构介绍1

    在本文中,我们将探讨如何从零开始编写Minecraft光影包,首先需要了解的基础是GLSL语言、坐标系以及光影包的基本结构。GLSL(OpenGL Shading Language)是一种着色器语言,用于定义和控制游戏中的图形渲染效果,尤其...

    webgl学习笔记初学记录00

    它是WebGL学习笔记的重点,特别是在初学者阶段。WebGL的核心是光栅化引擎,它能够根据程序员编写的代码在GPU上绘制点、线和三角形,进而构建复杂的3D场景。 在WebGL中,所有图形渲染都是通过GPU来执行的,这需要...

    OpenGL 学习笔记整理

    GLSL(OpenGL Shading Language)是为图形编程设计的专用语言,用于编写这些着色器。着色器的渲染流程包括从顶点数据开始,通过一系列处理,最终由片段着色器生成屏幕上的像素。在这个过程中,属性和uniform变量被...

    OpenGLES20学习笔记

    - **Shader语言支持**:OpenGL ES 2.0引入了GLSL ES(OpenGL Shading Language for Embedded Systems),允许开发者编写自定义的顶点和片段着色器,实现更复杂的图形效果。 - **状态机管理**:状态改变立即生效,...

    BlogApp:志哥博客《OpenGL.ES在Android上的简单实践》《NDK学习笔记》专栏demo工程

    **NDK学习笔记** NDK(Native Development Kit)是Android开发的一部分,它允许开发者使用C和C++编写原生代码。这在需要高性能计算、利用硬件加速或复用现有C/C++库时特别有用。例如,游戏引擎、音频/视频处理库...

    现代OpenGL+Qt:smooth和flat着色模式

    博文“现代OpenGL+Qt学习笔记之九:smooth和flat着色模式”应该包含了如何在Qt项目中实现这两种着色模式的具体代码示例。通过阅读这篇博文,你可以了解到如何编写GLSL着色器,并在Qt中集成它们来演示不同的着色效果...

    OpenGL初学笔记

    在"OpenGL学习笔记.doc"中,可能包含以下内容: 1. **基本概念**:介绍OpenGL的架构、管线模型以及主要的数据类型和函数。 2. **环境设置**:详述如何在Visual C++ 6.0中创建OpenGL项目,设置链接器选项,以及如何...

    GPU图像绘制管线.pdf

    描述中提到的《GPU编程与CG语言之阳春白雪下里巴人》可能是这本书的名称,而文档是该书关于GPU绘制管线篇章的学习笔记。同时指出若有错误需指正,表明本文档可能是一个初稿或者学习过程中产生的文档。另外,标签“CG...

    openGL入门参考资料

    在配合的文章《OpenGL学习笔记——JNI篇》中,作者通过JNI(Java Native Interface)来演示如何在Java程序中调用OpenGL进行图形绘制。JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互,这在需要高...

    西南交通大学 计算机图形学 期末复习笔记.zip

    8. **图形API**:熟悉OpenGL或DirectX等图形编程接口,理解顶点数组、顶点缓冲、着色器语言(GLSL或HLSL)的使用。 9. **图形算法**:学习基本的图形算法,如Dijkstra算法、Floyd-Warshall算法在路径查找中的应用,...

    OpenGL ES 2.0

    开发者需要学习GLSL语法,以便在着色器中定义变量、函数和控制流,实现自定义的图形处理逻辑。 在Android游戏开发中,OpenGL ES 2.0通常与EGL(Embedded GL)一起使用,以管理上下文和表面,以及处理多窗口和多配置...

    opengl.rar_GDE_learn opengl_run

    "Learn of OpenGL"表明这是一个关于学习OpenGL的资源集合,可能是教程、代码示例或者学习笔记。"run under GDE"则表示这些学习资料是在图形开发环境(GDE)中运行的,GDE可能是Generic Debug Environment或其他类似...

    Android OpenGL ES 2.0学习书籍.rar

    最后,了解如何与硬件加速的OpenGLES API交互,以及熟悉GLSL语言(OpenGL Shading Language),是成为OpenGL ES 2.0专家的必经之路。通过编写高效、可读性强的着色器代码,可以创造出各种复杂的视觉效果,实现令人...

    Barrage_OpenGLES游戏源码

    2. **着色语言GLSL**:学习编写顶点和片段着色器,控制光照、颜色和纹理映射。 3. **游戏循环和帧率控制**:掌握如何实现一个高效的游戏循环,确保游戏稳定运行,同时处理好帧率同步。 4. **对象渲染和动画**:...

    qix.rar_opengl_qix

    在学习或分析这个项目时,你需要熟悉OpenGL的基本概念和API,包括顶点坐标、颜色、模型视图投影矩阵、着色器语言GLSL等。你还需要了解如何在C语言环境中集成OpenGL库,并且熟悉Visual Studio或类似的IDE的使用。此外...

    OPENGL.rar_visual c

    在高级主题中,OpenGL的现代版本(OpenGL 3.0及以上)引入了着色器语言GLSL,它允许开发者编写自定义的顶点和片段着色器,实现更复杂的图形效果。这涉及到向GPU发送程序,控制像素的渲染方式,以及进行几何变换和...

    WebGl_Coursera:我的Coursera作业和笔记

    WebGL相关的课程通常会涵盖基本概念、几何、变换、光照、纹理映射、着色器语言(GLSL)等方面,帮助学习者掌握创建3D Web应用所需的技能。 【作业和笔记】是学习过程中重要的组成部分。通过完成作业,学生可以实践...

    WebGL基于Canvas噪音线条特效.zip

    WebGL的核心是着色器语言(GLSL),这是一种用于定义顶点和片段着色器的编程语言,用于计算屏幕上每个像素的颜色。 在这个特效中,"噪音线条"可能指的是使用了Perlin噪音或者Simplex噪音来生成随机但有规律的纹理...

    C#版的OpenGL

    标题提到的"C#版的OpenGL"实际上是指将OpenGL接口与C#编程语言相结合的库,使得C#程序员也能利用OpenGL的强大功能。 描述中的“可以在C#中引用,还是比较好用的”表明这个库已经被适配并优化,适合C#开发者使用,...

Global site tag (gtag.js) - Google Analytics