Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 8218|回复: 8

GLScene for Lazarus

[复制链接]

该用户从未签到

发表于 2010-10-20 20:34:07 | 显示全部楼层 |阅读模式
        给大家推荐这个组件的原因是我已经用这个组件好多年了,因为她是免费的开源的而且还是跨平台的功能相当的强大。该组件适用于Delphi5-Delphi2010、DelphiXE、BCB5-BCB6、Lazarus    GLScene简要介绍:
    GLScene 提供了基本的OPENGL的3D模型及框架,通过GLScene中的可视化组件,你可以轻松的创建和渲染你的3D场景。不用书写一行代码就可以制作一个复杂的场面,这是我见过的最好的OPENGL插件!
     GLScene是一套基于OpenGL图形接口、免费的开放源代码的图形引擎系统.融汇了先进技术成果,如利用粒子系统火焰、烟雾、雪花等自然现象,水波荡漾效果,三维地形模拟技术,光照效果技术,阴影技术等。用于集成开发环境,扩展了Lazarus的三维图形编程功能,使得Lazarus开发人员能轻松、快捷地开发三维图形软件。GLScene三维图形引擎系统,包括三维建模对象、粒子系统特效技术、地形生成技术、物理动力学引擎等。
    基于GLScene的生产过程仿真图像系统,以GLScene场景为图像显示平台,通过渲染和组合各仿真模型图形单元建立整个生产过程的仿真图像,并实现仿真过程的动态行为控制,从而以动态画面形象地描述生产过程,并能从多个角度对仿真过程进行观察和评价。
    GLScene基础
在开始使用GLScene之前先让我们了解一下GLScene的基本构成。一个GLScene场景由以下几个基本物体构
成:
1.  基本场景
2.  摄像机
3.  灯光系统
4.   基本物体
5.   辅助物体
6.   材质贴图
7.    场景观察器
2.1基本场景
在GLScene中是以场景为基本构成对象。场景是所有其它物体的父容器,我们所构建的所有可视物体或特
效都将在场景中显示。
场景由GLScene(场景产生器)产生,一个工程中可以有多个场景产生器,也就是说一个工程中可以同时
拥有多个场景。下面让我们来看一下如何产生一个场景,双击中GLScene控件栏的   ,这时会在窗体中显示
出一个   控件。表示我们已经成功的引进了一个场景,不过此时的场景中没有任何物体。我们继续在窗体
中的   上双击鼠标左键。此时将会弹出场景编辑器:
图2.1   场景编辑器
通过对象查看器我们可以:
· 创建摄像机
· 创建或导入我们需要的物体
场景编辑器由工具栏和工作区两部分组成,我们的绝大多数操作都会在工作区中完成。
2.2  摄像机
摄像机是察场和用户之间的视觉接口,用户只有通过摄像机才能观察场景中的内容。
创建摄像机
在场景观察器中选中   ,然后单击鼠标右键弹出场景编辑器快捷菜单,其中添加摄像机(Add   Camera)选
项将被激活,单击该按钮系统中将会添加一台摄像机如图2.2
图2.2   添加摄像机
摄像机关键属性
·CameraStyle   /   摄像机类型
决定摄像机的类型.   
共有如下四个选项   :
透视摄像机,成像图为透视图(默认选项)。   
直角摄像机,成像图为直角图像。   
平面设想机,成像图为2D效果,仅存在XY轴的概念。   
自定义摄像机,你可以自由设置参数。
·  DepthOfView   /   景深
确定摄像机的景深。   
影响当前摄像机的最大观察距离,超过这个距离的场景将被剪切(不可见).   
该属性仅在Z轴上产生影响,一般景深的默认值为100   .   
注意在2D模式中该属性将不起作用.
· Direction     /   方向
该属性确定摄像机镜头所在的方向,由X、Y、Z三个轴共同作用,且这三个方向上的值均为浮点类型,最
大取值为1最小取值为-1   。
· FocalLength   /   焦距
定义摄像机的焦距。   
调整当前摄像机的焦距(调节过度会使图像显示走样).
· SceneScale   /   场景缩放
缩放摄像机中的场景。   
在2D场景中产生的线形缩放,相当于调整景深的效果。
· Position   /   位置
该属性确定摄像机镜头所在的方向,由X、Y、Z三个轴共同作用,且这三个方向上的值均为浮点类型。
· TargetObject   /   成像目标
设置摄像机所指向的目标物体.   
当为摄像机选择一个目标物体时摄像机本身的方向性将被忽略,它将始终指向目标物体。
·  NearPlane   /   近景
获得当前摄像机的视角值。   
返回值由当前摄像机的景深和焦距决定。
2.3 灯光
  和现实世界一样GLScene中也需要灯光来照亮场景中的物体。灯光的设置和大程度上决定了场景
效果。
   一个OPENGL场景中最多支持8盏灯光(实际上和OPENGL的版本和机器配置有关)。过多的灯光将
使渲染
速度降低。请慎重使用   。   
创建灯光
在GLScene场景编辑器其中选中场景物体(Scene   object),然后单击鼠标右键,场景编辑器快捷菜单此
时添加物体   (Add   object)   选项将被激活,单击该按钮系统中将会弹出其子菜单,选择第一项(
LightSource)。如图2.3
一盏灯光将会被加入到当前场景中。如图2.4
图   2.4       添加灯光
灯光属性
·  Ambient   /   环境色
获取或设置周围环境的颜色   。
·  ConstAttenuation   /   衰减常量
  获取或设置灯光的衰减量。
·  Diffuse   /   散射光颜色
获取或设置漫反射的灯光颜色   。
·    LinearAttenuation   /   线形衰减
读取或设置灯光的线形衰减值   。
·    QuadraticAttenuation   /   二次方程式衰减
读取或设置二次方程的衰减值   。
·   LightStyle   /   灯光类型
获取或设置灯光的类型   。   灯光类型包括
lsSpot   聚光灯   ,   lsParallel   平面灯   ,lsOmni   泛光灯。
·   Shining   /   灯光强度
获取或设置灯光的强度   。
·                 Specular   /   镜面效果
获取或设置境面效果   。 
·                 SpotCutOff   /   投射范围   (聚光灯)   
获取或设置灯光的投射范围   。
·                 SpotDirection   /   投射方向(聚光灯)
获取或设置聚光灯投射的方向   。
·                 SpotExponent   /   投射指数(聚光灯)
获取或设置聚光灯的投射指数   。
2.4     基本物体
场景中有了摄像机和灯光只是搭建了一个最基本的平台,而我们主要最关心则如何是向这个平台中添加物
体,使其丰富起来。
GLScene   中提供了一些内置的基本物体供我们使用,这些物体的使用方式大体相同,以下仅举一例(CUBE)
来说明,以达到抛砖引玉的作用。
2.4.1   创建CUBE
在场景编辑器中选中场景物体(Scene   Objects)选项,然后单击鼠标右键,在弹出的场景编辑器快捷菜
单中选择”Basic   geometry-> Cube”   ,如图2.5所示:
图2.5   创建Cube
此时一个Cube将被加入到场景编辑器中。如图2.6所示。
图2.6   加入了Cube的场景编辑器
2.5     辅助物体
有时依靠GLScene中提供的基本物体,及建模方式是无法达到我对们的要求,比如复杂建筑物,带有动画
效果的动画角色等等。为了解决这类问题GLScene为我们提供了大量的辅助物体控件。以下简单地介绍两
个经常使用地辅助控件:
1.           DummyCube     虚拟容器
该控件在默认情况下属性为不可见,即使将其VisibleAtRunTime属性设置为True,在运行时它也仅仅是显
示为一个虚线框。
DummyCube通常用来当成一个容器,将一个或多个控件包装成组。如图2.7:
图2.6   加入了DummyCube的场景编辑器
此时包含于DummyCube之中的控件将以DummyCube的坐标作为参考坐标,不在以场景的根坐标作为参考坐标
。与此类似任何包含与另一个容器(GLScene中的任何物体都可以作为容器)中的物体均以新的容器的坐
标作为参考坐标。
2.           Actor   动画容器
这是一个专门用来导入处理动画角色的容器,你可以在其它工具中生成动画,然后通过该类来进行操作控
制。十分简单方便   。添加Actor的方法如图2.7
图2.7添加Actor
Actor的用法通常如下:
Actor1.LoadFromFile( 'test.md2 ');   //   读取动画文件   。   
Actor1.Material.Texture.Image.LoadFromFile( 'test.jpg ');   //   读取动画贴图   。
Actor1.Animations.LoadFromFile( 'test.aaf ');   //   读取动画控制文件。   
Actor1.Scale.SetVector(0.04,   0.04,   0.04,   0);   //   根据实际要求缩放动画。
其中test.md2为一种动画格式。test.aaf为控制test.md2动画的控制文件。格式如下:
――――――――――――
AAF
20
站立,0,39
奔跑,40,45
战斗,46,53
……
――――――――――――
文件的第一行AAF标识该文件为AAF控制信息文件。
文件的第二行20表示该文件共由20个不同的动画动作组成。
第三行表示从第0帧到第39帧为站立动画。
第四行表示从第40帧到第45帧为奔跑动画。
其它与此类似。
掌握了该文件格式的含义我们就可以制作我们自己的动画控制文件了。
说的这么热闹,我们该怎么在GLScene中控制我们的动画播放指定的动作呢?起始很简单:
Actor1.SwitchToAnimation(moving);其中moving就是动画AAF文件中的动画名称,比如moving:=   ‘奔
跑’就表示当前将只播放动画中的奔跑动画部分,其它的则不予理睬。
Actor有如下几个重要属性,具体用法将在后面章节的中详细描述:
StartFrame   /   动画的初始帧
EndFrame   /   动画的结束帧
Reference   /   动画参考模式
CurrentFrame   /   当前帧
CurrentFrameDelta   /   下一个动画的表示区域
FrameInterpolation   /   动画的表现方式
AnimationMode   /   动画播放模式
Interval   /   动画的播放速度
Animations   /   动画播放列表
3.           FreeForm   自由物体容器
FreeForm可以加载矢量文件比如(.3ds等),但是不能为动画文件。这样我们可以在专业的3D制作文件中
创建复杂的场景然后导入到GLScene中使用。它的用法如下:
FreeForm1.LoadFromFile( 'imagesobot.3ds ');
最新下载地址:
https://sourceforge.net/projects/glscene/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x

评分

参与人数 1威望 +6 收起 理由
猫工 + 6 谢谢分享

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2010-10-20 21:14:44 | 显示全部楼层
努力学习!天天向上,谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-1-18 13:22:17 | 显示全部楼层
正在学习中。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-2-17 11:52:54 | 显示全部楼层
好像是收费的吧
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-5-6 17:21:10 | 显示全部楼层
双击GLSCENE好象没有用?LZ怎么解决的?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-3-14 16:51:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-5-18 08:28:43 | 显示全部楼层
在delphi 下用过,很不错,呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-5-22 08:55:14 | 显示全部楼层
下了一个,竟然不会装了,晕,laz安组件不一样吗
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-5-22 08:56:47 | 显示全部楼层
这个组件很喜欢,刚接触LAZ,如何安呢,希望能用
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 21:11 , Processed in 0.078686 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表