3DSTATE for Visual basic.Net开发(七)

3DSTATEfor Visual basic.Net开发

三峡大学土木水电学院3S实验室 肖泽云

注:转载请说明来源处!
高级篇:

五、Light and Shadows灯光和阴影

1、创建一个灯光源
用函数STATE_light_create来创建一个灯光源。
Dim CameraLocation() AsDouble = {0, 0, 100}
Dim SceneLight As UIntPtr = STATE_light_create("Light1", CameraLocation)
另外灯光的位置可以通过函数STATE_light_set_location来移动。
2、选择照亮的对象
如果选择照亮的对象是整个世界的话,用函数STATE_light_set_entity_to_light(SceneLight, 0)
如果选择照亮的是某个具体的对象的话,用函数STATE_light_set_entity_to_light(SceneLight, obj)
3、点亮灯光
建立了灯光源后,现在开始点亮灯光,用函数STATE_light_activate
STATE_light_activate(SceneLight, LIGHT_SET)
其中灯光操作有下列三个值:LIGHT_SET, LIGHT_ADD, 和LIGHT_SUBTRACT
注意:这些创建的光源是没有方向的,用函数STATE_light_set_type_of_light改变类型,用函数STATE_light_set_direction设置灯光的方向。此外,灯光的距离是有限的,用函数STATE_light_set_distance_reach设置灯光能达到的距离。若要整个世界照明,用函数STATE_light_set_entity_to_light来设置,这样会快些。默认的颜色为白色,即(255255255),用函数STATE_light_set_color改变光线的颜色。如:
Dim lightColor(2) AsByte
lightColor(0) = 100 : lightColor(1) = 100 : lightColor(2) = 100
STATE_light_set_color(SceneLight, lightColor)
4、灯光的类型
灯光类型的主要标志有下列:
1)灯光的方向,用函数STATE_light_set_direction设置;
2)灯光影响距离,用函数STATE_light_set_distance_reach设置;
设置灯光的类型用函数STATE_light_set_type_of_light(SceneLight, LIGHT_type)
其中light_type主要有两类:
LIGHT_DEFAULT:其值为LIGHT_EFFECTED_BY_DISTANCE_LINEAR, LIGHT_AMBIENT,LIGHT_DIFFUSE或LIGHT_SPECULAR
LIGHT_DEFAULT_POINTED_LIGHT:其值为LIGHT_DIRECTIONAL,LIGHT_EFFECTED_BY_DISTANCE_LINEAR,LIGHT_AMBIENT,LIGHT_DIFFUSE或 LIGHT_SPECULAR
默认的是LIGHT_DEFAULT。
5、光线的设置
光线包含三种属性:环境光、漫反射和反射。每一个光源都是这三种的统一。
(1)环境光
用函数STATE_light_set_ambient来设置。
STATE_light_set_ambient( my_light, 1) 默认的
STATE_light_set_ambient( my_light, 2.8)强的环境光线
STATE_light_set_ambient( my_light, 0) 没有环境光
(2)漫反射
用函数STATE_light_set_diffuse( light_handle, value),其中Value的范围是0-10,默认值为1。
(3)反射
用函数STATE_light_set_specular( light_handle, value)来设置,其中Value的范围是0—10,默认值为1。
(4)反射光线
用函数STATE_light_set_specular_shining( light_handle, value),其中Value的范围是0—10,默认值为1。
eg:在Timer中添加键盘控制事件
If GetAsyncKeyState(Keys.D1) <> 0 Then
Dim lightloc(2) AsDouble
STATE_light_get_location(SceneLight, lightloc)
lightloc(0) += 100
STATE_light_set_location(SceneLight, lightloc)
STATE_light_activate(SceneLight, LIGHT_SET)
ElseIf GetAsyncKeyState(Keys.D2) <> 0 Then
Dim lightloc(2) AsDouble
STATE_light_get_location(SceneLight, lightloc)
lightloc(0) -= 100
STATE_light_set_location(SceneLight, lightloc)
STATE_light_activate(SceneLight, LIGHT_SET)
ElseIf GetAsyncKeyState(Keys.D3) <> 0 Then
Dim lightloc(2) AsDouble
STATE_light_get_location(SceneLight, lightloc)
lightloc(1) += 100
STATE_light_set_location(SceneLight, lightloc)
STATE_light_activate(SceneLight, LIGHT_SET)
ElseIf GetAsyncKeyState(Keys.D4) <> 0 Then
Dim lightloc(2) AsDouble
STATE_light_get_location(SceneLight, lightloc)
lightloc(1) -= 100
STATE_light_set_location(SceneLight, lightloc)
STATE_light_activate(SceneLight, LIGHT_SET)
ElseIf GetAsyncKeyState(Keys.D5) <> 0 Then
Dim lightloc(2) AsDouble
STATE_light_get_location(SceneLight, lightloc)
lightloc(2) += 100
STATE_light_set_location(SceneLight, lightloc)
STATE_light_activate(SceneLight, LIGHT_SET)
ElseIf GetAsyncKeyState(Keys.D6) <> 0 Then
Dim lightloc(2) AsDouble
STATE_light_get_location(SceneLight, lightloc)
lightloc(2) -= 100
STATE_light_set_location(SceneLight, lightloc)
STATE_light_activate(SceneLight, LIGHT_SET)
EndIf
注意:每次必须添加STATE_light_activate(SceneLight, LIGHT_SET),否则看不到光照效果。
6、材质属性
可以为不同的材质设置不同的灯光属性,其函数如下:
STATE_polygon_set_ambient
STATE_group_set_ambient
STATE_polygon_set_specular
STATE_group_set_specular
STATE_polygon_set_specular_shining
STATE_group_set_specular_shining
STATE_polygon_set_diffuse
STATE_group_set_diffuse
7、阴影
(1)创建阴影用函数STATE_engine_create_dynamic_shadow或STATE_engine_create_ shadow。其函数用法为:
STATE_engine_create_shadow(EntityReceivingShadow, EntityCreatingShadow, LightSource, bytSerialNumber)
其中EntityReceivingShadow为阴影照射的面,如地面等;EntityCreatingShadow为制造阴影的对象,如桌椅等;LightSource为光源的位置;bytSerialNumber为一从10255的序列值。
2)删除阴影用函数STATE_engine_delete_dynamic_shadows或STATE_polygon_delete_patches( room_handle,ALL_PATCHES)
(3)用法及说明,如下:
Dim obj1 As UIntPtr = STATE_object_get_object_using_name("doorr")
Dim m_BasePolygon As UIntPtr = STATE_polygon_get_handle_using_name("Gnd_face0")
Dim obj2 As UIntPtr = STATE_object_get_object_using_name("Gnd")
Dim lightnewloction(2) AsDouble
STATE_light_get_location(SceneLight, lightnewloction)
STATE_engine_delete_dynamic_shadows()
STATE_engine_create_dynamic_shadow(m_BasePolygon, obj1, lightnewloction, 255)
STATE_group_set_patches_color(obj2, 0, 0, 0, ALL_PATCHES)
其中m_BasePolygon为对象obj2上的面,即地面的顶面。0, 0, 0表示阴影的颜色。由于要时刻有阴影,所以该程序需放在Timer里面,而且在调用前,必须打开灯光,即STATE_light_activate(SceneLight, LIGHT_SET)。
<!--v:3.2-->

资源下载链接为: 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、付费专栏及课程。

余额充值