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 编程初探相关推荐

  1. RAD Studio (Delphi) Firemonkey 教程

    RAD Studio (Delphi) Firemonkey 教程 转载于:https://www.cnblogs.com/LittleTiger/p/6389256.html

  2. Delphi的Socket编程要分几步?

    Delphi的Socket编程要分几步? 2008-12-20 02:03:24 标签:Delphi Socket 编程 [推送到技术圈] ClientSocket 和ServerSocket 几个重 ...

  3. 《Delphi XE6 android 编程入门教程》推荐

    近5.6年已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿 ...

  4. Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]

    评论 # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2006-08-24 23:41 gy # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2007-03-2 ...

  5. Android 3D 编程:索引

    3D编程对于移动应用开发的重要性,不需要多叽歪了--看看愤怒的小鸟有多火就知道了 Android提供了OpenGL ES的Java API:NDK也提供了对OpenGL ES的支持,从Android ...

  6. Flash与3D编程探秘(一)- Flash与3D空间

    Flash 和 3D空间 第一件事情我想你知道的是,在Flash里,并不存在真正的3D,或者我应该说,Flash CS3并不支持3D绘制.我们所做的是运用Flash里的2D绘制方法去模拟3D绘制,Fl ...

  7. 小丸子函数式编程初探

    小丸子函数式编程初探 小丸子函数式编程初探 question 函数式编程 命令式编程 vs 函数式编程 高阶函数 实用小栗子 1. question 前一个项目,顺利完成的时候感觉特别棒.但是后面需求 ...

  8. linux 3d开发工具,Linux 3D 编程介绍  (转)

    最近用SDL,glut,g++做了一下Linux下的3D编程,有一点心得,想与大家分享一下. 我没有自己从零开始,先D了quake2和quake3的一些代码,关于MD2,MD3和bsp的,然后用D的l ...

  9. 实验九 3D编程基础

    ZZU的学弟学妹们不要抄作业哦~(`Д´) 一.实验目的 1.熟悉3D基本编程. 2.熟悉视点观察函数的设置和使用. 3.熟悉投影变换函数的设置和使用. 4.熟悉基本3D图元的绘制. 二.实验内容 1 ...

  10. 专访Autodesk董一凡:移动平台的3D编程可以更简单

    董一凡是一位写了十年代码的程序员,擅长移动平台的客户端开发,在移动领域耕耘超过七年.在QCon上海2015,他将分享<移动平台的3D编程可以更简单>.在大会开始之前,InfoQ就移动平台的 ...

最新文章

  1. 印度首席大法官力推 AI 进司法,曾因歧视女性引争议
  2. Storm WordCount
  3. 没有读过的书,就不要瞎推荐了!
  4. 【性能优化】 之10046 事件
  5. 运行中的linux备份系统盘,怎样使用ghost对linux进行系统备份?
  6. 使用html2canvas将html标签转化为图片
  7. AI,大数据,复杂系统最精25本大书单(建议收藏)
  8. 大学语言c 离线作业,大学语文C离线作业(2013下).doc
  9. python读取excel中数据绘制柱状图_Python的Excel操作及数据可视化
  10. 网络知识之----http七层协议
  11. 云计算ACP认证考试题库之101-200
  12. python编写英文字符频率统计小程序
  13. 只有程序员才能读懂的三国演义(一)
  14. SAP学习笔记(SD的Delivery) 2008-12-28
  15. java里dialect_java – Hibernate:没有设置方言.设置属性hibernate.dialect
  16. Classification metrics can't handle a mix of continuous and multiclass targets
  17. R语言 读写带分隔符的文件
  18. Wireshark配置显示IP地理位置信息
  19. linux定时删除文件,如何操作Linux 定时删除指定目下N天前的文件
  20. php 读取excel中的内容到mysql 数据库

热门文章

  1. unity3d游戏3dRPG角色扮演完整项目源码分享
  2. android 阿拉伯语下布局,android设计的布局在阿拉伯语下界面错乱的解决方法
  3. 【ANSYS命令流】通用后处理技术(一):读取结果文件
  4. 源码智造编辑器客户端v1.0.0 官方版
  5. 创新创业技术路线怎么写_【精选】如何撰写创新创业项目申请书.ppt
  6. 2,一个人体姿态识别的项目实现
  7. SCI/SCIE/SSCI/期刊简介及官方查询验证方法
  8. 股票交易软件排行及简介
  9. double bottoms
  10. LCD1602单片机(STC51/STM32)驱动程序详解