传智播客 韩顺平 php从入门到精通 61-78讲面向对象课堂笔记

2024-04-30

传智播客 韩顺平 php从入门到精通 61-78讲面向对象课堂笔记(共3篇)

篇1:传智播客 韩顺平 php从入门到精通 61-78讲面向对象课堂笔记

做网站 Web程序。

需要制作一台可以在网络上被别人访问到的机器。

安装了浏览器的计算机:

browser端 能够提供网络资源的计算机:(网站在这台计算机上),能够提供某种服务。Server端。

B/S是什么意思? 浏览器/服务器的架构:

请求:浏览器端向服务器端发送数据。Request 响应:服务器向浏览器端发送数据。回应,Response

什么样的计算机叫做服务器端? 安装了服务器软件的计算机。

Web服务器软件:iis,nginx,apache。

其中apache还是目前与php配合使用最多的服务器软件:

安装apache这个软件,使jsj成为一台web服务器。

http:// Apache的默认的文档目录 apache的安装目录下/htdocs/

什么是静态网站,动态网站?

静态,网站上所有的内容,都是由静态页面提供的。

动态:网站的内容,是来源于某个数据源(数据库,互联网),而,在需要展示某些数据时,通过某种语言,将数据从数据源内提取,然后再展示到页面上。

如果需要做动态网站,需要

1,数据源(数据库)mysql数据库

2,某种语言(用于提取和展示数据之用)PHP

Amp开发:

利用apache作为web服务器,使别人可以访问到我们的网站 利用mysql作为数据源,可以保存动态网站所需要的数据 利用php来获得某个操作所需要的数据。

小测试: 输出1-100 编写php文件:

访问这个php文件:

发现,可以访问到,但是不能解析。

Apache只有提供被访问的功能,而不能提供解析php代码的功能。

因此需要安装php程序,提供解析php代码的功能:

安装PHP:

所有的请求都是web服务器来接收的(apache),但是其中某些资源需要php来处理。通常的处理方式,是将php作为apache内部的一个模块来管理的。

将php安装成apache模块:

使用一个apache的指令,loadModule来完成:

解压php的安装包:

不需要安装可以直接执行 将php软件复制到相应的目录: E:/amp/php

由于不需要安装,目录内的可执行文件直接可以使用:

在php目录内,有个文件,就是php为apache提供的apache模块:

需要使用apache的LoadModule载入这个模块即可:

需要在apache的配置文件内,使用上面的LoadModule指令: apache的配置文件在 apache的安装目录/Conf/httpd.conf

增加如下指令即可:

修改配置文件后,需要重启动apache服务才可以:

配置apache,告知apache,哪样的前请求需要调用php来解析,而哪些不需要: 通过请求的资源的后缀名

使用apache的FilesMatch指令来完成: 当匹配到php后缀时,调用php来处理: Apache的配置文件内:

请求php文件时,php代码可以执行:

大家可以使用phpinfo()函数来测试以下,当前的php运行的环境:

安装php后,需要配置一些最基本的配置项: 修改php的配置文件: Php的安装目录/php.ini

根据需要,将相应的更改成php.ini即可:

由于php作为apache一个模块,因此需要告知apache,在哪里才能找到php的配置文件。利用apache的指令PhpIniDir来完成:

修改配置文件,达到某些目的:

1,时区

2, php扩展文件的目录。Php的很多功能,并不是内置到php的软件内的。在需要使用某个功能时,再载入即可。这个扩展的功能文件是被保存到某个目录内的,称之为php的扩展目录: Extension_dir:

修改完了php的配置,也需要重启apache才能生效

如果我们的php需要操作数据的话,需要利用数据软件了。安装Mysql。

1,安装 2,配置

配置mysql的安装目录,和mysql数据的保存目录:

安装完成时,勾选运行配置向导,完成配置的过程:

配置字符集:

简单介绍Mysql: 数据库服务器:

属于server端。因此,需要等待某个程序请求他才可以运行。

能够对mysql数据库服务器发出请求的我们称之为mysql客户端。

C/S Client客户端

Server服务器

在安装完mysql后,其实安装了2个软件1,mysql的服务器端,2,mysql的客户端。

我们需要使用php来操作mysql。

其实 在php操作mysql的过程中,php就变成了 mysql的客户端。

Php能够作为mysql的客户端,使用php的php_mysql.dll这个扩展完成,而且,这个扩展不是默认开启的。

开启相应的mysql的操作扩展,利用php的指令extension来完成。Php.ini:

B/S C/S

1,服务器在监听(运行),提供某个服务

2,浏览器或者客户端,对服务器发出请求。在发送请求时,请求的数据一定要按照某种数据格式才可以。数据格式在网络数据传输时称之为网络协议。3,服务器接收到请求后,会根据请求数据,进行相应的操作。4,将处理好的结果返回给浏览器(客户端),回应。Response 5,浏览器端(客户端)对回应的数据进行展示输出,b/s 都是用浏览器发出请求的。

http https c/s架构,都是采用某个服务专用的客户端发出的请求。

Bs架构通常,任何两次请求回应周期是没有任何联系的。在发出请求时,都需要先建连接。

Cs通常,在连接一次之后,通常就会保持住这个连接,后续的操作,就不需要再次建立连接了。

PHP与apache联系:

1,php作为apache的模块而存在。loadModule 2,web服务器与php之间通过 CGI方式产生联系。CGI(通用网关接口),IIS+PHP。现在CGI被fastCGI。Nginx+PHP

apache的虚拟主机:

通常一个web服务器,代理的是一个网站。

有时我们需要利用一个web服务器,管理多个站点。不同的站点拥有独立的域名。

通过配置apache服务器,达到,访问

Test.kang.com时,看到的是test目录的内容。Shop.kang.com时,看到的是shop目录的内容

Apache的基于域名的虚拟主机技术:

主机:一个网站,就是一些php文件的集合,一个保存php文件的目录 域名:指向某个网站的名称。

通过修改apache配置文件达到效果:

Apache/comf/httpd.conf 原则上在这个配置文件内写虚拟主机的配置就可以了。但是通常我们都是将虚拟主机的配置写到某个单独的配置文件内,然后将这个虚拟主机配置文件再载入到apache的这个httpd.conf配置文件内。引入的操作:

虚拟主机的专门的配置文件:

编辑这个虚拟主机文件,增加虚拟主机:

在配置文件内,每一个指令段就配置了一个虚拟主机。增加一个虚拟主机,就是:增加一个VirualHost指令段即可:

域名和目录是一个虚拟虚拟主机最基本的必备元素。

完成以上的操作,apache配置已经完成,apache上已经存在两个虚拟主机了:

在配置了虚拟主机之后,我们对web服务器的默认访问(没有使用配置的虚拟主机域名的访问),都会访问到默认的主机上。

默认的主机:

1,在配置了虚拟主机后:默认的主机就是 第一个配置的虚拟主机 2,在没有配置虚拟主机时,是htdocs目录。

那么怎么才能在使用虚拟主机的前提下,让localhost访问到原来的htdocs?

如何能够通过在浏览器上输入相应的虚拟主机域名访问到我们的虚拟主机呢? 在浏览器端,需要通过相应的域名,解析成目标服务器的ip地址才可以。

可以通过过浏览器端操作系统上自带的 域名解析文件完成。Hosts

配置虚拟主机时,常用的配置:

目录的权限的配置

利用apache的directory指令段完成配置 看 httpd.conf的配置:

目录级别的配置,对当前目录,及其后代目录有效果。

如果在apache的配置文件内,没有对某个目录进行配置,则采用默认的目录配置

可以通过修改默认的配置达到目的,但是通常是针对目录进行单独配置: 增加一个 Directory指令段:

为了将目录与虚拟主机联系起来,通常在VirtualHost内,使用Directory指令 Conf/extra/httpd-vhosts.conf

直接访问目录的配置:

在访问目录时,先检测当前目录是否配置了目录索引页,如果配置了索引页,则展示索引页的内容。目录的索引页使用apache的指令 directoryIndex完成配置。这个指令是可以写到directory段内。

如果没有配置目录索引页:则需要将目录的的内容以列表的形式显示出来,但是是通过配置apache的指令options加以配置,是否可以显示目录的索引列表。

可以在配置 options时 增加上允许符号连接的配置:

Apache的配置文件系统:

Apache程序,只会在apache服务器启动时,读取apache配置文件的内容,称之为apache主配置文件。

一旦配置文件的语法出错,就会导致apache服务器启动失败,提示:

Apache提供一个apache的配置文件检查的功能:

也可以通过 cmd,命令行运行:

Apache还有一个配置文件,称之为apache的分布式配置文件,apache允许在某个目录内部,使用独立的配置文件,来配置当前目录及其后代目录的中的一些设置。但是此时配置文件名称,就不是httpd.conf了 而是.htaccess

在这个.htaccess配置文件中配置的内容,只能是目录级别的配置。

但是默认情况下,分布式配置文件是不可以使用的。可以通过在主配置文件中使用apache的 Allowoverride指令加以配置。由于分布式配置文件是配置目录的,因此 allowoverride也是需要写到Directory段。

分布式与主配置文件的区别:

1,主配置文件需要保存到Conf目录中,而分布式需要保存到所有需要配置的目录中

2,主配置文件只要在apache启动时,才读取,而分布式配置文件,在apache访问到某个目录时都会读取一次。

作业

1,每个人配置一个虚拟主机: 域名是 test.ip.com Test.100.com

2,在test.ip.com上增加一个表单页面 Welcome.html页面

最好在表单提交时,验证姓名不能为空,为空给出提示,不能提交。

分析上面的例子:

发生了几次请求和回应的过程。

篇2:传智播客 韩顺平 php从入门到精通 61-78讲面向对象课堂笔记

4.1.1 散布

“散布”复合对象能够将源对象分布于另一个对象的表面,并且可以设置对象分布的数量、状态等,还可以设置为动画。创建“散布”对象的步骤如下:

(1)首先打开本书附带光盘Chapter-04“练习1.max”文件,在该场景中包括草和一个平面对象,我们需要将草对象铺满整个平面对象。

(2)在场景中选择“草”对象,进入“创建”命令面板的“几何体”次命令面板,在该面板的下拉列表栏中选择“复合对象”选项,然后单击“散布”命令按钮,如图4-2所示。

图4-2 单击“散布”命令按钮

(3)在出现的“拾取分布对象”卷展栏中单击“拾取分布对象”按钮,在视图中拾取平面对象,这时平面对象上仅有一组草对象,如图4-3所示。

图4-3 拾取分布对象

(4)在“散布对象”卷展栏中的“源对象参数”选项组中将“重复数”设置为500,这时整个平面对象上将铺满草对象,如图4-4所示。

图4-4 “散布”对象效果

4.1.2 一致

“一致”复合对象主要有2种功能,第1种功能是可以将一个对象的所有顶点都在一个平行的方向投影,该功能能够将马路适应崎岖的地面;第2种功能允许有不同顶点的两个对象相互变形,它能够使用一个网格对象的周围收缩应用另一个网格对象。创建“一致”对象的步骤如下:

(1)打开本书附带光盘Chapter-04“练习2.max”文件,首先在场景中选择作为包裹器的“公路”对象。

(2)进入“创建”命令面板的“几何体”次命令面板,在该面板的下拉列表栏中选择“复合对象”选项,然后单击“一致”命令按钮。

(3)在出现的“拾取包裹到对象”卷展栏中单击“拾取包裹对象”按钮,然后在“顶”视图中拾取包裹对象“山地”,效果如图4-5所示。

图4-5 使用“一致”命令效果

4.1.3 连接

使用“连接”复合对象,可通过对象表面的“洞”连接两个或多个对象。要执行此操作,需要删除每个对象的面,在其表面创建一个或多个洞,并确定洞的位置,以使洞与洞之间面对面。创建“连接”对象操作如下:

(1)打开本书附带光盘Chapter-04“练习3.max”文件,在场景中分别选择两个模型,并进入“面”次对象编辑状态,将相应的面删除,在对象要架桥的位置创建洞,如图4-6所示。

提示:此步操为“多边形”建模所涉及到的内容,在此只是简单提起,我们将在后面章节中详细讲述。

图4-6 删除面

(3)退出次对象编辑状态后,选择其中一个对象,在“复合对象”创建面板的“对象类型”卷展栏中,单击“连接”命令按钮。

(4)单击“拾取操作对象”卷展栏中的“拾取操作对象”按钮,然后选择另一个对象,效果如图4-7所示。

图4-7 使用“连接”命令效果

4.1.4 图形合并

使用“图形合并”命令能够将一个或多个二维形嵌入在网格对象的表面,创建的二维型沿自身的-Z轴向对象表面投影,然后创建新的节点、面和边界。可以通过编辑新创建的次对象,完成更复杂的建模效果。创建“图形合并”对象步骤如下:

(1)打开本书附带光盘Chapter-04“练习4.max”文件,该文档中包括一个网格对象和一个图形,并且图形朝网格对象的曲面方向进行投射。

(2)选择网格对象,在“复合对象”创建面板的“对象类型”卷展栏中,单击“图形合并”命令按钮。(3)在“拾取操作对象”卷展栏中单击“拾取图形”按钮,然后拾取二维形对象,如图4-8所示。

图4-8 使用“图形合并”命令创建图形

(4)当选择“操作”选项组中的“饼切”单选按钮时,网格对象上的投射图形内部的曲面将被切除,如图4-9所示。

图4-9 切除曲面

4.1.5 地形

通过“地形”命令能够将多个二维形对象组合成网格对象,这种建模方法通常用于创建地形。创建“地形”操作步骤如下:

(1)创建两个或两个以上的二维形对象。

(2)选择一个二维形对象,在“复合对象”面板的“对象类型”卷展栏中单击“地形”命令按钮。(3)在“拾取操作对象”卷展栏中单击“拾取操作对象”按钮,然后在视图中依次拾取二维形对象,如图4-10所示。

图4-10 使用“地形”命令效果

了解3ds Max中的布尔运算类型 4.2.1 了解布尔运算类型

在对布尔运算的创建方法有一个初步的认识之后,接下来需要为读者介绍3ds Max中所提供的5种布尔运算类型。

“并集”:该类型的布尔操作包含两个操作对象的体积,将两对象重叠的部分移除,如图4-12所示。

图4-12 “并集”布尔运算 “交集”:该类型布尔操作只包含两个操作对象复叠的部分,如图4-13所示。

图4-13 “交集”布尔运算

“差集(A-B)”:该类型布尔操作从操作对象A上减去操作对象A与操作对象B重叠的部分,如图4-14所示。

图4-14 “差集(A-B)”布尔运算

“差集(B-A)”:该类型布尔操作与“差集(A-B)”类型相反,如图4-15所示。

图4-15 “差集(B-A)”布尔运算

“切割”布尔操作为“优化”、“分割”、“移除内部”和“移除外部”4种类型。“优化”类型在操作对象B与操作对象A面的相交处添加新的顶点和边;“分割”类型类似于“优化”类型,只是新产生顶点和边与源对象属于同一个网格的两个元素;“移除内部”类型可以删除位于操作对象B内部的操作对象A的所有面;“移除内部”类型可以删除位于操作对象B外部的操作对象A的所有面,如图4-16所示。

图4-16 4种切割类型

编辑3ds Max中布尔运算次对象和材质附加选项 4.2.2 编辑布尔运算次对象

当对场景中创建的布尔运算对象不满意时,可以进入“操作对象”次对象对其外形进行编辑。选择布尔对象,进入“修改”面板。在该面板的堆栈栏中单击“布尔”选项左侧的展开符号,在展开的层级选项中选择“操作对象”选项,这时将进入该项次对象编辑状态。如图4-17所示。

图4-17 进入“操作对象”次对象编辑状态

在“参数”卷展栏的“操作对象”选项组中的显示窗中会显示布尔运算的次对象名称,进入“操作对象”次对象编辑状态后,在显示窗中选择某个次对象的名称选项,就可以对该项次对象进行编辑了,如图4-18所示。

图4-18 “参数”卷展栏

提示:在系统默认的情况下,减去对象在被选择状态以红色线框显示,源对象以白色线框显示。

“显示/更新”:该卷展栏中的“显示”选项组用来查看布尔操作的构造方式。当选择“结果”单选按钮后,视图上只显示布尔运算的结果;当选择“操作对象”单选按钮后,在视图中同时显示布尔运算的两个源对象;当选择“结果+隐藏的操作对象”单选按钮,在视图中显示布尔运算后的对象裁切线框。如图4-19所示为3种显示状态下的效果。

图4-19 3种显示状态

“更新”:该选项组的“始终”、“渲染时”和“手动”3个单选按钮,用来控制布尔运算效果的更新方式。

4.2.3 材质附加选项

当对指定不同材质的对象使用布尔操作时,3ds Max会显示“材质附加选项”对话框。此对话框提供了5种方法来处理生成的布尔对象的材质和材质ID,如图4-20所示。

图4-20 “材质附加选项”对话框

“匹配材质ID到材质”:使布尔对象的ID数目与操作对象之间的材质数量相匹配。

“匹配材质到材质ID”:保留操作对象的ID数目不变,布尔对象与操作对象的ID数相匹配。

“不修改材质ID或材质”:如果对象中的材质ID数目大于在多维/子对象材质中子材质的数目,那么得到的指定面材质在布尔操作后可能会发生改变。

“丢弃新操作对象材质”:丢弃指定于操作对象B的材质,将对布尔对象指定操作对象A的材质。“丢弃原材质”:丢弃指定于操作对象A的材质,对布尔对象指定操作对象B的材质。

使用3ds Max中的“放样”复合对象建模命令

4.3 使用“放样”复合对象建模

放样对象是通过一个路径形组合一个或多个截面型来创建二维形体,路径形相似于船的龙骨,而截面型相似于沿龙骨排列的船肋。它相对于其他复合对象具有更复杂的创建参数,从而可以创建出更为精细的模型。使用“放样”复合对象建模的方法如下:

(1)创建用于操作的路径型和截面型。

(2)选择路径型,在“复合对象”创建面板的“对象类型”卷展栏中单击“放样”命令按钮。(3)在“创建方法”方法卷展栏中单击“获取图形”按钮,然后在视图中拾取截面形,效果如图4-21所示。

图4-21 使用“放样”复合对象

读者也可以使用从截面型开始建立放样对象的方法,该方法与从路径形开始建立放样对象基本相同。若使用该方法,只需在步骤3中,单击“创建方法”卷展栏中的“获取路径”按钮,拾取路径型即可。在了解了放样对象的创建方法和一些基本概念后,接下来介绍放样的一些术语,帮助读者更好地掌握放样建模方法。

步数:用于描述曲线中每个顶点之间的分段。该数值常用来定义放样对象表面的光滑程度和网格密度,相似于几何体的分段数。如图4-22所示为设置不同步数放样模型。

图4-22 不同步数的放样模型

图形(截面形):样条线的集合定义型对象,如图4-23所示为一个放样对象中的两个截面型。路径型只能包含一条样条曲线,截面型可以包含任意数目的样条线,只是路径上的所有截面型所包含样条曲线的数目必须相等。放样对象中的截面型和路径型成为源对象的次对象。

图4-23 不同截面型

路径:定义放样中心的二维形,可以是开放的样条线,也可以是封闭的样条线,但是样条线不能有交叉点、不能为嵌套型。如图4-24所示为放样对象中的开放路径。

图4-24 放样对象中的开放路径

首顶点:二维形上的第一个顶点。放样对象过程中的一切运算都将从首顶点开始。当放样对象拥有多个截面型时,如果截面型的首顶点不匹配,放样对象将会出现扭曲现象。

4.3.1 使用多个截面型创建放样对象

在一条路径型上放置多个截面型可以创建出复杂的放样对象。使用多个截面形创建对象的重点是设置不同的路径位置,然后在不同的路径位置上拾取不同的截面型。下面为使用多个截面型创建放样的操作步骤:

(1)在视图中创建如图4-25所示的3个二维型。

图4-25 创建路径和截面型

(2)在视图中选择右侧的线图形,进入“复合对象”创建命令面板。在该面板的“对象类型”卷展栏中单击“放样”命令按钮,在“创建方法”卷展栏中单击“获取图形”按钮。(3)在视图中拾取视图左侧的圆图形,以确定拾取的截面形位于路径的0位置。

(4)在“路径参数”卷展栏中的“路径”参数栏中键入100,再次单击“获取图形”按钮,然后在视图拾取中间的二维图形,这时拾取的截面形位于路径100的位置。效果如图4-26所示。

图4-26 使用多个截面型创建对象

编辑3ds Max中的放样对象.3.2 编辑放样对象 当在场景中已经完成放样对象的创建后,可以进入“修改”面板对其进行编辑。放样对象中的截面型、路径形以及表面的光滑处理都是可以编辑的。

“曲面参数”:该卷展栏中的参数可以控制放样曲面的光滑以及指定是否沿着放样对象应用纹理贴图坐标,如图4-27所示。

图4-27 “面面参数”卷展栏

“平滑”选项组中的“平滑长度”和“平滑宽度”复选框处于启用状态时,路径方向和截面周长方向会产生平滑曲面效果,如图4-28所示。

图4-28 设置平滑

选择“贴图”选项组中的“应用贴图”复选框,可以为放样对象创建贴图坐标,该坐标会紧随放样对象的路径和截面型,从而使贴图更好地适应对象。“长度重复”和“宽度重复”参数控制贴图在路径和截面型方向的重复次数。如图4-29所示为应用贴图的放样模型。

图4-29 应用贴图坐标 “材质”选项组中的两个复选框用来控制对象的材质ID。“输出”选项组中的“面片”和“网格”单选按钮用于确定输出的类型。

“路径参数”:使用“路径参数”卷展栏可以控制沿着放样对象路径在各个间隔期间的图形位置,如图4-30所示。

图4-30 “路径参数”卷展栏

“路径”参数用来设置截面型在路径上的百分比。如图4-31所示为在路径的不同位置插入不同形状的图形。当选择“启用”复选框,“捕捉”参数处于可调整状态。“捕捉”参数用来设置沿着路径图形之间的恒定距离。“百分比”、“距离”和“路径步数”单选按钮为3种控制路径的计算方式。

图4-31 路径不同位置的截面型

“蒙皮参数”:该卷展栏中参数用于调整放样对象网格的复杂性和对象表面的显示,如图4-32所示。

图4-32 “蒙皮参数”卷展栏

“封口始端/封口末端”:启用这两个复选框后,将对路径第一个顶点和最后一个顶点处的放样端进行封口。如图4-33所示为禁用和启用封口时的放样模型。

图4-33 禁用和启用封口时的放样模型

“选项”选项组中的“图形步数”和“路径步数”用来设置横截面图形和路径图形曲线中每个顶点之间的分段,如图4-34所示。

图4-34 增加“图形步数”和“路径步数”参数效果

选择“优化图形”复选框可以忽略截面型上的直分段,如图4-35所示为启用和禁用“优化图形”时的放样对象。

图4-35 启用(左)和禁用(右)“优化图形”

选择“优化路径”复选框可以忽略路径型上的直分段,该项仅在“路径步数”模式下才可用。如图4-36所示为禁用“优化路径”时,放样路线使用更多步数;启用“优化路径”时,放样路线的直线部分无需更多步数。

图4-36 禁用和启用“优化步数”复选框

“自适应路径步数”:启用该复选框后,将分析放样,并调整路径分段的数目,以生成最佳蒙皮。“轮廓”:如果启用该复选框,则每个图形都将遵循路径的曲率,每个图形的正Z轴与形状层级中路径的切线对齐。如果禁用,则图形保持平行,且与放置在层级0中的图形保持相同的方向。如图4-37所示为禁用“轮廓”复选框时的放样路线,使得路线扭曲。

图4-37 禁用“轮廓”复选框的放样模型

“倾斜”:启用该复选框后,则只要路径弯曲并改变其局部Z轴的高度,图形便围绕路径旋转;如果禁用,则图形在穿越3D路径时不会围绕其Z轴旋转。如图4-38所示为启用“倾斜”复选框时的放样模型。

图4-38 启用“倾斜”复选框时的效果

选择“恒定横截面”复选框,可以在路径中的拐角处缩放横截面,以保持路径宽度一致。如图4-39所示为禁用和启用该复选框时的放样模型。

图4-39 禁用和启用“恒定横截面”复选框的效果

“线性插值”:该复选框用来控制截面形之间生成的蒙皮类型。如图4-40所示为禁用和启用该复选框时的放样对象。

图4-40 禁用和启用“线性插值”复选框时的放样对象

“翻转法线”:该复选框可以使用法线翻转的方法来修正内部外翻的对象。

“显示”:该选项组用来控制放样对象在视图上的显示。选择“蒙皮”复选框,则使用任意着色层在所有视图中显示放样的蒙皮,并忽略“着色视图中的蒙皮”设置。如果禁用,则只显示放样子对象。选择“着色视图中的蒙皮”复选框,则忽略“蒙皮”设置,在着色视图中显示放样的蒙皮。如果禁用,则根据“蒙皮”设置来控制蒙皮的显示。

使用3ds Max中的变形曲线命令4.3.3 使用变形曲线

使用变形曲线命令可以改变放样对象在路径上不同位置的形态。3ds Max中有5种变形曲线,分别为“缩放”、“扭曲”、“倾斜”、“倒角”和“拟合”。所有的编辑都是针对截面型的,截面型上带有控制点的线条代表沿路径方向的变形。在“变形”卷展栏中可以看到这5个变形曲线的命令按钮,在每个命令按钮的右侧都有一个激活/不激活按钮,用于切换是否应用变形的结果,并且只有该按钮处于激活状态,变形曲线才会影响对象的外形。如图4-41所示为“变形”卷展栏。

图4-41 “变形”卷展栏

提示:通过“修改”面板的“变形”卷展栏,可以访问放样变形曲线。“变形”在“创建”面板上不可用,必须在放样之后进入“修改”面板才能访问“变形”卷展栏。

1.使用缩放变形曲线

“缩放”变形曲线能够改变放样对象X和Y轴的比例因子,并且缩放的基点总是在路径上。下面通过香水瓶实例介绍“缩放”变形的使用方法。

(1)在视图中创建一个Line对象和Circle对象,然后完成放样模型,如图4-42所示。

图4-42 创建放样模型

(2)选择新创建的放样对象,进入“修改”面板。单击“变形”卷展栏中的“缩放”按钮,打开“缩放变形”对话框。

(3)在“缩放变形”对话框顶点工具栏上单击个控制点,右击结束插入角点操作。

“插入角点”按钮,在变形曲线上通过单击的方式添加5(4)通过在选择控制点上右击,转换控制点的属性,然后调整控制点,效果如图4-43所示。

图4-43 调整缩放曲线

(5)香水瓶模型的最终效果如图4-44所示。

图4-44 香水瓶的最终效果

2.使用扭曲变形曲线

“扭曲”变形曲线可以沿着路径方向旋转截面形,从而产生盘旋或扭曲效果。变形曲线处于0位置上,当向正值方向拖拽控制点时,截面形呈逆时针旋转;当向负值方向拖拽控制点时,截面形将呈顺时针旋转,如图4-45所示为使用扭曲变形制作的镜框模型。

图4-45 使用“扭曲”变形曲线效果

3.倾斜变形曲线

“倾斜”变形曲线围绕局部X轴和Y轴旋转截面形。该命令常用来辅助与路径有偏移的型生成其他方法难以创建的对象,效果如图4-46所示。

图4-46 使用“倾斜”变形曲线效果

4.倒角变形曲线

“倒角”变形曲线命令用来为放样对象添加倒角效果,该变形曲线相似于“倒角”修改器,但是“倒角”变形曲线可以产生比“倒角”修改器更丰富的效果,如图4-47所示。

图4-47 使用“倒角”变形曲线效果

拟和变形曲线在3ds Max中的具体应用

5.拟合变形曲线

“拟合”变形曲线通过定义对象在顶视图、前视图和侧视图的轮廓线,即可创建出合适的三维对象,该曲线通常用来创建电话、球拍等模型。为了巩固这部分内容,在此安排了一个香水瓶小实例。首先在本书附带光盘中打开该实例的练习文件,该文件的路径为:附带光盘Chapter-04“香水瓶01.max”文件,如图4-48所示。

图4-48 场景中的二维形对象

(1)在视图中选择“路径”对象,进入“创建”主命令面板下的“几何体”次命令面板,在该面板的下拉列表中选择“复合对象”选项,进入“复合对象”的创建命令面板。

(2)在“对象类型”卷展栏中单击“放样”命令按钮,在出现的“创建方法”卷展栏中单击“获取图形”命令按钮,然后在视图中拾取“截面”对象,创建放样对象,如图4-49所示。

图4-49 创建“放样”对象

(3)选择新创建的放样对象,进入“修改”面板。在“变形”卷展栏中单击“拟合”按钮,打开“拟合变形”对话框,如图4-50所示。

图4-50 “拟合变形”对话框(4)关闭顶点工具栏上的“均衡”按钮,使用X、Y轴不均匀变形。单击顶部工具栏上的“获取图形”按钮,接着在视图中拾取“图形”对象。(5)通过单击顶部工具栏上的所示的形状。

“逆时针旋转90度”和

“顺时针旋转90度”按钮,使对象呈如图4-

51图4-51 拾取第一个拟合图形后的效果

(6)单击顶部工具栏上的“显示Y轴”按钮,然后在视图中拾取“图形2”对象,并通过单击针旋转90度”和“顺时针旋转90度”按钮使对象成如图4-52所示的形状。

“逆时

图4-52 拾取第二个拟合图形后的效果

(7)香水瓶的最终效果如图4-53所示。读者可打开本书附带光盘Chapter-04“香水瓶02.max”文件进行查看。

图4-53 香水瓶的最后效果

在3ds Max中编辑放样对象次对象

4.3.4 放样对象次对象的编辑

当放样对象创建结束后,对对象的外形仍不满意时,可以进入放样对象的次对象对外形进行编辑。放样对象的次对象编辑工作需要在“修改”命令面板中进行,单击“修改”面板堆栈栏中的Loft选项左侧的展开符号,在层级选项中选择“图形”或“路径”选项就可以进入次对象的编辑模式,如图4-54所示。

图4-54 放样对象的次对象

在堆栈栏中选择“图形”选项后,进入截面形次对象编辑状态,可以对截面型进行变换和对齐截面等操作。如果路径上放置了多个截面形,常需要比较截面形的位置、以及方向或顶点是否对齐,3ds Max提供了“图形命令”卷展栏供读者进行设置,如图4-55所示。

图4-55 “图形命令”卷展栏

“路径级别”:用于设置截面型在路径上的位置。

“重置”:单击“重置”按钮可以撤销使用“选择并移动”和“选择并缩放”工具执行的图形旋转和缩放操作。

“删除”:用于从放样对象中删除截面型。

“比较”:单击该按钮,打开“比较”对话框。该对话框可以比较任何数量的截面型,并为确保首顶点正确对齐,使放样对象避免扭曲变形现象。“拾取图形”按钮用于选择选定放样对象中截面形,使其添加到“比较”对话框中。单击“重置”按钮可以从对话框中移除所有图形。如图4-56所示为“比较”对话框。

图4-56 “比较”对话框 “对齐”:使用“对齐”选项组中的“居中”、“默认”、“左”、“右”、“顶”和“底”6个按钮可针对路径对齐选定图形。“输出”选项组中的“输出”按钮可以将选择的截面型作为独立的对象放置在场景中。

选择堆栈栏中的“路径”选项,将进入“路径”次对象编辑状态。该项次对象只能进行沿Z轴旋转操作。“路径命令”:该卷展栏中的“输出”选项组中的“输出”按钮可以将路径作为独立的对象放置在场景中。单击“输出”按钮,会打开“输出到场景”对话框,如图4-57所示,单击“确定”按钮完成输出操作。

篇3:传智播客 韩顺平 php从入门到精通 61-78讲面向对象课堂笔记

第一章:

2分钟看完,老生常谈,即使没怎么用过java也知道这些。

第二章:

1.instanceof应该是c++中没有的,c++使用RTTI解决这个问题的,很难用。

2.super这种引用父类的方法也是比较简单的,C++中是用父类名::父类方法()解决的,有点难看。

3.自动类型转换和C++一样,精度变高的随便转,精度变低的会丢失。

4.强制类型转换只有(type)这一种,不像c++有static_cast、dynamic_cast、reinterpret_cast、和const_cast。

5.运算符什么的和c++几乎一模一样。

半小时看完。

第三章:

1.break可以跳出语句块,c++中没有语句块。语句块的定义就是在一段语句前加上花括号和冒号;

其他基本上和c++一样,5分钟看完。

第四章:

1.java数组越界会在运行时抛异常,c++不会,声明数组的方法也有些不一致。

java 声明数组的所有办法

int[] a = new int[4];

int a[] = new int[4];

int[] a = {1, 15, 26};

int a[] = {1, 15, 26};

2.java的数组是一个对象,自带length属性,使用简单。c++的数组不自带方法和属性,要知道数组长度只能sizeof(arrayObject)/sizeof(int)。当然如果使用STL中的vector之类的也和java一样简单。

3.java的所谓数组赋值(或者叫数组拷贝)其实就是c++中的两个数组指针的赋值,java没有指针,所以作者费了一大堆口水。好在java有垃圾回收,要不然一个指针的内存就算泄露了。至于真正的数组内容赋值,是使用System.arraycopy(ir, srcPos, ir, destPos, length);而C++一般使用memcpy等函数。若使用STL中的vector,那么就看vector的拷贝构造函数怎么写的,应该是vector的对象赋值过去而不是指针指过去。

4.重温了冒泡排序(时间复杂度O(n2)),和快速排序(最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n))。

5.For-Each语法被引入java了,在很多地方用起来真是简单。Python和c#早就支持了,c++中虽然STL的algorithm包中引入了for_each,但是由于需要使用函数指针还是略显繁琐。

这章挺多,看了一个多小时啊!

第五章:类和对象

1.Java中方法的重载和c++的一样,都是通过参数的不同来区别。但是c++中可以设置默认参数,而java不可以。

2.java中的对象大部分只能new出来,或者clone出来,或者反射出来,而不能直接在栈上定义出来。而c++的对象在栈上和堆上创建的都很多。

3.基本类型的参数传递,java和c++都是传值。对象的参数传递,java是传引用,c++是拷贝,也就是传值。其实c++中大部分时候也是传引用或者传指针,但java没有指针,也没有选择耗时耗空间的拷贝,只能传引用了。

这章对于c++程序员来说太简单,几分钟过一遍就可以了。

第六章:继承

1.方法被覆写后,如果要调用父类的方法,c++必须用父类名::方法名,而java用super.方法名即可。

2.多态和动态绑定,java和c++几乎一样,都很简单。

3.final关键字:java中的final关键字可以将一个类限制为无法继承的,同样的还有C#中的sealed关键字。而c++是没有这个玩意的。

4.java的抽象类和c++几乎一样。

5.java是独根语言,引入了Object类,它的clone方法就好像c++中的拷贝构造函数,它的equals方法是用来比较内容的,而toString方法是将对象作为字符串输出的。

这章对于c++程序员来说同样简单,几分钟过一遍就可以了。

第七章:接口

1.java中有接口。C++没有,唯一类似的是含有纯虚函数的虚类(没有纯虚基类这个说法)。但是COM、CORBA等中间件中都有IDL语言(接口定义语言),使用这些中间件的c++程序员也没有少写接口。

2.接口实现的一些规定:

1)如果实现接口的不是抽象类,则必须实现其接口的所有方法才能被实例化;

2)接口中所有的方法默认为public;

3.接口可以用来实现多态;

4.java的内部类和c++差不多,都没人关心,最多懒得想名字的时候用用那个匿名内部类(例如什么UI的响应函数)。

5.java的对象克隆,吹了一堆就是个c++中的拷贝构造函数。所谓什么“浅克隆、深克隆”问题,就是c++中拷贝构造是遇上类中定义了指针的问题。C++程序员一望即知。

接口是为了维护单继承机制弄出来的,花半小时看看还是值得的。

第八章:面向对象编程

C++程序员不用看。

第九章:异常处理

1.java的异常处理中有finally语句块,而c++中没有,所以程序员要自己想办法来处理异常发生后诸如“资源释放”之类的问题;

第十章:线程

1.java语言自带线程机制,c++目前还是不带线程机制的。虽然boost::thread库也被众多c++程序员广泛使用。但是windows下用得最多的还是windows SDK自带的线程函数;而linux下用得最多的还是pthread。另外还有一些号称同时支持多个平台的多线程库。

2.java多线程有两种方法实现,第一是派生Thread类,第二种是实现Runnable接口。

3.java线程分为4种状态:new、runnable、non runnable和done,这和其他线程库大同小异;

4.run、start、stop、sleep、suspend、resume、yield、wait、notify和notifyall等方法的含义也和其他线程库一致。但suspend、resume和stop等方法是不建议使用的,因为可能会导致死锁。

5.java可使用join方法来等待线程结束,而在某些线程库中join方法经常是不可用的。

6.java的互斥使用synchonized关键字实现,它很类似于boost.thread中的lock(mutex),只不过它是对线程对象隐含的锁加锁。其实这很不利于新手理解。另外还介绍了synchonized的一些乱七八糟的用法,相信对于新手这只有反作用。

这一章对于线程,介绍得比较浅显,实现简单的多线程应该没问题,但是稍微复杂一点的也许就需要其他的开发包了。Java线程连个Mutex类都没有,这是最让我吃惊的,仅仅使用synchonized来实现同步、互斥、信号量该多麻烦啊,也许是我还没弄懂java多线程吧。

第十一章:图形编程

1.IDE的年代,GUI还是画出来吧。Java中也就Layout类需要看看,其他大部分Layout类也是凑数的,根本不会有人用。

第十二章:事件处理

随便看看了解即可,新手可以试着写写代码,老手直接IDE中添加事件即可。

第十三章:Swing用户界面设计

同第十一章,随便看看即可。界面一般有专人搞,普通程序员能看懂就行了。

总结:《java从入门到精通》这本书整体质量尚可,c++熟手大概一到两天可以看完,掌握程度在80%左右。看完后能够有一些基本概念,可以写一些基本程序。看完后离入门还早,更谈不上精通了。

上一篇:少先队队干部培训图文下一篇:感恩的诗歌——《岁暮到家》