OpenGL_shader入门教程

OpenGL_shader入门教程
OpenGL_shader入门教程

Chapter 7. OpenGL Shading 语言的 API

ARB_shader_objects, ARB_vertex_shader,和 ARB_fragment_shader引入了新的API和功能用来支持使用OpenGL Shading Language写shader。这个API集合在本书中被称为OPENGL SHADING LANGUAGE API。为了检测一个OpenGL的实现是不是支持OpenGL Shading语言,可以通过调用参数为GL_EXTENSIONS的函数glGetString来获得一个字符串,检查在返回的字符串里是否含有"GL_ARB_shader_objects",

"GL_ARB_vertex_shader",和"GL_ARB_fragment_shader"这三个子字符串来判断。这种机制也可以用来确定是系统是支持的OpenGL Shading 语言的版本号。如果返回的扩展字符串里含有"GL_ARB_shading_language_100",那么OPENGL SHADING LANGUAGE API支持1.00版本的OpenGL Shading语言。

Appendix B.

在这章里,我们将学习新加入的OpenGL函数(entry points),它们用来创建、加载、编译、和连接shader,这些函数还被用来给shader传递一般的顶点属性和uniform变量。支持shader的OpenGL 入口函数详细列表见附录B。

在本章的最后,我们将介绍用来创建和使用第6章里的brick shader的程序代码。如果你已经等不及了,那么请先去看7.11节,然后再回来学习这些API的细节。

下面是创建和使用OpenGL shader的简介:

?用glCreateShaderObjectARB创建一个或多个(空的)shader对象

?调用glShaderSourceARB给shader提供源代码。

?为每个shader调用glCompileShaderARB来编译它。

?调用glCreateProgramObjectARB创建一个program对象.

?通过调用glAttachObjectARB把所有的shader对象和program对象关联起来。

?调用glLinkProgramARB把program对象连接起来。

?调用glUseProgramObjectARB把可执行的program设置成作为OpenGL当前状态的一部分。

?如果shader使用了uniform变量。如果想要对这些uniform变量进行处理,需要通过调用glLinkProgramARB和glGetUniformLocationARB查询得到该变量,然后再通过glUniformARB来赋值。

?如果vertex shader自定义了attribute变量,有两种方式指定该属性对应的索引值,首先可以通过在链接shader前调用glBindAttribLocationARB来设

定,也可以由OpenGL自动指定,在连接后可以通过调用函数

glGetAttribLocationARB来查询得到使用的索引值。顶点的一般属性

(Generic vertex attributes)也有两种方式送入vertex shader,第一种是通过调用glVertexAttribARB,第二种是一起调用

glVertexAttribPointerARB 和 glEnableVertexArrayPointer,通过这些指令就可以绘制顶点数组了。

7.1 建立Shader对象

OpenGL Shading 语言的API在设计的时候刻意的模仿了C/C++应用程序的开发。第一步是创建源代码,接下来代码必须通过编译,再将不同的编译模块连接到一起。最后,连接后得到的代码就可以在目标处理器上运行。

为了让OpenGL支持高级shading语言这个概念,必须提供某些结构能用来分别保存源代码、编译后的代码和可执行代码。我们定义了两个由OpenGL来管理的数据结构或者说是对象来解决这个问题。这些对象满足了存储的需求,我们为这些对象定义了一些操作,让它们有能力进行源代码的指定、编译、连接以及执行。当一个对象被创建的后,OpenGL返回这个对象的句柄(handle)。我们可以通过这个句柄来操作和查询这个对象的参数等。

使用可编程硬件的第一步是创建一个shader对象。这将会创建一个由OpenGL 管理的数据结构,用它来保存shander的源代码。用如下代码创建一个shader:

GLhandleARB glCreateShaderObjectARB(GLenum shaderType)

创建一个空的shader对象,返回它的句柄。一个shader对象用来保存和维护这个shader的源代码字符串。shaderType用来指示这个被创建的shader的类型。可以两种不同类型的shader。类型为GL_VERTEX_SHADER_ARB的shader在可编程的顶点处理器上运行的,它可以取代OpenGL固定功能的顶点处理过程。类型为

GL_FRAGMENT_SHADER_ARB的shader是在可编程的片段处理器运行,可以取代OpenGL 固定功能的片段处理过程。

创建后,shader 对象的GL_OBJECT_TYPE_ARB被设置为 GL_SHADER_OBJECT_ARB,而GL_OBJECT_SUBTYPE_ARB则根据shaderTypede的类型被设置成

GL_VERTEX_SHADER_ARB或者是 GL_FRAGMENT_SHADER_ARB。

当shader对象被创建后,表示源代码内容的字符串必须提供给shader。Shader 的源代码以一个字符串数组的形式存储。定义一个shader的源代码的命令如下:

void glShaderSourceARB(GLhandleARB shader,

GLuint nstrings,

const GLcharARB **strings,

GLint *lengths)

把shader里的代码设置成由strings变量定义的一组保存代码的字符串变量,则先前存储的代码将完全被覆盖。数组里字符串的个数由nstrings指定。如果lengths为NULL,则默认所有的字符串都以NULL结尾。如果lengths不为NULL,则它指向一个包含每个字符串长度的数组。Lengths数组里的每一个元素都包含了对应字符串的长度(字符串的null字符不计算在内)或者一个小于0的数来表示字符串以null结尾。源代码在这时候并不进行处理和分析,仅仅是简单的把代码拷贝到

shader对象里。应用程序在这个函数返回后可以立即修改或者释放这个源代码的拷贝。

一次可以提交多个字符串的优点包括:

?可以用多个一样的片段来组织源代码。

?可以在不同shader间共享前缀字符串(类似于头文件)。

?可以共享一些#define值来控制编译过程

?可以用来包含自定义或者第三方的函数库。

7.2 Compiling Shader Objects编译shader对象。

在源代码被加载到shader对象里后,源代码必须经过编译来检查其正确性。编译的结果依然作为shader的一部分保存在shader对象里,直到下一次编译操作发生,或者直到shader对象被删除。用来编译shader的命令如下:

void glCompileShaderARB(GLhandleARB shader)

这条指令编译已经保存在shader里的源代码。

编译的状态将作为shader对象状态的一部分保存在shader里。如果shader没有错误,被正确编译,那么这个值被设置为GL_TRUE,反之为GL_FALSE。它可以通过给glGetObjectParamenterARB传递一个GL_OBJECT_COMPILE_STATUS_ARB来查询。

如果一个shader有词法、语法或者语义错误的话,将不能正确编译。无论编译的结果是不是成功,编译的信息都包含在信息日志里面,这个日志可以通过调用函数glGetInfoLogARB取得。

OpenGL Shading 语言的编译规则对于不同的shader类型是不同的。所以必须考虑需要编译的是一个vertex shader还是一个fragment shader。

编译操作的信息可以通过调用glGetInfoLogARB(在7.5节中介绍)来获取。但是不应该根据此信息判断编译是否成功。如果shader对象编译成功,输出信息可能为空也可能包含编译操作的信息。如果编译不成功,那么信息日志中会包含发生的词法、语法和语义错误,然后是警告信息以及其他编译器认为相关的信息。

glCompileShaderARB不需要等到编译结束就可以将控制权返回给应用程序。其它需要依赖于编译结束的函数(比如:glLinkProgramARB)将会阻塞直到编译结束。如果你要保证在程序继续运行前,编译能正确结束的话,应该调用glGetObjectParameterARB来查询编译结果的正确性。查询操作将会阻塞直到编译结束,状态变量有效为止。

7.3 Linking and Using Shaders连接和使用shader。

每个shader对象都是独立编译的。为了创建一个program,应用程序需要一个机制来指定一个列表,里面列出了将要连接到一起的所有shader。我们需要先创建一个program对象并且把所有需要连接到这个program的shader都连接到一起,创建工作才能完成。

创建一个program对象使用下列命令:

GLhandleARB glCreateProgramObjectARB(void)

创建一个空的program对象返回它的句柄, shader 对象可以连接到program 对象上,它能够把所有的shader对象连接起来从而构成一个应用程序。同时它也提供了一种检查这些shader对象之间兼容性的手段(比如,检查vertex shader和fragment shader之间的兼容性)。如果一个program不再需要一个shader对象时,shader对象可以从program对象上detach掉。

在定义好一个program对象以后,shader对象就可以连接(attach)到它上面。Attach只是给那些将要连接到一起的shader创建一个引用。这是应用程序用来创建一个program的方法。Shader对象用以下方法attach到program上:

void glAttachObjectARB(GLhandleARB program,

GLhandleARB shader)

该命令把shader对象的shader句柄 (注:函数声明中的那个形参GLhandleARB shader)连接到program对象的program句柄(注:函数声明中的那个形参GLhandleARB program)上。这个动作指明了要连接到program上的shader。

连接到program上的shader的个数没有明确的限制。不管一个shader是不是已经连接到program对象上,所有对一个shader有效的操作都可以施加在其上。 在一个shader对象的源代码被加载前,或者在编译前都可以将其attach到一个program上,也允许一个shader对象被连接到多个program上。换句话说。glAttachObjectARB只是简单的指定了将要连接到一起的shader对象的集合。

为了创建一个有效的program,所有连接到program对象的shader对象都应该被正确编译,Program对象本身也必须被连接起来。连接操作将会给uniform变量分配空间,完成各个独立编译的shader对象间的相互引用工作。检查确保vertex shader和fragment shader之间的兼容性。用以下命令可以连接program:

void glLinkProgramARB(GLhandleARB program)

把句柄为program的program对象连接起来。如果有subtype的类型为

GL_VERTEX_SHADER_ARB 的shader对象连接到program上,它们将会被连接到一起创建一个可以运行在可编程vertex processor上的可执行代码。如果有subtype

的类型为 GL_FRAGMENT_SHADER_ARB 的shader对象连接到program上,它们将会被连接到一起,创建一个可以运行在可编程fragment processor上的可执行代码。

连接操作的状态将被保存成program对象状态的一部分。如果shader没有错误,被正确编译,那么这个值被设置为GL_TRUE,反之为GL_FALSE。它可以通过给glGetObjectParamenterARB传递一个GL_OBJECT_LINK_STATUS_ARB参数来查询。

如果连接成功,并且指定的program对象已经被前面最近的一个指令glUseProgramObjectARB设置成当前激活的应许,则将生成shader的可执行代码并将其设置成当前OpenGL渲染状态的一部分。

连接成功后,所有program自定义uniform变量(见7.7节)将被初始化为0,program对象的每一个激活的uniform变量都将被分配一个位置(location),这可以通过glGetUniformLocationARB来查询。但是,这时候每一个自定义的attribute 变量(见7.6节)还没有被绑定到一个普通的attribute索引上。

如果一个program包含了GL_VERTEX_SHADER_ARB类型的shader对象,但是没有包含GL_FRAGMENT_SHADER_ARB类型的shader对象。vertex shader将自动和固定管线功能的fragmetn处理例程连接到一起。同样的。如果一个program只包含了

GL_FRAGMENT_SHADER_ARB类型的shader对象而没有包含GL_VERTEX_SHADER_ARB类型的shader对象。Fragment shader隐含的将和固定管线功能的vertex处理管道连接。

连接一个program对象将可能因为下列原因而失败:

?attribute变量数目超过了OpenGL实现所能支持的最大数目。

?uniform变量数目超过了OpenGL实现所能支持的最大数目。

?Vertex shader或者fragment shader没有main函数。

?在fragment shader里声明的varying变量在vertex shader里没有声明成相同的类型(或者根本就没有声明)。

?函数或者变量名字无法解析。

?共享的全局变量被定义成不同的类型或者被初始化成不同的值。

?有一个或者多个连接到program的shader对象没有被成功的编译。

如果连接操作成功,将产生一个program对象。它可能包含一个可被vertex处理器运行的可执行程序,一个可被fragment处理器运行的可执行程序,或者两个都有。不管编译是不是成功,以前的信息和可执行代码都将丢失。当连接操作结束后,应用程序可以修改那些被连接到program上的shader对象,可以进行编译,也可以detach shader对象或者attach新的shader对象到program对象上。这些操作都不会影响到program对象的属性,直到下一个连接操作为止。

连接操作的信息可以通过调用glGetInfoLogARB(在第7.5章描述)来获得。如果连接操作成功,信息日志可能为空,也可能包含连接操作的信息。如果连接不成功,信息日志里包含发生的连接错误的信息,以及其它编译器有选择提供的警告信息。

glLinkProgramARB不需要等到连接操作完成才返回控制权给应用程序。任何依赖于连接结果的命令将会阻塞直到连接操作结束。如果你想保证在继续执行前连接操作完成的话,可以通过调用glGetObjectParameterARB来查询连接是不是成功。这个查询动作将被阻塞直到连接操作完成,状态变量有效为止。

当连接操作成功的完成后,它包含的可执行代码可能需要被作为当前渲染状态的一部分安装上去。要完成这个操作,使用下面命令:

void glUseProgramObjectARB(GLhandleARB program)

将program对象当作当前渲染状态的一部分设置起来。

如果一个program对象有一个或多个subtype类型为GL_VERTEX_SHADER_ARB的shader对象并且成功的被编译和连接,那么它将在顶点处理器上运行。同样,如果一个program对象有一个或多个subtype类型为GL_FRAGMENT_SHADER_ARB的shader 对象并且成功的被编译和连接,那么它将在fragment处理器上运行。

如果一个program对象包含有类型为GL_VERTEX_SHADER_ARB的shader对象但是没有包含类型为GL_FRAGMENT_SHADER_ARB的shader对象,vertex处理器的可执行代码将被安装但是fragment的处理过程将使用固定功能管线的处理算法。同理,如果一个program对象包含有类型为GL_FRAGMENT_SHADER_ARB的shader对象但是没有包含类型为GL_VERTEX_SHADER_ARB的shader对象,fragment处理器的可执行代码将被安装但是vertex处理过程将使用固定管线功能的vertex处理器。如果program对象为0,那么可编程处理器将被关闭,vertex和fragment处理过程都将使用固定功能管线的版本。

成功的安装了一个可编程处理功能后, OpenGL相应的固定功能(fixed functionality)处理管线将被关闭。特别的,如果vertex处理器的可执行代码被安装,那么将关闭在第4.1节中介绍的OpenGL的固定功能,类似的,如果一个可执行的fragment处理器的代码被安装,那么将关闭在第4.2节中介绍的OpenGL的固定功能。

如果一个program对象正在使用,应用程序可以随意的改变attach到这个program对象上的shader对象、也可以编译它们、或者连接新的shader对象到program对象上、detach一个已有的shader对象、删除任何一个已经attach的shader对象,甚至删除program对象本身。任何这样的操作都不会影响到作为当前状态一部分的可执行代码。但是,如果重新连接一个正在使用的program对象的话,如果连接成功,将会把连接内容作为当前渲染状态的一部分安装上来。当一个program正在被使用的时候,标准的OpenGL调用同样会影响到那些被program关闭了的固定功能管道的状态。

7.4 Cleaning Up清理

如果对象不再需要了,它们应该被删除掉,可以通过以下命令完成: void glDeleteObjectARB(GLhandleARB object)

这个指令清理掉了指定对象占用的存储空间(memory,这里可能是显存),让和句柄关联的、由OpenGL管理的object(函数里形参)指定的对象无效。这个函数的作用和glCreateShaderObjectARB或者glCreateProgramObjectARB相反。

如果一个被删除的shader对象已经attach到一个program对象上,它将被标记为需要删除,但是直到它不再连接到任何一个渲染环境(rendering contex 也就是RC)的program对象上其才会真正被删除(例如,它必须从任何一个attach了它本身的地方detach后才会被删除)。如果一个program对象正在作为当前渲染状态的一部分被使用,它也将被做上删除的标记,但是直到它不在作为任何一个渲染环境的当前状态的一部分的时候,才会被真正删除。如一个被删除的program对象上attach了其它的shader对象,那么这些shader对象将自动被detach掉但是不会自动被删除,除非这些对象已经在先前调用glDeleteObjectARB的时候被做上了删除标记。

要知道一个对象是不是标记为删除,可以用对象和常数

GL_OBJECT_DELETE_STATUS_ARB做参数来调用glGetObjectParameterARB得到。

如果一个shader对象不再需要attach到program对象上,它可以通过以下命令来detach:

void glDetachObjectARB(GLhandleARB program, GLhandleARB shader)

把一个名字为shader(这个shader表示这个函数的参数)的shader对象从一个名字为program(这个program表示这个函数的参数)的program对象上detach 掉,这个命令的作用和glAttachObjectARB相反。

还有一个编程技巧可能非常有用,它可以让整个过程变的更有条理:在把一个shader对象attach到program对象以后,立刻就把它删除掉。我们知道,在这个时候,该shader并不会被真正删除,如果它不再被引用到的时候只是做上一个删除的标记。在以后只要应用程序只要删除program对象就可以了删除这个shader对象,所有这时所有attach到program对象上的shader对象都会被自动detach掉。而且它们此时被标记为删除,在需要的时候,它们会被自动清理掉。

7.5 Query Functions查询函数。

OpenGL Shading语言的API 包含多个可以查询对象状态的函数。为了获得对象的类型、对象的子类型、对象的运算的状态、连接到这个对象上的对象个数、激活的attribute变量的数目(见第7.6节)、激活的uniform变量个数(见第7.7节)或者是由对象维护的一个字符串的长度,可以使用以下的任何一个命令:

void glGetObjectParameterfvARB (GLhandleARB object,

GLenum pname,

GLfloat *params)

void glGetObjectParameterivARB (GLhandleARB object,

GLenum pname,

GLint *params)

在params形参里返回的是所查询对象的参数。这个函数可以用来返回一个对象

的信息。在表7.1里,左边是pname的值,对应的函数查询操作的解释在右边:

表7.1. 查询使用的参数

参数具体功能

GL_OBJECT_TYPE_ARB .

根据对象的句柄(参数object)是一个

program对象还是一个shader对象。

Params分别返回

GL_PROGRAM_OBJECT_ARB 或者

GL_SHADER_OBJECT_ARB。

GL_OBJECT_SUBTYPE_ARB 根据对象的句柄(object参数)是一个

vertex shader还是fragment shader。

Params分别返回GL_VERTEX_SHADER_ARB

或者 GL_FRAGMENT_SHADER_ARB。

GL_OBJECT_DELETE_STATUS_ARB 如果对象当前被标记为删除,params返

回1或者1.0f。否则返回0或者0.0f。GL_OBJECT_COMPILE_STATUS_ARB 如果对象最近的一次编译操作成功。

Params返回1或者1.0f。否则返回0或

者0.0f。

GL_OBJECT_LINK_STATUS_ARB 如果对象最近一次连接操作成功,

params返回1或者1.0f。否则返回0或

者0.0f。

GL_OBJECT_V ALIDATE_STATUS_ARB 如果最近对对象最近的一次操作是成功

的。Params返回1或者1.0f。否则返回

0或者0.0f。

表7.1. 查询使用的参数

参数具体功能

GL_OBJECT_INFO_LOG_LENGTH_ARB Params返回对象的信息日志中的字符串

长度(字符个数),其中包含了null结

束符在内。如果对象没有包含信息日志,

则返回0。

GL_OBJECT_ATTACHED_OBJECTS_ARB params返回attach到这个对象上的对

象个数。

GL_OBJECT_ACTIVE_ATTRIBUTES_ARB Params返回指定的program的处于激活

状态的attribute变量的个数。

GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_A RB Params返回指定program对象中的名字最长的那个激活的attribute变量的名字长度(包含null结束字符)。如果没有激活的attribute(注:原书为uniform变量,应该是作者的笔误)变量,则返回0或者0.0f。

GL_OBJECT_ACTIVE_UNIFORMS_ARB Params返回指定的program激活的

uniform变量的个数。

GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_AR B Params返回指定program对象中的名字最长的那个激活的uniform变量的名字长度(包含null结束字符)。如果没有激活的uniform变量,则返回0或者0.0f。

GL_OBJECT_SHADER_SOURCE_LENGTH_ARB Params返回把所有的代码串联在一起后

的shader代码字符串的长度,其中包含

null结束符。如果没有指定源代码,则

返回0或者0.0f。

Shader的当前代码可以通过如下函数调用从一个shader对象里取得:

void glGetShaderSourceARB(GLhandleARB shader

GLsizei maxLength,

GLsizei *length,

GLcharARB *source)

从由shader形参指定的shader对象里取得联在一起的源代码字符串。源代码字符串即是前面一次调用glShaderSourceARB指定的源代码字符串。返回的字符串以null结尾。

glGetShaderSourceARB返回的字符个数等于源代码所有的字符个数,最大到maxLength指定的字符数。实际返回的字符个数保存在length(注:原书为count,估计为笔误)中,不包括结束字符null。如果不需要实际返回的字符数,可以给这个变量传递一个NULL 指针。用来保存返回字符串的缓冲区的大小可以用glGetObjectParameterARB函数加

GL_OBJECT_SHADER_SOURCE_LENGTH_ARB参数调用来得到。

Shader的编译操作的信息将保存在shader对象的信息日志里。同样的,program 的连接信息也将保存在program对象的信息日志里。信息日志里包含了诊断信息和警告信息的字符串。在开发过程中,即使是编译和连接成功的情况下信息日志也十分的有用。一个应用程序不能假设不同的OpenGL 实现能产生相同的信息日志。从一个shader对象或者一个program对象里取回信息日志可以使用:

void glGetInfoLogARB(GLhandleARB object,

GLsizei maxLength,

GLsizei *length,

GLcharARB *infoLog)

从指定的OpenGL管理的对象中取得信息日志。Shader对象的信息日志在shader 被编译的时候改变。Program对象的信息日志在连接或者使其变为有效的时候改变。返回的字符串以null结尾。

glGetInfoLogARB返回的保存在infoLog的信息日志,字符个数等于日志的长度,但是最大到maxLength指定的字符数。实际返回的字符个数保存在length中,这里不包括结束字符null。如果不需要实际返回的字符数,可以给这个变量传递一个NULL指针。用来保存返回字符串的缓冲区的大小,可以通过调用参数为

GL_OBJECT_INFO_LOG_LENGTH_ARB的函数glGetObjectParameterARB获得。

信息日志是一个可能包含了诊断信息、警告信息、最后一次编译(对shader对象)或者是连接和激活program对象(对program对象)产生的信息。当一个shader 对象或者一个program对象创建的时候,信息日志的字符串长度为0。

因为要用用API来取回信息日志,所以要查询出信息日志的长度(信息日志字符串的字符个数),在分配了相应的缓冲区后,就可以调用glGetInfoLogARB来把信息日志放到分配的缓冲区里。如果你需要,可以把这些信息打印出来,清单7.1中列出的C函数就可以完成这个任务。

清单 7.1. 用来打印一个对象信息日志的C函数。

void printInfoLog(GLhandleARB obj)

{

int infologLength = 0;

int charsWritten = 0;

GLcharARB *infoLog;

printOpenGLError(); // 检查 OpenGL 错误

glGetObjectParameterivARB(obj, GL_OBJECT_INFO_LOG_LENGTH_ARB,

&infologLength);

printOpenGLError(); //检查 OpenGL 错误

if (infologLength > 0)

{

infoLog = (GLcharARB*)malloc(infologLength);

if (infoLog == NULL)

{

printf("ERROR: Could not allocate InfoLog buffer\n");

exit(1);

}

glGetInfoLogARB(obj, infologLength, &charsWritten, infoLog);

printf("InfoLog:\n%s\n\n", infoLog);

free(infoLog);

}

printOpenGLError(); //检查 OpenGL 错误

}

当前正在使用的program对象可以通过下面函数得到:

GLhandleARB glGetHandleARB(GLenum pname)

返回作为当前状态一部分的对象(通常是一个program对象)的句柄。参数pname 指定了需要查询的状态值。如果给它传递GL_PROGRAM_OBJECT_ARB,则返回作为当前渲染状态对应的program对象。

最后,可以使用如下命令来查询到连接到一个指定program上的shader对象列表:

void glGetAttachedObjectsARB(GLhandleARB program,

GLsizei maxCount,

GLsizei *count,

GLhandleARB *objects)

该函数返回连接到program对象上的shader对象句柄的列表。返回对象的个数等于连接到program对象上的shader对象的个数,但是该值小于等于maxCount指定的个

数。实际返回shader对象的个数保存在count变量中。如果不需要知道实际返回句柄的个数的话(比如,我们已经通过调用glGetObjectParameterARB知道有多少个shader对象连接到program上了),我们可以给count传递一个NULL指针。如果没有shader 对象返回,函数会把count置成0。实际连接到program对象上的shader对象的个数可以通过glGetObjectParameterARB加参数

GL_OBJECT_ATTACHED_OBJECTS_ARB获得。

7.6 Specifying Vertex Attributes指定顶点属性(Vertex Attribute)

给OpenGL传递数据的一种途径是通过调用glBegin,后面跟着一系列的glColor/glNormal/glVertex/等,最后以glEnd函数来作为结束。

这些函数在OpenGL可编程环境里仍然可以工作。以前,glVertex的调用意味着指定了一个顶点的属性并需要立即处理。而现在,当用glUseProgramObjectARB安装了一个vertex shader后,顶点数据将由vertex shader处理,而不是OpenGL

的固定功能管线。一个vertex shader可以通过以下内建变量访问传递给OpenGL

的标准顶点数据:

attribute vec4 gl_Color;

attribute vec4 gl_SecondaryColor;

attribute vec3 gl_Normal;

attribute vec4 gl_Vertex;

attribute vec4 gl_MultiTexCoord0;

attribute vec4 gl_MultiTexCoord1;

attribute vec4 gl_MultiTexCoord2;

. . .

attribute vec4 gl_FogCoord;

OpenGL这种一次指定一个顶点的方式非常简单有用。但是在现在的图形系统里,它不是一种向图形卡高效的传递数据的方式。我们应该尽可能的使用顶点数组(vertex array)的调用接口。这个接口允许你把顶点保存在一个数组里,并设置一个指针指向这个数组,这和一次发送一个顶点给OpenGL不同,你可以一次传输一组的图元。使用vertex buffer对象(VBOs),还可以把数据存放在图形卡里来达到最高的渲染性能。

使用顶点数组的接口在OpenGL可编程环境里也和以前一样工作。当一个顶点数组被传送到OpenGL里的时候,和一次指定一个vertex数据一样,顶点数组里的顶点也是一次一个的被处理。如果一个vertex shader被激活,每一个顶点是在vertex shader里被处理而不是传统的OpenGL固定管线。

另外,可编程性意味着应用程序不再局限于OpenGL定义的传统顶点属性了。也许我们还希望把其它附加的顶点属性传递给vertex shader。很容易想象到应用程序可能会给每个顶点传递一些特定数据,比如:切线(tangents)、温度、压力以及其他一些可能需要的数据。那么应用程序如何将这些非传统意义上的顶点属性传递给OpenGL并让vertex shader处理呢?

答案是OpenGL提供了少量的通用的空间来传递顶点属性(vertex attribute)。每个位置都用一个数字标记,每一个位置可以存放4个浮点分量(比如:一个vec4)。一个支持16个属性位置的OpenGL实现有一套从0到15的标记来标记这16个位置。应用程序可以用如下的函数中的一个来设置shader使用的顶点属性。

void glVertexAttrib{1|2|3|4}{s|f|d}ARB(GLuint index, TYPE v)

void glVertexAttrib{1|2|3}{s|f|d}vARB(GLuint index, const TYPE *v)

void glVertexAttrib4{b|s|i|f|d|ub|us|ui}vARB(GLuint index, const TYPE *v)

v指定的是数据,用来将数据传递给index指定的顶点属性。这些函数有最多3个后缀。第一个后缀可以是1,2,3或者是4,用来指定v 是包含几个分量。如果不提供第2个和第3个分量,它们默认值为0,而如果没有提供第4个分量。则默认为1。第2个后缀指出v的数据类型:byte(b) short (s), int (i), float (f), double (d), unsigned byte (ub), unsigned short (us), 或者 unsigned int (ui)。第三个后缀v是可选的,如果指定了v则表示参数v是一个指向数租的指针。

这一系列命令有对应的一系列规则来把数据转化为OpenGL内部表示的浮点格式。和你预想的一样,Float和double类型被映射为OpenGL内部的浮点值,整数则通过在左边增加小数位来转化为float类型。比如,一个值为27的byte ,int , short, unsigned byte, unsigned int,或者unsigned short类型的值将会变成一个为27.0的浮点数来满足OpenGL的计算需求。

另外一组入口函数可以用来给通用顶点属性(generic vertex attributes)指定单位化的值:

void glVertexAttrib4NubARB(GLuint index, TYPE v)

void glVertexAttrib4N{b|s|i|f|d|ub|us|ui}vARB(GLuint index, const TYPE *v)

v指定的是数据,用来将数据传递给index指定的顶点通用属性。这里的函数多了个的N,用来表明单位化的数据。这个函数可以由两个后缀来区分参数的不同类型。第一个后缀指出v的数据类型:byte(b) short (s), int (i), float (f), double (d), unsigned byte (ub), unsigned short (us), 或者 unsigned int (ui)。第二个后缀v可选,如果指定了v则表示参数v是一个指向数租的指针。

命令里包含了N,表示当数据是float或者是double的时候,参数将被线性映射到一个单位化的区间里,这和函数glColor和glNormal是一样的。对有符号整数类型的函数参数,正值将映射到1.0,负值将被映射到-1.0。对无符号的整数类型,最大的数值将被映射到1.0,最小的被映射到0.0;

属性变量可以是mat2,mat3,或者mat4类型的。这些类型的属性也可能由glVertexAttribARB入口函数来加载。矩阵必须以列优先的方式被复制到连续的属性位置上。每个属性位置保存一个矩阵的列向量。你可能会把一个矩阵的第一列加载到第i个位置,第二列加载到第i + 1个位置上, 第三列加载到第i + 2个位置上,第四列加载到第i + 3个位置上。

通用顶点属性,虽然“通用”意味着他们可以传递任何附加的颜色值,切线,副法线(binormals),深度值,以及其他一些数据。但是一个例外是索引为0的顶点属性位置,它是用来指示一个顶点数据已经传输完毕的,如同调用glVertex。一个glVertex2,glVertex3或者glVertex4命令和对应的用index 为0的glVertexAttribARB调用是完全等价的。索引为0的attribute变量没有初始值(试图去读它的变量,则会产生一个错误),这是唯一一个有这样属性的attribute变量。其他的顶点属性设置可以任意的调用以及和其他属性混合调用。你还可以随意的使用glVertex和glVertexAttribARB来设置索引为0的顶点属性值。

顶点数组的API也被扩展为可以和顶点数组相同的形式用来指定顶点属性。下面的调用将为通用顶点属性建立顶点数组指针:

void glVertexAttribPointerARB(GLuint index,

GLint size,

GLenum type,

GLboolean normalized,

GLsizei stride,

const GLvoid *pointer)

指定一个渲染时候要用到的通用顶点属性数组的位置和数据格式。要指定的那个顶点属性数组由index指定。size指定每个属性的分量个数,必须是1,2,3或者4。Typde指定每个分量的类型(GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,

GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, 或 GL_DOUBLE)。Stride指定了一个属性到下一个属性的跨度(以字节为单位),这就允许了一个属性值可以和其他的属性值交替混合的存放在一起或者是分开存放。如果把normalize 设置成GL_TRUE,意味着以整数形式保存的数据在被访问和转化到浮点数的时候将被映射到[-1.0,1.0](对有符号数)或者[0.0,1.0](无符号数)的范围。其他情况下,数据将不被单位化直接转化为浮点数。Pointer参数指定了顶点属性数组的第一个属性值的内存地址。

当为一个通用顶点属性数组指定了顶点数组信息以后,数组需要被激活,当被激活后,被指定的通用顶点属性数据就可以和其他被激活的顶点数组将在绘制命令发出时一起提交给OpenGL,这些绘制命令是glDrawArrays等函数。激活或者关闭一个顶点数组。可以使用下列命令:

void glEnableVertexAttribArrayARB(GLuint index)

void glDisableVertexAttribArrayARB(GLuint index)

激活或者关闭由index指定的通用顶点属性数组。在客户端,默认的时候,这些数组都是被关闭的。当被激活后,保存在数组里面的数据将在绘制函数(例如glArrayElement, glDrawArrays, glDrawElements, glDrawRangeElements, glMultiDrawArrays,或者glMultiDrawElements等)调用的时候被访问到。

这只是解决了通用顶点数据如何传递给OpenGL的问题。但是我们怎么才能在vertex shader里访问到这些数据呢?我恩不想在shader里访问这些位置索引,因为这样

描述性不好,而且容易产生错误。OpenGL Shading Language API提供了两种方法来把通用顶点数据索引和vertex shader里的attribute变量关联起来。

第一种方法是让连接器自动绑定。在这种情况下,应用程序应该在连接结束后去查询已经被分配好的通用顶点属性的索引,然后用查询到的索引来给OpenGL传递数据。

第二种方法是由应用程序来选择一个通用顶点属性的索引,并把它显式的绑定到vertex shader里指定的变量上,这可以在连接操作前通过以下命令完成:

void glBindAttribLocationARB(GLhandleARB program,

GLuint index,

const GLcharARB *name)

把一个program对象里自定义的attribute变量和通用顶点属性索引关联起来。自定义的attribute变量的名字name以null字符结尾的字符串的形式传递。如果这个名字的变量在以前已经被绑定过,那么以前的信息将丢失。你不能把一个变量绑定到多个索引。但是你可以把多个变量绑定到同一个索引。attribute变量要绑定到的索引由index指定。如果program对象是当前的状态机的一部分。那么通过index传递的通用顶点属性的值将影响到program中由name指定的自定义

attribute变量。

如果name指向的是一个矩阵类型的attribute变量。Index则代表矩阵第一个列向量的索引。矩阵的其它的列自动的绑定,mat2绑定index+1,mat3绑定index+1和index+2,mat4绑定index+1、index+2和index+3的索引。

应用程序不能通过这个命令来绑定OpenGL标准的顶点属性。因为这些属性是在需要的时候自动绑定的。program连接后执行的属性绑定操作在下一次连接操作前是没有任何作用的。

glBindAttribLocationARB可以在任何一个vertex shader对象连接到指定的program对象前调用。也允许绑定一个在vertex shader里从来没有用到过的变量名字到指定的通用属性索引。

应用程序可以绑定多个激活的attribute变量到一个相同顶点属性索引。这个叫做属性重名(ATTRIBUTE ALIASING)。and it is allowed only if just one of the aliased attributes is active in the executable program or if no path through the shader consumes more than one attribute of a set of attributes aliased to the same location.另外一种说法是当多个属性名字被绑定到一个通用属性索引的时候,在vertex shader里最终只有一个名字可以用来访问通用属性。编译器和连接器可以假设没有重名,这样就可以启用只有在没有重名的情况下才能进行的优化操作。OpenGL的实现没有要求进行属性重名的错误检测。因为没有办法绑定标准属性,所以也不存在通用属性和传统属性重名的可能性。

Attribute变量的名字到通用属性索引之间的绑定可在任何时候调用glBindAttribLocationARB来实现。Attribute绑定在glLinkProgramARB调用之前没

有任何效果。所以,任何一个需要显式绑定的attribute变量应该在连接操作前绑定。当一个program对象被成功的连接后,attribtue变量的索引值也就固定下来(索引值可以被查询到)直到下一个连接操作发生。查询一个vertex shader中的attribute 变量的绑定结果,可以通过如下函数:

GLint glGetAttribLocationARB(GLhandleARB program,

const GLcharARB *name)

查询由形参program指定的已经成功连接的program对象中的,由形参name指定的attribute变量,返回由这个name指定的attribute 变量绑定到通用顶点属性的索引。如果name是一个矩阵类型的attribute变量的的名字。则返回第一个列向量的索引。如果指定的attribute 变量在一个program对象中不是一个活动的attribute 变量,或者名字以保留前缀gl_打头的情况下,将返回-1。

glGetAttribLocationARB返回的是在glLinkProgramARB后确定的已经产生影响的绑定结果。在连接操作后的绑定结果不能通过glGetAttribLocationARB查询得到。用这些函数,我们可以创建一个vertex shader ,这个shader有一个名为”Opacity”的attribute变量用来计算光照。我们决定通过通用属性索引1 来个每个顶点传送透明度数据。我们可用以下的代码来进行正确的绑定:

glBindAttribLocationARB(myProgram, 1, "Opacity");

随后,我们可以用glVertexAttribARB来给每个顶点传递一个透明度信息:

glVertexAttrib1fARB(1, opacity);

glVertexAttribARB被设计成可用来在glBegin和glEnd之间调用,这样它们就可以用来取代标准的OpenGL调用比如:glColor,glNormal等等。但是如同我们已经指出的,应该用顶点数组来解决图形性能问题。

这一章里的有些行话可能会引起一点点的混淆。下面让我们来看一个图表,它表示了由OpenGL Shading Language 定义的OpenGL内建属性变量。用来设置标准属性(比如color , normal , vertex等)的设置命令和内建变量(gl_Color, gl_Normal,gl_Vertex等)之间的映射是自动完成的。它们不会和使用任何一个通用属性位置索引冲突。除了glVertex,他们都设置了当前状态里的对应属性(glVertex提供的数据从来都不会保存成为当前状态的一部分)。当这些标准调用设置一个相应的标准顶点属性时候,对应的内建属性变量也被自动更新。

Figure 7.1. 标准属性的设置命令和内建变量之间的映射

现在来看一下通用顶点属性的情况,在图7.2中表示。一个用户定义的属性变量必须被绑定到一个通用属性索引上。这个绑定可以通过显式调用函数glBindAttribLoactionARB,或者在连接时候隐式完成。

Figure 7.2.通用顶点属性的设置命令和自定义attribute变量之间的映射

假设我们有一个vertex shader,使用了三个自定义的 attribute变量:Opacity, Binormal,和MyData。它们在图7.2的右边表示。这些自定义的attribute变量可以被绑定到一个通用顶点索引上,如下:

glBindAttribLocationARB(myProgram, 1, "Opacity");

glBindAttribLocationARB(myProgram, 2, "Binormal");

glBindAttribLocationARB(myProgram, 3, "MyData");

这就建立一种映射,当对通用顶点属性位置1,2和3写入的时候,将会修改vertex shader里的attribute变量Opacity, Binormal和MyData。通用顶点属性0可以被绑定到一个自定义attribute变量,或者它的值可以通过内建变量gl_Vertex来取回。图中颜色的通用顶点属性索引N没有被绑定到任何一个自定义 attribute变量上。

如同提到的,每个通用顶点属性位置都提供了一个足够保存4个浮点分量的空间。应用程序可以允许保存每个位置中的1,2,3或者4分量。一个vertex shader可以

通过一个自定义的attribute变量,以float , vec2,vec3或者vec4的方式来访问一个单一的位置(location)。也可以通过mat2来访问两个连续的位置,通过mat3来访问三个连续的位置,通过mat4来访问四个连续位置。

用户自定义的attribute变量到通用属性索引的绑定(图7.2左边的部分)是program对象维护着的状态的一部分。但是属性数组是被被认为当前状态的一部分(除了索引号为0的顶点属性)。应用程序为不同的program对象可以提供不同的特点的属性索引到vertex shader里的attribute变量的映射。如果没有调用函数来更新attribute的值,新的vertex shader的attribute变量的值将从前面一次的调用中获得。

那些在一个vertex shader执行过程中可能会被访问的Attribute变量被成为是活动的attribute变量(ACTIVE ATTRIBUTES)。可以用如下的命令获得活动的attribute 变量的信息。

void glGetActiveAttribARB( GLhandleARB program,

GLuint index, GLsizei maxLength,

GLsizei *length, GLint *size,

GLenum *type, GLcharARB *name)

返回一个由program对象里的一个attribute 变量的信息,这个program对象由形参program指定。由应用程序分配的字符串缓冲区的长度由maxLength指定。指向这个字符串缓冲区的指针由name指定。一个attribute变量是不是活动的(无论是自定义的还是内建的)是由program对象在连接过程中判断一个变量在执行的时候有没有可能被访问到决定的。因此,在调用这个函数前,有必要先调用glLinkProgramARB函数,但是是否连接成功则不是必要的。

glGetActiveAttribARB返回由index指定的attribte变量的名字,返回的名字保存在由name指定的字符串缓冲区里。返回的字符串以null字符结尾。实际返回的字符数目被保存在length里,长度不包含null 字符。如果不需要返回的字符树木,则给length传递一个NULL指针。

一个program对象里的活动attribute变量的数目可以通过传递一个

GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 的参数给glGetBojectParamenterARB函数来获得。 给index传递0表示返回第一个活动attribute变量的信息,传入

GL_OBJECT_ACTIVE_ATTRIBUTES_ARB返回的数目-1给index,则返回最后一个活动attribute变量的信息。最长的attribute变量的名字可以通过给glGetObjectParameterARB传递参数GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 来获得。

形参type将返回一个指向attribute变量的类型的指针,返回的值可能是以下常量GL_FLOAT, GL_FLOAT_VEC2_ARB, GL_FLOAT_VEC3_ARB, GL_FLOAT_VEC4_ARB,

GL_FLOAT_MAT2_ARB, GL_FLOAT_MAT3_ARB, 和GL_FLOAT_MAT4_ARB(注:这些是定义的宏,是常量)。形参size返回attribute的大小(以type返回的类型为单位)。

这个函数将返回指定的attribute变量尽可能多的信息,如果没有信息可以返回。则length将被置成0,返回字符串为空。这样情况的可能是函数调用发生在连接失败以后。

这个命令在shader开发人员和应用程序开发人员是分开工作的环境下非常有用。如果attribute变量的命名规范在 shader开发人员和应用程序开发人员之间是一致的时候。应用程序开发人员就有可能在运行时刻去查询program对象,去决定是不是真的需要给一个属性传递数据。这个方法给shader开发过程提供了更加大的灵活性。

查询一个通用顶点属性的状态,可以调用以下的一个命令:

void glGetVertexAttribfvARB(GLuint index,

GLenum pname,

GLfloat *params)

void glGetVertexAttribivARB(GLuint index,

GLenum pname,

GLint *params)

void glGetVertexAttribdvARB(GLuint index,

GLenum pname,

GLdouble *params)

Params保存了返回的通用顶点属性的参数。要查询的通用顶点属性由index指定。要查询的参数由pname指定。参数和返回值在表7.2里有详细总结。除了

GL_CURRENT_VERTEX_ATTRIB_ARB以外的所有参数都表示客户端的状态(OpenGL是以Client-Server模式工作的)。

表7.2. 通用顶点属性参数

Parameter Operation

GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB Params返回一个单一值。非0(true)

的时候表示一个属性数组是enable

的,0(false)的时候表示被disable

掉。初始值为GL_FALSE.

GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB Params返回一个单一值。Index指定

的顶点属性数组的大小。大小是顶点

属性数组中每个元素的大小,可能是

1,2,3,或者4。初始值是4。

GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB Params返回一个单一值。返回由index

指定的顶点属性数组的跨度(stride)

值.也就是相邻两个元素之间的字节

数。为0表示数组中的元素在内存中

表7.2. 通用顶点属性参数

Parameter Operation

是连续保存的。初始值为0。

GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB Params返回一个单一值。一个符号常

数,表示由index指定的顶点数组的类

型。可能的值为GL_BYTE,

GL_UNSIGNED_BYTE, GL_SHORT,

GL_UNSIGNED_SHORT, GL_INT,

GL_UNSIGNED_INT, GL_FLOAT,或者是

GL_DOUBLE.初始值为GL_FLOAT。

GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB Params返回一个单一值。返回非

0(true)的时候表示由index指定的顶

点属性数组把数据转化为浮点数的时

候需要进行单位化,否则为0(false)。

初始值为GL_FALSE。

GL_CURRENT_VERTEX_ATTRIB_ARB Params返回四个值。表示由index指

定的通用顶点数据的当前值。索引为0

通用顶点属性没有当前值,所以当索

引为0的时候,将产生一个错误。所

有的通用顶点属性的初始值都为(0,

0, 0,1)。

void glGetVertexAttribPointervARB(GLuint index,

GLenum pname,

GLvoid **pointer)

返回指针信息,index表示需要查询的通用顶点属性。Pname表示是一个符号常量指示需要返回的指针。Pointer是一个指针用来保存需要返回的数据。Pname唯一一个可能的参数就是GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB。Pointer(原书为params,此处应该为pointer)返回了一个指向有index指定的顶点数组的指针。

7.7 指定Uniform变量

如同前面一章里描述的,attribute变量用来描述一个vertex shader里经常需要改变的数据。不是常需要改变的数据则可以通过uniform变量来传递。Uniform变量在一个shader里定义能被应用程序直接装载。这让应用程序具备给shader提供任意类型数据的能力。应用程序可以为每个图元指定不同的uniform变量值,用来改变shader的行为(当然这样做可能导致性能问题)。通常uniform变量用来提供不需要经常改变的状态值。

HTML5基础入门教程(小编搜集辛苦啊,必看)

HTML5教程 什么是HTML5? HTML5 将成为HTML、XHTML 以及HTML DOM 的新标准。 HTML 的上一个版本诞生于1999 年。自从那以后,Web 世界已经经历了巨变。HTML5 仍处于完善之中。然而,大部分现代浏览器已经具备了某些HTML5 支持。 你是不是多少有了解一点,但是你却对这个不精啊!可以进群交流,⑤①④①⑥⑦⑥⑦⑧。HTML5 是如何起步的? HTML5 是W3C 与WHATWG 合作的结果。 编者注:W3C 指World Wide Web Consortium,万维网联盟。 编者注:WHATWG 指Web Hypertext Application Technology Working Group。WHATWG 致力于web 表单和应用程序,而W3C 专注于XHTML 2.0。在2006 年,双方决定进行合作,来创建一个新版本的HTML。 为HTML5 建立的一些规则: ?新特性应该基于HTML、CSS、DOM 以及JavaScript。 ?减少对外部插件的需求(比如Flash) ?更优秀的错误处理 ?更多取代脚本的标记 ?HTML5 应该独立于设备 ?开发进程应对公众透明 新特性 HTML5 中的一些有趣的新特性: ?用于绘画的canvas 元素

?用于媒介回放的video 和audio 元素 ?对本地离线存储的更好的支持 ?新的特殊内容元素,比如article、footer、header、nav、section ?新的表单控件,比如calendar、date、time、email、url、search 浏览器支持 最新版本的Safari、Chrome、Firefox 以及Opera 支持某些HTML5 特性。Internet Explorer 9 将支持某些HTML5 特性。 HTML 5 视频 许多时髦的网站都提供视频。HTML5 提供了展示视频的标准。 Web 上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准。 今天,大多数视频是通过插件(比如Flash)来显示的。然而,并非所有浏览器都拥有同样的插件。 HTML5 规定了一种通过video 元素来包含视频的标准方法。 视频格式 当前,video 元素支持两种视频格式: Internet Explorer Firefox 3.5 Opera 10.5 Chrome 3.0 Safari 3.0 Ogg X X X MPEG 4 X X Ogg = 带有Thedora 视频编码和Vorbis 音频编码的Ogg 文件 MPEG4 = 带有H.264 视频编码和AAC 音频编码的MPEG 4 文件

PS零基础入门教程

第一课时简介 图象图形处理软件 集于位图和矢量图绘画、图象编辑、网页图象设计、网页制作等多种功能一一体的优秀软件,如此强大的功能,决定了它能够在多种领域得到广泛的应用。如它可一外在图象处理、平面广告设计、模拟绘图以及计算机艺术作品等方面具有无与伦比的优势。 特点及优势 1.快捷方式:photoshop提供了大量的快捷键,几乎每一个键都可 作为快捷键,在专业制作中大大提高了工作效率,节约时间,建议初学者在学习时留心记忆快捷键。 2.工具箱:集中了许多图标工具面板 3.选择工具:是我们在photoshop最常用的 photoshop选择工具 大致可分为四种:矩形选择工具 图层\主要用于建立,修改,删除图层,设置图层的参数,建立图层组以及文字的特效处理等. 选择\用于修改与调整选择区,使边缘产生模糊效果等. 4.滤镜\用于使图形产生各种特殊效果,如模糊,铅笔画,浮雕,波 纹等. 视图\可以控制图象在屏幕上的显示效果. 5.窗口\用于打开或关闭工具箱与控制面板,以及设定图象窗口排 列方式等. 6帮助\为用户提供各种帮助. 作业:火焰字 新建600*800\填充背景为黑色\输入文字\图层象素化\图象\旋转画布90\滤镜\风格化\风ctrl+f3\滤镜\扭曲\波纹\旋转画布90\图象\模式\灰度\索引\颜色表\黑体\保存 新建600*800\输入文字\复制文字层\图层象素化\ctrl+单击图层缩览图\反选ctrl+shift+I\背景为白色\ctrl+d\滤镜\扭曲\极座标\反相ctrl+I\图象\旋转画布90滤镜\风格化\风ctrl+f3\旋转画布90\滤镜\扭曲\极座标(平面)\调整图层层次\调整图层色相 ctrl+U\保存 第二课时 课题:创建选区 教学目的:1,掌握不同四种创建规则选区的途径。 2,运用选区的相加,减和相交

中文版word基础教程

W o r d 2003基础教程 编 撰 花 椒 文 刀 版权归属:中国盲文出版社信息无障碍中心盲人挚友聊天室 前 言 结合阳光读屏软件强大的Word 朗读功能, 由信息无障碍中心开办的于2008年11月至 2009年3 月,推出在线《Word2003基础讲座》。同期,我们将讲座内容编纂成册,免费提供给 阳光软件的广大用户,以便查阅。 本教程用Word2003编写, 您可以通过单击目录快速跳转到需要查阅的文本,具体操作方法是:用上下光标逐行朗读目录,听到您想查阅的条目后,按下 Ctrl+小键盘的斜杠键,这样,光标会自动跳转到目录对应的文本,以方便您的查阅,同时,在阅读过程中,教程所提及的所有操作,您均可在当前窗口尝试,当然,为了保持教程的完整,建议您在关闭本 教程时选择不保存修改。 本教程由阳光软件免费提供,版权归属中国盲文出版社信息无障碍中心盲人挚友聊天室, 请勿用于商业用途,违者必究。

目录 第一章 初识中文版Word2003 中文版word2003是微软公司推出的中文版office2003软件套装中的重要组成部分,它具有 强大的文本编辑和文件处理功能,是实现无纸化办公和网络办公不可或缺的应用软件之一。 第一节安装、启动和退出程序 一、安装程序 安装word2003和安装其它软件并无二致,需要说明一下的是光盘版的安装。当您将中文版 office2003光盘放入光驱后,请不要自动播放,因为自动播放会弹出图形化的安装界面,读 屏软件无法操作。您可以在插入光盘后,打开“我的电脑”找到CD驱动器,application键 弹出快捷菜单,通过“打开(O)菜单”来打开光盘,然后在列表中选中office文件夹,打开 以后,列表中出现几个文件夹,由于版本不同,文件夹数量和名称可能会略有区别,不过没 关系,在这些文件夹中寻找setup.exe并回车执行,您就能顺利地用键盘完成安装操作了。 二、启动程序 按下Windows键弹出“「开始」菜单”,展开“所有程序(P)菜单”后。上下光标到 “MicrosoftOffice子菜单”,右光标展开该子菜单后,上下光标找到 “MicrosoftOfficeWord2003菜单”回车即可启动Word程序。另外,当您在资源管理器中选 择任意一个后缀名为.doc的文档回车时,计算机也会为您启动word程序,同时打开您选中 的文档。 三、退出程序 在程序窗口按下快捷键:“Alt+F4”是退出程序最简便的方法。当然您还可以在程序窗口按下 Alt键激活菜单栏,下光标展开“文件(F)子菜单”并找到到“退出(X)菜单”回车,或在程 序窗口按下“Alt+空格”弹出控件菜单,上下光标找到“关闭(c)菜单”回车即可退出程序。

html5入门视频教程百度网盘

html5入门视频教程百度网盘 近几年html5前端开发相当火爆,可以说引领了IT培训行业的新的潮流,越来越多人加入到了html5前端开发的行列中来。想要学好web前端,你需要一份较新且完善的学习资料,现在就给大家千锋教html5入门视频教程百度网盘云分享,希望对所有想学习html5前端的同学有所帮助。 千锋教程第1部分:课程体系解读 https://www.360docs.net/doc/908346498.html,/s/1o7B9OYA 千锋教程第2部分:微案例讲解 https://https://www.360docs.net/doc/908346498.html,/s/1nwyNFg1 千锋教程第3部分:知识点讲解 https://www.360docs.net/doc/908346498.html,/s/1jICHs9o 千锋Vue组件之手机通讯录实战课程

https://www.360docs.net/doc/908346498.html,/s/1c1FrXLY 千锋微信小程序基础与实战 https://https://www.360docs.net/doc/908346498.html,/s/1xE35SQcvW0sCF2NoR_ONiw 目前前端工程师人员的缺口很大,而2年工作经验的html5前端开发工资10K~15K左右。如果你会一些后台技术,并且前端技术很厉害,到20K也是可能的。工资的多少主要取决于你的技术情况,所以工资是不确定的。前景不错,选择现在学习前端技术,也更容易高薪就业。 前端开发主要是做什么?是利用HTML/CSS/JavaScript/DOM/Flash等各种Web技能结合产品的界面开发。制作标准化纯手工代码,并增加交互功能,开拓JavaScript和Flash模块,同时结合后端开拓技能仿照全部效果,结束丰富互联网的Web开拓,致力于经过进程技能改进用户体验。而其所需技能则是学习html,这个是简单的,也是基础的;学习css;js;jquery;那样就业面试时更有优势。 千锋教育html5前端全栈课程培训,致力于培养覆盖前端+后台+全栈开

《HTML5+CSS3网站设计基础教程》_教学大纲

《HTML5+CSS3网站设计基础教程》课程教学大纲 (课程英文名称) 课程编号:201601210011 学分:5学分 学时:76学时(其中:讲课学时:47 一、课程的性质与目标 《HTML5+CSS3网站设计基础教程》是面向计算机相关专业的一门专业基础课,涉及网页基础、HTML标记、CSS样式、网页布局、变形与动画等内容,通过本课程的学习,学生能够了解网页web发展历史及其未来方向,熟悉网页设计流程、掌握网络中常见的网页布局效果及变形和动画效果,学会制作各种企业、门户、电商类网站。

二、课程设计理念与思路 课程设计理念:高职教育的集中实践教学环节需明确必要的理论知识的生化与知识层面的拓展,不能局限 于单纯的技能训练。单纯的技能训练不是提高高等职业教育的理想课程。以能力的培养为重点,以就业为导向,培养学生具备职业岗位所需的职业能力,职业生涯发展所需的能力和终身学习的能力,实现一站式教学理念。 课程设计思路:基于工作过程开发课程内容,以行动为导向进行教学内容设计,以学生为主体,以案例 (项目)实训为手段,设计除理论学习与技能掌握相融合的课程内容体系。教学整体设计“以职业技能培养为 目标,以案例(项目)任务实现为载体、理论学习与时间操作相结合”。 开发工具:DreamweaverCS6 第一章初识HTML5

第二章HTML5页面元素及属性

第四章CSS3选择器

e g o o d f o 背景与图片不透明度的设置 √ 设置背景图像平铺√ 设置背景图像的位置√ 设置背景图像固定√设置背景图像的大小√设置背景的显示区域√设置背景图像的裁剪区域√设置多重背景图像√背景复合属性√线性渐变√径向渐变√重复渐变 √ 第七章表单的应用

PS入门基础教程-配图文说明

第一课:工具的使用 一、Photoshop 简介: Adobe 公司出品的Photoshop 是目前最广泛的图像处理软件,常用于广告、艺术、平面设计等创作。也广泛用于网页设计和三维效果图的后期处理,对于业余图像爱好者,也可将自己的照片扫描到计算机,做出精美的效果。总之,Photoshop 是一个功能强大、用途广泛的软件,总能做出惊心动魄的作品。 二、认识工具栏 1、 选框工具:用于选取需要的区域 ----选择一个像素的横向区域 ----选择一个像素的竖向区域

属性栏: 注:按shift 键+ 框选,可画出正方形或正圆形区域 2、 移动工具 : -----用于移动图层或选区里的图像 3、套索工具: ----用于套索出选区 ----用于套索出多边形选区 ----可根据颜色的区别而自动产生套索选区 4、魔术棒工具: ----根据颜色相似原理,选择颜色相近的区域。 注:“容差”,定义可抹除的颜色范围,高容差会抹除范围更广的像素。 5、修复工具: 且是 ----类似于“仿制图工具”,但有智能修复功能。 ----用于大面积的修复 一新 ----用采样点的颜色替换原图像的颜色 注:Alt+鼠标单击,可拾取采样点。 6、仿制图章工具----仿制图章工具从图像中取样,然后您可将样本应用到其它图像或同一图像的其它部分。 ----仿制图章工具从图像中取样,然后将样本应用到其它图像或同 一图像的其它部分(按Alt键,拾取采样点)。 ----可先自定义一个图案,然后把图案复制到图像的其它区域或其它图像上。

三、小技巧: ①、取消选区:【Ctrl +D 】 ②、反选选区:【Shif+F7】 ③、复位调板:窗口—工作区—复位调板位置。 ④、ctrl+[+、-]=图像的缩放 ⑤空格键:抓手工具 ⑥Atl+Delete = 用前景色填充 Ctrl+Delete = 用背景色填充 第二课:工具的使用二 一、工具栏 自由变换工具:【 Ctrl + T 】 2、使用框选工具的时候,按【Shift 】后再框选,则框选出正圆或正方形。 按【Alt 】后再框选,则选区以鼠标点为中心 3、 :可以使图像的亮度提高。 :可以使图像的区域变暗。 :可以增加或降低图像的色彩饱和度。 4、用前景色来填充:【Alt +Delete 】

Scratch2.0入门中文使用教程

儿童编程 SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课

4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.360docs.net/doc/908346498.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH

html5教程视频教程网盘下载

html5教程入门视频网盘下载 学习HTML、CSS基础知识,实现PC端静态页面制作(例如京东商城),响应式网页布局的制作(微软中国官网)、及WebApp页面布局(淘宝、美团等)。 html5前端人才已成为IT职场的紧缺型人才,如何自学html5?如何短时间内迅速提升html5开发能力?千锋教育html5教程入门视频网盘下载(https://www.360docs.net/doc/908346498.html,/video/html5_download.html),助力大家成为企业不可多得的贤才。 实现这些需要的知识有 1、学习HTML基本语法:双标签、单标签语法结构。 2、常用标签:标题标签、段落标签、布局标签、表格、列表、标签标签。 3、学习CSS基本语法:选择器声明。 4、学习CSS的三种样式表:内联、内部、外部 5、学习CSS的各种常用选择器 6、学习CSS的选择器、样式表的优先级和权重问题。 7、学习CSS的核心属性及属性值 8、学习CSS的元素类型的转换

9、学习CSS的定位锚地的应用 10、学习CSS中的图片整合技术的应用 11、学习CSS中常见的浏览器的兼容及解决方法 12、学习HTML5新增元素及属性 13、学习CSS3新增选择器的应用 14、学习CSS3的2D、3D、关键帧动画的相关应用 15、学习CSS3中弹性盒的应用 16、学习CSS3中媒体查询响应式的设计应用 学习JavaScript和jQuery及掌握一门后台程序语言的简单基础和一个数据库,实现PC端项目交互开发(做一个电商类型的网站开发) 需要的知识有 1、学习JavaScript的基本语法 2、学习JavaScript的循环语句 3、学习JavaScript的函数与数组 4、学习JavaScript的String和Data 5、学习JavaScript的BOM与DOM 6、学习JavaScript的相关事件 7、学习JavaScript的拖拽效果 8、学习JavaScript的cookie存储 9、学习JavaScript的正则表达式 10、学习JavaScript的Ajax的应用 11、学习JavaScript的面相对象基础

网页设计基础Div+CSS布局入门教程

网页设计基础:Div+CSS布局入门教程 在网页制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本知识,而在你学习这篇入门教程之前,请确定你已经具有了一定的HTML 基础。下面我们就开始一步一步使用DIV+CSS进行网页布局设计吧。 所有的设计第一步就是构思,构思好了,一般来说还需要用PhotoShop或FireWorks(以下简称PS或FW)等图片处理软件将需要制作的界面布局简单的构画出来,以下是我构思好的界面布局图。 下面,我们需要根据构思图来规划一下页面的布局,仔细分析一下该图,我们不难发现,图片大致分为以下几个部分: 1、顶部部分,其中又包括了LOGO、MENU和一幅Banner图片; 2、内容部分又可分为侧边栏、主体内容; 3、底部,包括一些版权信息。 有了以上的分析,我们就可以很容易的布局了,我们设计层如下图:

根据上图,我再画了一个实际的页面布局图,说明一下层的嵌套关系,这样理解起来就会更简单了。 以下为引用的内容: DIV结构如下: │body {}/*这是一个HTML元素,具体我就不说明了*/ └#Container {}/*页面层容器*/ ├#Header {}/*页面头部*/ ├#PageBody {}/*页面主体*/

│├#Sidebar {}/*侧边栏*/ │└#MainBody {}/*主体内容*/ └#Footer {}/*页面底部*/ 至此,页面布局与规划已经完成,接下来我们要做的就是开始书写HTML代码和CSS。 接下来我们在桌面新建一个文件夹,命名为“DIV+CS S布局练习”,在文件夹下新建两个空的记事本文档,输入以下内容: 以下为引用的内容: 无标题文档 这是XHTML的基本结构,将其命名为index.htm,另一个记事本文档则命名为css.css。 下面,我们在标签对中写入DIV的基本结构,代码如下:

[color=#aaaaaa][/color]
[color=#aaaaaa][/color]
[color=#aaaaaa][/color]
为了使以后阅读代码更简易,我们应该添加相关注释,接下来打开css.css文件,写入CSS信息,代码如下:

html5入门教程网盘下载

html5入门教程网盘下载 Html5的发展让不少开发商发现了机遇,html5开发人才也遭受疯抢,但传统前端人才很难驾驭移动端。因此,html5开发人才出现严重紧缺状态,很多企业陷入两难境地。那么想学习这门技术,当然要有好的学习资料,千锋教育免费分享html5自学教程! 设计模式是在软件开发中,经过验证的,用于解决在特定环境下,重复出现的特定的问题的解决方案。在编写JS代码的过程中,运用一定的设计模式可以让我们的代码更加优雅、灵活。 每个设计模式的构成如下: 1、模式名称:模式的一个好记的名字 2、环境和问题:描述在什么环境下,出现什么特定的问题 3、解决方案:描述如何解决问题 4、效果:描述应用模式后的效果,以及可能带来的问题 简单地说,模式就是一些经验,一套场景/问题+解决方案。 千锋HTML5百人教学天团,每个讲师都是具有多年开发经验的行业佼佼者。设计模式课程的讲解将从实际应用场景出发,以实践和尝试的方式,分析可能出现的问题以及如何解决,以期达到“避免犯前人犯过的错误+ 避免引入不成熟的设计“这一目标。让大家快速领略编程之美,模式之美。 为什么要学习设计模式?

设计模式的种类较多,各个模式都有它对应的场景,不能武断地认为某个模式就是最优解决方案。通过学习这些设计模式,让你找到“封装变化”、“松耦合”、“针对接口编程”的感觉,从而设计出易维护、易复用、扩展性好、灵活性足的程序。通过学习设计模式让你领悟面向对象编程的思想(SOLID),到最后就可以抛弃设计模式,把这些思想应用在你的代码中,写出高内聚、低耦合、可扩展、易维护的代码了。此时已然是心中无设计模式,而处处是设计模式了。这就是学习设计模式的目的。 常见的几种设计模式 单例模式 之所以叫做单例模式是因为它限定对于一个类,它他只允许有一个实例化对象,经典的实现方式是,创建一个类,这个类包含一个方法,这个方法在没

ps入门教程零基础视频网盘下载,真正学好ps

ps入门教程零基础视频网盘下载,真正学好ps Photoshop是专业设计师修炼之路的必备工具,但是面对这个从87年开始进化的庞然大物,若没有前辈指导,战胜它可着实不易。今天分享一篇好文,讲讲在摄影领域,你该怎样做才能学好Photoshop。 《超赞!设计师完全自学指南》https://www.360docs.net/doc/908346498.html,/s/1mhO5K9q 《从菜鸟到高手!PHOTOSHOP知识点》https://www.360docs.net/doc/908346498.html,/s/1sl5AB85 1 学好PS,并非一朝一夕 兴趣—是迈向PS高手之路的一个好的开端:如果你本身对PS并不感兴趣,只是因为工作需要而刻意去学,那么你无论拜读哪位大师的教程,或是投奔哪位PS高手的门下,你也只能学会一点皮毛而已。 2审美基础,这个相当重要

很多学生过来学习时,其中有些学生已经做PS很多年了,为什么一直就没有进步?有的人就开始埋怨自己笨,或者埋怨自己没有好的老师带他进步?大多数人吐槽的话题就是影楼机械性的工作,让自己过于麻木。其实归根结底,是审美基础薄弱! 那么怎样提高自己的审美?或者说有没有老师专门教你审美的课程? 其实每个人的审美虽千差万别,但万变不离其宗。而美术,就是教你怎么去审美的。适当补习一些美术基础,对你的PS是相当重要。 3 调色难学么?

这是很多学生经常问的一句话:就好像有人问你,啤酒好喝么?冰激凌好吃么?某某电影好看不?不同的人,会得出不同的答案:调色难学与否,最重要的还是看自己对色彩的把握程度和接受能力等:因为调色牵扯到光影,色彩,美学等,它不单单是耍弄几个工具那么简单而已。很多学生对PS工具的熟练程度,远远超出了我的速度,甚至闭上眼睛都可以快速调出相应的工具来:但这并不说明你的调色技术就非常厉害。色彩是一门庞大的学问,岂止是PS那几个工具和通道就能诠释的? 4 没有美术基础可以学PS么?

千锋html5基础入门教程内容

千锋html5基础入门教程内容 千锋html5基础入门教程内容有哪些?零基础能不能学会这门课程?互联网的高速发展带动了软件行业,更多年轻人会选择学习软件行业作为未来的职业,html5随着近两年的不断火热,受到了更多年轻人的青睐,那么学习的内容也更受到大家的关注,那么给大家介绍一下千锋html5入门教程内容。 千锋html5培训课程分采用进阶式学习,阶段性检测学员掌握学员学习情况。千锋的html5学科的课程体系能够适应市场需求、紧跟时代技术,完全满足市场对html5工程师的要求,大大提升了学员的市场竞争力。学习内容包括7大学习阶段: 阶段一:前端页面重构(4周) 内容包含了:(PC端网站布局项目、HTML5+CSS3基础项目、WebApp 页面布局项目) 阶段二:JavaScript高级程序设计(5周)

内容包含:1)原生JavaScript交互功能开发项目、面向对象进阶与ES5/ES6应用项目、JavaScript工具库自主研发项目) 阶段三:PC端全栈项目开发(3周) 内容包含:(jQuery经典交互特效开发、HTTP协议、Ajax进阶与PHP/JAVA开发项目、前端工程化与模块化应用项目、PC端网站开发项目、PC端管理信息系统前端开发项目) 阶段四:移动端项目开发(6周) 内容包含:(Touch端项目、微信场景项目、应用Angular+Ionic开发WebApp项目、应用Vue.js开发WebApp项目、应用React.js开发WebApp项目) 阶段五:混合(Hybrid,ReactNative)开发(1周) 内容包含:(微信小程序开发、React Native、各类混合应用开发)

HTML5 canvas 初级入门教程

HTML5 canvas 初级入门教程
HTML5 canvas 即 HTML5 画布,是一个现代浏览器都支持的 HTML5 非插件绘图的功能,本 文将展示如何通过 HTML5 canvas API 操作 canvas 元素、绘制图形、改变绘图颜色以及删 除图形,让我们开始进入这很酷的新技术的短暂旅行吧。
canvas 元素简介
使用 canvas 元素相当简单,它只是一个单纯的 HTML 标签,外加宽高两个特性。

上面的代码在页面中插入了一个透明的画布,canvas 元素内部的内容可以在不支持 canvas 功能的浏览器下显示你想给你的用户提供的信息,联想下

photoshop基础入门教程(免费)

Photosop基础知识 一、Photosop是ADOBE公司推出的图形图像处理软件,功能强大,广泛应用于印刷、广告设计、封面制作、网页图像制作、照片编辑等领域。利用Photosop可以对图像进行各种平面处理。绘制简单的几何图形、给黑白图像上色、进行图像格式和颜色模式的转换。 二、Photosop7.0的启动与退出 1、启动Photoshop的方法: 单击开始/程序/Photoshop7.0即可启动.或者打开一个Photoshop文件也能够启动Photoshop. 2、退出Photoshop的方法: 单击关闭按钮或按下CTRL+Q组合键或ALT+F4组合键,都可以退出Photoshop。 三、Photoshop的窗口组成(标题栏、菜单栏、工具栏、工具箱、图像图口、控制面板、状态栏、Photoshop 桌面) 1、标题栏:位于窗口最顶端。 2、菜单栏:其中包括9个菜单。位于标题栏下方。 3、工具栏:位于菜单栏下方。可以随着工具的改变而改变。 4、工具箱:位于工具栏的左下方。 5、图像窗口:位于工具栏的正下方。用来显示图像的区域,用于编辑和修改图像。 6、控制面版:窗口右侧的小窗口称为控制面版。用于改变图象的属性。 7、状态栏:位于窗口底部,提供一些当前操作的帮助信息。 8、Photoshop桌面:Photoshop窗口的灰色区域为桌面。其中包括显示工具箱、控制面板和图像窗口。 四、图像窗口:图像窗口由(标题栏、图像显示区、控制窗口图标) 1、标题栏:显示图像文件名、文件格式、显示比例大小、层名称以及颜色模式。 2、图像显示区:用于编辑图像和显示图像。 3、控制窗口图标:双击此图标可以关闭图像窗口。单击此图标,可以打开一个菜单,选择其中的命令即可。

html5入门视频教程百度云网盘分享

html5入门视频教程百度云网盘分享 html5的应用范围广阔,从应用到开发。html 5的迅速发展,html5开发人才的需求也是持续增长。从现在的招聘人才需求来看,html5前端工程师已成为IT行业的紧缺型人才,未来几年会发展得更好,学习好html5,就等于迈进了高薪就业的大门。想学好html5?html5入门视频教程百度云网盘分享给你。 千锋html5教程第1部分:课程体系解读 https://www.360docs.net/doc/908346498.html,/s/1o7B9OYA 千锋html5教程第2部分:微案例讲解 https://https://www.360docs.net/doc/908346498.html,/s/1nwyNFg1 千锋H5视频教程第3部分:知识点讲解 https://www.360docs.net/doc/908346498.html,/s/1jICHs9o 千锋Vue组件之手机通讯录实战课程

https://www.360docs.net/doc/908346498.html,/s/1c1FrXLY 千锋微信小程序基础与实战 https://https://www.360docs.net/doc/908346498.html,/s/1xE35SQcvW0sCF2NoR_ONiw 从目前各大招聘网站分来看,html5开发工程师的用人数量,已经远远超过了主流的编程语言Java、ASP和iOS等的开拓人员的数量。随着谷歌、YouTube、Twith等大型企业纷纷将视线转投向html5,更确定了html5在互联网时代的发展前景。据统计,我国对于html5前端工程师人员的缺口将达12万,目前北京、上海、广州、深圳等地的html5前端工程师薪资是一飙再飙。 时下,在传统经济低迷的情况下,市场对人才的需求也在不断发生变化。在过去的2017年里,html5开发工程师是比较有“钱”途的工作,并且薪水增加幅度也大。 在今年的发展趋势中,我们也不难看出,2018年的待遇薪资比去年增加了不少。html5不管是从发展前景还是从就业前景来看,都是非常可观的,所以

HTMLCSS网站设计基础教程教学大纲

H T M L C S S网站设计基 础教程教学大纲 The document was prepared on January 2, 2021

《HTML5+CSS3网站设计基础教程》课程教学大纲 (课程英文名称) 课程编号:201601210011 学分:5学分 学时:76学时(其中:讲课学时:47学时上机学时:26学时) 先修课程:计算机基础、计算机网络、计算机应用 后续课程:UI设计、JavaScript网页特效 适用专业:信息技术及其计算机相关专业 开课部门:计算机系 一、课程的性质与目标 《HTML5+CSS3网站设计基础教程》是面向计算机相关专业的一门专业基础课,涉及网页基础、HTML标记、CSS样式、网页布局、变形与动画等内容,通过本课程的学习,学生能够了解网页web发展历史及其未来方向,熟悉网页设计流程、掌握网络中常见的网页布局效果及变形和动画效果,学会制作各种企业、门户、电商类网站。 二、课程设计理念与思路

课程设计理念:高职教育的集中实践教学环节需明确必要的理论知识的生化与知识层面的拓展,不能局限于单纯的技能训练。单纯的技能训练不是提高高等职业教育的理想课程。以能力的培养为重点,以就业为导向,培养学生具备职业岗位所需的职业能力,职业生涯发展所需的能力和终身学习的能力,实现一站式教学理念。 课程设计思路:基于工作过程开发课程内容,以行动为导向进行教学内容设计,以学生为主体,以案例(项目)实训为手段,设计除理论学习与技能掌握相融合的课程内容体系。教学整体设计“以职业技能培养为目标,以案例(项目)任务实现为载体、理论学习与时间操作相结合”。 三、教学条件要求 开发工具:DreamweaverCS6 四、课程的主要内容及基本要求 第一章初识HTML5

Photoshop 7.0基础教程(新手入门)

Photosop 基础知识 一、Photosop是ADOBE公司推出的图形图像处理软件,功能强大,广泛应用于印刷、广告设计、封面制作、网页图像制作、照片编辑等领域。利 用Photosop可以对图像进行各种平面处理。绘制简单的几何图形、给黑白图像上色、进行图像格式和颜色模式的转换。 二、Photosop7.0的启动与退出 1、启动Photoshop的方法: 单击开始/程序/Photoshop7.0即可启动.或者打开一个Photoshop文件也能够启动Photoshop. 2、退出Photoshop的方法: 单击关闭按钮或按下CTRL+Q组合键或ALT+F4组合键,都可以退出Photoshop。 三、Photoshop的窗口组成(标题栏、菜单栏、工具栏、工具箱、图像图口、控制面板、状态栏、Photoshop 桌面) 1、标题栏:位于窗口最顶端。 2、菜单栏:其中包括9个菜单。位于标题栏下方。 3、工具栏:位于菜单栏下方。可以随着工具的改变而改变。 4、工具箱:位于工具栏的左下方。 5、图像窗口:位于工具栏的正下方。用来显示图像的区域,用于编辑和修改图像。 6、控制面版:窗口右侧的小窗口称为控制面版。用于改变图象的属性。 7、状态栏:位于窗口底部,提供一些当前操作的帮助信息。 8、Photoshop桌面:Photoshop窗口的灰色区域为桌面。其中包括显示工具箱、控制面板和图像窗口。 四、图像窗口:图像窗口由(标题栏、图像显示区、控制窗口图标) 1、标题栏:显示图像文件名、文件格式、显示比例大小、层名称以及颜色模式。 2、图像显示区:用于编辑图像和显示图像。 3、控制窗口图标:双击此图标可以关闭图像窗口。单击此图标,可以打开一个菜单,选择其中的命令即

ArchiCAD入门中文教程

ArchiCAD中文教程 带领您进入ArchiCAD的世界,一步一步地创建一个虚拟建筑。 步骤 00 –介绍 (1) 步骤 01 –建立布局 (4) 步骤 02 –利用楼层 (18) 步骤 03 –完成建筑封顶 (23) 步骤 04 –发展设计 (28) 步骤 05 –添加门窗 (38) 步骤 06 –增加楼梯 (52) 步骤 07 –定义房间用途和空间 (57) 步骤 08 –增加最终细节 (61) 步骤 09 –测量和估算建筑成本 (65) 步骤 10 –向客户演示 (69) 步骤 00 –介绍 我们将向您展示使用一个物体模型是多么容易的一件事,30分钟内您将完成所有的建筑系统,为您的客户和项目合作伙伴递送高质量的设计和图纸,ArchiCAD 虚拟建筑使用的概念都是您司空见惯的,如如墙、门、楼板和屋顶等,我们的演示过程是符合您传统的设计方式的,不过不是二维中的绘图,而是使用了三维几何和其他属性的智能物体。 “The ArchiCAD in 30 minutes”光盘包含的是一个提供仅限制了保存和打印功能的该软件的演示版。安装好后,我们将带来您完成10个步骤,每个步骤的ArchiCAD 项目文件都可以在ArchiCAD 8.0 Demo/ArchiCAD in 30 minutes目录下找到,您

必须在一次完成一个步骤,因为您不能保存,您只需要打开对应步骤的文件,该步骤之前的所有步骤完成的内容都有。 您将学习创建一个小展览室,底楼是展览空间,二楼为画廊,以及其他一些员工和参观者所需要的日常设施。 建筑平面图如下,不同的用户界面元素将帮您完成建筑该项目。

自学html5基础教程视频网盘下载免费分享

自学html5基础教程视频网盘下载免费分享Html5作为现在热门的软件之一,吸引了很多人选择这门技术,作为未来职业的发展方向,html5入门门槛低,薪资高也是吸引大家学习的主要原因,毕竟学会这门技术就等于踏入了高薪大门,谁不想多挣钱呢? 现在想要学习html5开发,在网上可以找到很多的免费学习资料和视频,但是很多都是老旧技术,也有很多不够完整,这样的技术学完可能也不能发挥很好的作用。所以,想学习,找到好的学习资料很重要,现在小编给大家免费分享html5基础教程视频。 千锋html5教程第一部分: 课程体系解读:https://www.360docs.net/doc/908346498.html,/s/1o7B9OYA 千锋html5教程第二部分: 微案例讲解:https://https://www.360docs.net/doc/908346498.html,/s/1nwyNFg1 千锋H5视频教程第三部分:

知识点讲解:https://https://www.360docs.net/doc/908346498.html,/s/1nwyNFg1 这些视频链接都是可以免费打开下载观看,对于初学html5的同学来说,这样的完整视频教程对于学习还是有很大帮助的,毕竟不用再去浪费时间去寻找,这样省去了不必要的麻烦。 如果这些视频教程不能满足你的学习需求,可以登录千锋咨询,而且也可以去免费试听课程,千锋为学员免费提供了长达两周的课程试听,去听听老师的讲师方式和思路,这样对于学习有更大的帮助,毕竟老师都是有经验的,他们总结出来的学习方法,肯定比我们自己去摸索效果要好得多。 千锋教育2018年全新升级更新了全栈HTML5+课程大纲V10.0内容 HTML5课程升级后优势 课程大纲升级后,覆盖热门大数据可视化内容,深度贯穿前端后端开发,紧贴主流企业一线需求,注重项目和实战能力,真正做到项目制教学,业内罕见。 课程特色:注重全栈思维培养 全栈HTML5工程师不止是技术层面,千锋着力培养学员的大前端视角与全栈思维,就业后不仅有能力解决工作中的疑难问题,更有实力胜任项目leader! HTML5课程升级内容 1.新增时下大热的大数据可视化内容

html入门教程适合初学者

希望可以帮到大家 一、HTML基本概念 什么是HTML文件? ?HTML的英文全称是Hypertext Marked Language,中文叫做“超文本标记语言”。?和一般文本的不同的是,一个HTML文件不仅包含文本内容,还包含一些Tag,中文称“标记”。 ?一个HTML文件的后缀名是.htm或者是.html。 ?用文本编辑器就可以编写HTML文件。 这就试写一个HTML文件吧! 打开你的Notepad,新建一个文件,然后拷贝以下代码到这个新文件,然后将这个文件存成first.html。 Title of page This is my first homepage. This text is bold

要浏览这个first.html文件,双击它。或者打开浏览器,在File菜单选择Open,然后选择这个文件就行了。 示例解释 这个文件的第一个Tag是,这个Tag告诉你的浏览器这是HTML文件的头。文件的最后一个Tag是,表示HTML文件到此结束。 在和之间的内容,是Head信息。Head信息是不显示出来的,你在浏览器里看不到。但是这并不表示这些信息没有用处。比如你可以在Head信息里加上一些关键词,有助于搜索引擎能够搜索到你的网页。 在之间的内容,是这个文件的标题。你可以在浏览器最顶端的标题栏看到这个标题。 在和之间的信息,是正文。 在之间的文字,用粗体表示。顾名思义,就是bold的意思。 HTML文件看上去和一般文本类似,但是它比一般文本多了Tag,比如,等,通过这些Tag,可以告诉浏览器如何显示这个文件。 HTML元素(HTML Elements) ?HTML元素(HTML Element)用来标记文本,表示文本的内容。比如body, p, title 就是HTML元素。 ?HTML元素用Tag表示,Tag以<开始,以>结束。 ?Tag通常是成对出现的,比如。起始的叫做Opening Tag,结尾的就叫做Closing Tag。 ?目前HTML的Tag不区分大小写的。比如,和其实是相同的。HTML元素(HTML Elements)的属性

ps基础图文教程新手入门必看—新手速成之秘诀

PS抠图方法 一、魔术棒法——最直观的方法 适用范围:图像和背景色色差明显,背景色单一,图像边界清晰。 方法意图:通过删除背景色来获取图像。 方法缺陷:对散乱的毛发没有用。 使用方法:1、点击“魔术棒”工具; 2、在“魔术棒”工具条中,在“连续”项前打勾; 3、“容差”值填入“20”。(值可以看之后的效果好坏进行调节); 4、用魔术棒点背景色,会出现虚框围住背景色; 5、如果对虚框的范围不满意,可以先按CTRL+D取消虚框,再对上一步的“容差”值进行调节; 6、如果对虚框范围满意,按键盘上的DELE键,删除背景色,就得到了单一的图像。 二、色彩范围法——快速 适用范围:图像和背景色色差明显,背景色单一,图像中无背景色。 方法意图:通过背景色来抠图。 方法缺陷:对图像中带有背景色的不适用。 使用方法:1、颜色吸管拾取背景色; 2、点击菜单中“选择”功能里的“色彩范围”功能; 3、在“反相”项前打勾,确定后就选中图像了。 三、磁性索套法——方便、精确、快速和我常用的方法 适用范围:图像边界清晰。

方法意图:磁性索套会自动识别图像边界,并自动黏附在图像边界上。 方法缺陷:边界模糊处需仔细放置边界点。 使用方法:1、右击“索套”工具,选中“磁性索套”工具; 2、用“磁性索套”工具,沿着图像边界放置边界点,两点之间会自动产生一条线,并黏附在图像边界上。 3、边界模糊处需仔细放置边界点。 4、索套闭合后,抠图就完成了。 四、(索套)羽化法——粗加工 适用范围:粗略的抠图。 方法意图:粗略抠图,不求精确。 方法缺陷:图像边界不精确。 使用方法:1、点击“索套”工具; 2、用索套粗略地围住图像,边框各处要与图像边界有差不多的距离;这点能保证之后羽化范围的一致性,提高抠图的精确性; 3、右击鼠标,选择“羽化”功能; 4、调节羽化值,一般填入“20”,确定后就粗略选中图像了。羽化值的大小,要根据前一步边框与图像的间距大小调节。 五、(索套)钢笔工具法——最精确最花工夫的方法 适用范围:图像边界复杂,不连续,加工精度度高。 方法意图:完全*手工逐一放置边界点来抠图。 方法缺陷:慢。抠一个图连手脚指都抠的话,要15分钟左右。 使用方法: 钢笔工具法步骤如下: 1、索套建立粗略路径