Delphi FireMonkey 3D 编程初探
Delphi 的 FireMonkey 框架,支持3D编程。为了跨平台,Delphi 在这个框架上,自己做了一层虚拟的 3D 框架,和 OpenGL 一样有 Shader 等等概念,因此代码和写 OpenGL 的代码类似。只是 OpenGL 的 API 是基于 C 的,里面很多的数据类型,对应到 FireMonkey 上面,有相同的名称和相似的用法,但都是对象了。
如果只是简单地拖几个 3D 控件到界面上,也能做3D编程,但能实现的效果有限。所以,真想做3D编程,还得自己写代码。也就是所谓的一些顶点坐标,材质,灯光等等概念,和 OpenGL 的概念是相似的。
可惜的是,网上能找到的关于用 FireMonkey 来做3D编程的文章资料太少。Delphi 自带的一个DEMO程序是 Lowlevel3D,去它的安装后放例子程序的文件夹底下去找。
这里,我实验了一下如何自己写代码在 FireMonkey 的 3D 界面上画图。
1. 新建一个 FireMonkey 的工程,选择3D工程。这样可以创建一个工程,其主 Form 是从 TForm3D 继承下来的。
2. 在 Form 的 OnRender 事件里面写代码。
3. 拖一个 Timer 过来,其事件里面写:Invalidate;有这句话,才会触发程序画屏,也才会触发 OnRender 事件。
4. OnRender 事件提供当前窗口界面的 Context,这个非常重要。画图就靠它了。它提供了一些画图的方法。
5. Context 有一个 Helper class,这里我做一个简单的测试,就不去创建顶点什么的,直接用这个 Helper 的方法,画一个蓝色的矩形到屏幕上。
代码如下:
procedure TForm3.Form3DRender(Sender: TObject; Context: TContext3D);
varCenter, Size: TPoint3D;AOpacity: Single;AColor: TAlphaColor;
begin//在3D模式下,利用 Context 自己画图。这里是 FireMonkey 自己实现的一层抽象层代码,最终会根据平台,调用 OpenGL 或 D3DCenter := TPoint3d.Create(0, 0, 0);Size := TPoint3d.Create(-1, 1, 0);AOpacity := 1;AColor := TAlphaColorRec.Blue;Context.FillCube(Center, Size, AOpacity, AColor);
end;procedure TForm3.Timer1Timer(Sender: TObject);
beginInvalidate;
end;
这里,TPoint3D 是声明在 System.Math.Vectors 单元里面的,因此需要 uses 这个单元。
上述代码,测试通过。
Delphi FireMonkey 3D 编程初探相关推荐
- RAD Studio (Delphi) Firemonkey 教程
RAD Studio (Delphi) Firemonkey 教程 转载于:https://www.cnblogs.com/LittleTiger/p/6389256.html
- Delphi的Socket编程要分几步?
Delphi的Socket编程要分几步? 2008-12-20 02:03:24 标签:Delphi Socket 编程 [推送到技术圈] ClientSocket 和ServerSocket 几个重 ...
- 《Delphi XE6 android 编程入门教程》推荐
近5.6年已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿 ...
- Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]
评论 # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2006-08-24 23:41 gy # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2007-03-2 ...
- Android 3D 编程:索引
3D编程对于移动应用开发的重要性,不需要多叽歪了--看看愤怒的小鸟有多火就知道了 Android提供了OpenGL ES的Java API:NDK也提供了对OpenGL ES的支持,从Android ...
- Flash与3D编程探秘(一)- Flash与3D空间
Flash 和 3D空间 第一件事情我想你知道的是,在Flash里,并不存在真正的3D,或者我应该说,Flash CS3并不支持3D绘制.我们所做的是运用Flash里的2D绘制方法去模拟3D绘制,Fl ...
- 小丸子函数式编程初探
小丸子函数式编程初探 小丸子函数式编程初探 question 函数式编程 命令式编程 vs 函数式编程 高阶函数 实用小栗子 1. question 前一个项目,顺利完成的时候感觉特别棒.但是后面需求 ...
- linux 3d开发工具,Linux 3D 编程介绍 (转)
最近用SDL,glut,g++做了一下Linux下的3D编程,有一点心得,想与大家分享一下. 我没有自己从零开始,先D了quake2和quake3的一些代码,关于MD2,MD3和bsp的,然后用D的l ...
- 实验九 3D编程基础
ZZU的学弟学妹们不要抄作业哦~(`Д´) 一.实验目的 1.熟悉3D基本编程. 2.熟悉视点观察函数的设置和使用. 3.熟悉投影变换函数的设置和使用. 4.熟悉基本3D图元的绘制. 二.实验内容 1 ...
- 专访Autodesk董一凡:移动平台的3D编程可以更简单
董一凡是一位写了十年代码的程序员,擅长移动平台的客户端开发,在移动领域耕耘超过七年.在QCon上海2015,他将分享<移动平台的3D编程可以更简单>.在大会开始之前,InfoQ就移动平台的 ...
最新文章
- 印度首席大法官力推 AI 进司法,曾因歧视女性引争议
- Storm WordCount
- 没有读过的书,就不要瞎推荐了!
- 【性能优化】 之10046 事件
- 运行中的linux备份系统盘,怎样使用ghost对linux进行系统备份?
- 使用html2canvas将html标签转化为图片
- AI,大数据,复杂系统最精25本大书单(建议收藏)
- 大学语言c 离线作业,大学语文C离线作业(2013下).doc
- python读取excel中数据绘制柱状图_Python的Excel操作及数据可视化
- 网络知识之----http七层协议
- 云计算ACP认证考试题库之101-200
- python编写英文字符频率统计小程序
- 只有程序员才能读懂的三国演义(一)
- SAP学习笔记(SD的Delivery) 2008-12-28
- java里dialect_java – Hibernate:没有设置方言.设置属性hibernate.dialect
- Classification metrics can't handle a mix of continuous and multiclass targets
- R语言 读写带分隔符的文件
- Wireshark配置显示IP地理位置信息
- linux定时删除文件,如何操作Linux 定时删除指定目下N天前的文件
- php 读取excel中的内容到mysql 数据库
热门文章
- unity3d游戏3dRPG角色扮演完整项目源码分享
- android 阿拉伯语下布局,android设计的布局在阿拉伯语下界面错乱的解决方法
- 【ANSYS命令流】通用后处理技术(一):读取结果文件
- 源码智造编辑器客户端v1.0.0 官方版
- 创新创业技术路线怎么写_【精选】如何撰写创新创业项目申请书.ppt
- 2,一个人体姿态识别的项目实现
- SCI/SCIE/SSCI/期刊简介及官方查询验证方法
- 股票交易软件排行及简介
- double bottoms
- LCD1602单片机(STC51/STM32)驱动程序详解