Papervision3D类关系解析(二)

本文介绍了3D图形渲染的基本概念和技术,包括CameraObject3D、SceneObject3D等关键类的作用与用法,以及3D物体如何通过这些类被创建、管理和渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

6.proto.CameraObject3D
CameraObject3D类:继承自DisplayObject3D,所有摄像机的基类

(1)属性:

zoom :Number:要渲染的物体的缩放,值越大,则场景就放大,距离就缩小,将它与focus一起使用
focus :Number:正数,表示观察者到近平面的距离,这是任何物体与camera的最近距离,将它与zoom一起使用(高focus值可以放大物体之间的距离,这样就可以允许更大的深度域,模拟广角镜的效果,或鱼眼)

sort :Boolean:渲染时物体是否排序

var DEFAULT_POS :Number3D = new Number3D( 0, 0, -1000 ):新摄像机的默认位置

(2)方法:

transformView( transform:Matrix3D=null ):void:world space--->camera space

_flipY :Matrix3D = Matrix3D.scaleMatrix( 1, -1, 1 ); //y值倒转

tilt( angle:Number ):void:摄像机绕x轴转动
pan( angle:Number ):void:摄像机绕y轴转动

7.proto. SceneObject3D(场景管理)

SceneObject3D类:继承自DisplayObjectContainer3D,是所有场景的基类

场景是放置物体的地方,它包含3D环境

场景管理所有渲染的物体,它扩展了DisplayObjectContainer3D类来分配显示物体

SceneObject3D是抽象基类,因此不能实例化

(1)属性:
container :Sprite:你绘制到的地方

geometries :Dictionary:场景中的几何体列表

stats :Object:总体和当前统计信息(points,polys,triangles,performance,rendered)

objects :Array:场景中的物体列表

materials :MaterialsList:场景中的材质列表

(2)方法:

addChild( child:DisplayObject3D, name:String=null ):DisplayObject3D

removeChild( child:DisplayObject3D ):DisplayObject3D

renderCamera( camera :CameraObject3D ):void:渲染,流程如下:
       <1> Render performance stats;

       <2> Materials: MovieMaterial.updateAnimatedBitmaps();

       <3> 3D projection:
        1> Transform camera: camera.transformView();

              2> Project objects:

       <4> Z sort: this.objects.sortOn( 'screenZ', Array.NUMERIC );

       <5> Render objects: renderObjects( camera.sort );

8.proto. GeometryObject3D

GeometryObject3D类:继承自EventDispatcher,包含一对象的MESH定义

(1)属性:
material: MaterialObject3D:材质

materials:材质列表

boundingSphere2:边界球半径的平方

faces    :Array:MESH的面

vertices :Array:顶点

transformVertices(transformation:Matrix3D):貌似未实现

(2)方法:
transformUV( material:MaterialObject3D ):void:

getBoundingSphere2():Number

9.proto. MaterialObject3D

MaterialObject3D类:继承自EventDispatcher,所有材质的基类。是抽象基类,故不能实例化

(1)属性:

bitmap :BitmapData:透明或不透明的BitmapData纹理

smooth :Boolean:绘制BitmapData纹理时是否要平滑

lineColor :Number:面的outline的RGB颜色

lineAlpha :Number:面的outline的8位的alpha值(若为0,则不绘制outline)

fillColor :Number:面的填充颜色(只有无纹理时才有效)

fillAlpha :Number:alpha值(8位)

get doubleSided():是否双面shade

oneSide :Boolean:是否单面shade

invisible :Boolean:是否不可见(不画)

opposite :Boolean:是否相反(只用于双面shade)

scene :SceneObject3D:所属的scene

static public var DEFAULT_COLOR :int = 0x000000;:材质的默认颜色(黑色)

static public var DEBUG_COLOR :int = 0xFF00FF;:DEBUG材质的颜色

name :String:材质名

id :Number:材质ID

maxU :Number

maxV :Number

geom目录

10. Vertex2D类:2D projected vertices

(1)属性:

       x,y,z

       extra:Object

       visible :Boolean:设置该顶点在经过投影后是否可见。若为false,则表示该顶点在摄像机平面的后面

11. Vertex3D类:3D顶点

同10

12. Vertices3D类:继承自DisplayObject3D类,顶点组

方法:
project( parent :DisplayObject3D, camera :CameraObject3D, sorted :Array=null ):Number:将3d坐标投影到2d平面

boundingBox():Object:计算包围盒,返回{minX, maxX, minY, maxY, minZ, maxZ}

transformVertices( transformation:Matrix3D ):void:变换顶点

13. Mesh3D类:继承自Vertices3D类,创建和显示由顶点和三角形组成的3D物体

方法:
project( parent :DisplayObject3D, camera :CameraObject3D, sorted :Array=null ):Number

projectTexture( u:String="x", v:String="y" ):void:从指定平面的平面投影(u-纹理水平轴,v-纹理垂直轴)

14. Face3D类:渲染线性采样的纹理贴图的三角形,也支持颜色填充和轮廓线(绘制代码就在这里!!!)

(1)属性:

vertices :Array:一个三角形的3个顶点

materialName :String:材质名

uv :Array:每个三角形顶点的UV坐标

screenZ :Number:转换后的三角形的平均深度

visible :Boolean:面是否可见

id :Number:面ID

存储三角形顶点的引用:

private var v0:Vertex3D;

       private var v1:Vertex3D;

       private var v2:Vertex3D;

(2)方法:

transformUV( instance:DisplayObject3D=null ):Matrix:应用更新后的UV纹理映射值到三角形上,这用来加速渲染

render( instance:DisplayObject3D, container:Sprite ): Number:渲染三角形

渲染流程:

<1>.内部

有纹理:

graphics.beginBitmapFill( texture, _localMatrix, true, material.smooth);

无纹理:

graphics.beginFill( material.fillColor, fillAlpha );

<2>.轮廓线

lineAlpha>0:

graphics.lineStyle( 0, material.lineColor, lineAlpha );

lineAlpha=0:

graphics.lineStyle();

<3>.画三角形

// Draw triangle

graphics.moveTo( x0, y0 );

graphics.lineTo( x1, y1 );

graphics.lineTo( x2, y2 );

<4>.显示出来

graphics.lineTo( x0, y0 ); //画轮廓线

graphics.endFill(); //显示三角形

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值