用Delphi编写OpenGL导学

独立游戏美术全流程:AI辅助从概念到3D资产的实战指南 生成式AI与扩散模型等技术正深刻改变数字内容创作流程。其核心原理是通过学习海量数据分布,实现从文本或图像到高质量视觉内容的可控生成。在游戏开发领域,这项技术的核心价值在于极大降低了美术资源创作的门槛与试错成本,使小型团队能快速验证创意并产出原型。具体到应用场景,它尤其适用于独立游戏开发中的概念设定、角色原画、场景草图以及贴图生成等环节。本文以Stable Diffusion为核心工具,结合ControlNet、LoRA等关键技术,系统拆解了如何将AI作为“创意副驾驶”整合进游戏美术管线,实现从文字描述到风格 阅读详情
用Delphi编写OpenGL导学——下

X众期待的下篇终于来了。 
不说废话了,让我们看看如何用Delphi编写OpenGL吧。
以前也有人写过Delphi如何编写OpenGL,不过都是根据OpenGL教科书将编程语言翻译成了Delphi而已,并没有体现出Delphi的方便高效。我的教学会让你见识到Delphi编写OpenGL的方便和高效的。
为了实现我的说法,你需要一个函数库。这是外国朋友写的,主要是为了方便Delphi编写OpenGL程序。以后你不用再使用Delphi自带的糟糕的Opengl函数库了。函数库叫 DOT,你可以去 delphi3d.net下载。或者下载本贴的附件。我修改了代码,增加了对累积缓存(Accumulations buffers)的支持。大家按需选择吧。

 


我讲讲如何使用吧。首先把下载得到的压缩包里所有的文件解压到某个目录里,比如 D:/DOT。然后,运行Delphi,选择Tools菜单下的Options,在Options里选择Library,然后点击Library path旁边的 ... 在打开的对话框里还是点击 ... 接着选择刚才解压的目录(如D:/DOT)然后点击确定,再点Add,这样你刚才的解压目录就加到了库搜索路径里。你还要在Browsing path里增加你的解压目录,过程和Library path一样,我就不重复了。
不过,上述设置以后,你还无法在你的程序里调用DOT函数库。你还需要在程序的 uses 里增加至少四个项目,如下:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DotWindow, GL, GLu, GLext;
最后四个就是你要增加的项目了。
现在,准备工作一切就绪,我们可以进入OpenGL的世界了!

首先,有几个窗体属性需要设置。在窗体设计窗口,单击选择窗体,然后在Object Inspector面板里,找到BorderIcons项,展开,把除了biSystemMenu以外的项都改成False。再找到BorderStyle,把值改成bsSingle。再把Height改成480,Width改成640。好了,窗体设置到此结束,可以写代码了。
新项目的代码如下,我们一步步让它画出一个可以由用户控制的正方形吧。
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.


首先是uses里增加DotWindow, GL, GLu, GLext,变成
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DotWindow, GL, GLu, GLext;
然后给窗体添加几个事件,增加几个变量和函数,最终代码如下
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DotWindow, GL, GLu, GLext;

type
  TForm1 = class(TDotForm)    //注意这里,要把原来的TForm改成现在的TDotForm      
    procedure FormPaint(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    bFullScreen : Bool;             //决定是否用全屏显示
    rX, rY      : GLuint;           //旋转角度

    procedure DrawScene;
    procedure LoadExtensions;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

程序首先创建窗体,产生OnCreate事件,这时调用FormCreate过程。在这个过程里,初始化OpenGL的一些参数
procedure TForm1.FormCreate(Sender: TObject);
begin
  bFullScreen := False;
  rX := 360;
  rY := 360;

  if bFullScreen then
  begin
    dotSetDisplayMode(800, 600, 32, 60);
    Self.BorderStyle := bsNone;
    Self.Height := 600;
    Self.Width  := 800;
    Self.WindowState := wsMaximized;
    Self.Context.DC  := GetDC(Self.Handle);
    ShowCursor(False);
  end;

  Self.Context.QuickPF(32, 0, 24, 0, 0);
  Self.Context.InitGL;
  LoadExtensions;

  glShadeModel(GL_SMOOTH);
  glEnable(GL_DEPTH_TEST);

  glClearColor(0, 0, 0, 0);

  glMatrixMode(GL_PROJECTION);
    gluPerspective(60.0, Self.ClientWidth / Self.ClientHeight, 1.0, 100.0);
  glMatrixMode(GL_MODELVIEW);


end;
书上能找到的内容我就不讲了,我只讲DOT特有的函数
dotSetDisplayMode
要用到四个参数,前两个设置屏幕的分辨率(比如640,480;1024,768),第三个设置颜色深度(8,16,32 还是选择32吧,省得麻烦),最后一个设置屏幕刷新率(60最保险)
Self.Context.QuickPF
用于设置像素格式的。函数默认设置了双缓存,共有五个参数(原版是四个)。分别设置 色彩缓存位数,透明缓存位数,深度缓存位数,模版缓存位数以及 累积缓存位数。
Self.Context.InitGL
利用刚才设置的像素格式,生成OpenGL的Context(还是不要乱翻译的好  );
注意:Self. 可以不用写,我写出来是为了防止混乱。
LoadExtensions
用于调用OpenGL的扩展功能。函数定义如下
procedure TForm1.LoadExtensions;
  procedure Load(const ext: String);
  begin
    if not glext_LoadExtension(ext) then
      raise Exception.Create('This demo requires ' + ext + '!');
  end;
begin

  {*****************************************************************************
    Load all required OpenGL extensions here, and throw an exception if any of
    them are not found.
   ****************************************************************************}

  Load('GL_ARB_multitexture');
  Load('GL_EXT_texture_filter_anisotropic');
end;
OpenGL的初始化完成了。

窗体显示任何东西,都会产生OnPaint事件,所以在FormPaint过程里添加OpenGL的绘图函数
procedure TForm1.FormPaint(Sender: TObject);
begin
  DrawScene;
end;
DrawScene 函数定义如下
procedure TForm1.DrawScene;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  glLoadIdentity;
  glTranslatef(0, 0, -3);
  glRotatef(rX, 1, 0, 0);
  glRotatef(rY, 0, 1, 0);
  glBegin(GL_QUADS);
    glColor3f(1, 0, 0);
    glVertex3f(-0.5,-0.5, 0.5);

    glVertex3f(0.5,-0.5, 0.5);

    glVertex3f(0.5, 0.5, 0.5);

    glVertex3f(-0.5, 0.5, 0.5);
///////////////////////////////////////
    glColor3f(0, 1, 0);
    glVertex3f(-0.5,-0.5,-0.5);

    glVertex3f(-0.5, 0.5,-0.5);

    glVertex3f(0.5, 0.5,-0.5);

    glVertex3f(0.5,-0.5,-0.5);
//////////////////////////////////////
    glColor3f(0, 0, 1);
    glVertex3f(-0.5,-0.5,-0.5);

    glVertex3f(-0.5,-0.5, 0.5);

    glVertex3f(-0.5, 0.5, 0.5);

    glVertex3f(-0.5, 0.5,-0.5);
//////////////////////////////////////
    glColor3f(1, 1, 0);
    glVertex3f(0.5,-0.5,-0.5);

    glVertex3f(0.5, 0.5,-0.5);

    glVertex3f(0.5, 0.5, 0.5);

    glVertex3f(0.5,-0.5, 0.5);
/////////////////////////////////////
    glColor3f(1, 0, 1);
    glVertex3f(-0.5, 0.5,-0.5);

    glVertex3f(-0.5, 0.5, 0.5);

    glVertex3f(0.5, 0.5, 0.5);

    glVertex3f(0.5, 0.5,-0.5);
////////////////////////////////////
    glColor3f(1, 1, 1);
    glVertex3f(-0.5,-0.5,-0.5);

    glVertex3f(0.5,-0.5,-0.5);

    glVertex3f(0.5,-0.5, 0.5);

    glVertex3f(-0.5,-0.5, 0.5);
  glEnd;

  Self.Context.PageFlip;
end;
对了,别忘了在程序关闭时,会产生OnClose事件,所以要在FormClose过程里加一个函数调用
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  dotSetDisplayMode(0, 0, 0, 0);
end;
如果使用了全屏显示,调用dotSetDisplayMode(0, 0, 0, 0)可以恢复原来的屏幕设置。窗口模式调用此函数没有任何不良影响。

现在运行程序就能看见一个正方形了。但是还不能控制。这时就要用到FormKeyDown过程了。
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_UP:
    begin
      if rX = 0 then
        rX := 360;
      Dec(rX);
      DrawScene;
    end;
    VK_DOWN:
    begin
      if rX = 720 then
        rX := 360;
      Inc(rX);
      DrawScene;
    end;
    VK_LEFT:
    begin
      if rY = 0 then
        rY := 360;
      Dec(rY);
      DrawScene;
    end;
    VK_RIGHT:
    begin
      if rY = 720 then
        rY := 360;
      Inc(rY);
      DrawScene;
    end;
    VK_ESCAPE:
      Close;
  end;
end;

现在运行程序,就可以用键盘上的方向键控制正方体旋转了,而且只要按键盘的Esc键就能退出程序了。

怎么样,简单吗?
什么,不简单?!你按照OpenGL教材上的方法,或者用C/C++编写我这个程序以后再发表意见吧。

DOT让我们摆脱了繁琐的OpenGL初始化设置(当然不只如此,DOT更方便的功能需要你更深入的学习OpenGL才能体会到)。
Delphi让我们不用为创建、修改窗体,响应键盘消息等等基本Windows编程而费神。
两者的结合让我们可以轻松编写OpenGL程序了!

教学写完了,有不明白的地方,请发帖。我会加到教学里的。
或者联系我  
QQ:245343050





本主题包含附件: sf_20061020195543.rar (216671bytes)

 
生成式AI模型选型决策地图:显式与隐式密度模型深度解析 生成式AI不是单一技术,而是涵盖概率建模、对抗学习、分数引导等多元范式的体系。理解其底层原理——尤其是显式密度模型(可计算精确概率)与隐式密度模型(仅优化生成质量)的根本分野——是技术选型的逻辑起点。前者支撑金融风控、法律文书等强可信需求,提供似然值校验与过程可解释性;后者胜任电商图像、艺术创作等重感知场景,以高保真输出为优先。本文结合VAE、GAN、Diffusion、自回归LLM等主流模型,从数学本质、工程稳定性、可控性维度展开对比,并落地到数据增强、口播生成、缺陷合成等真实业务场景,帮助开发者跳出AP 阅读详情

相关推荐

AI视频生成模型在游戏美术生产中的应用:以Veo 2构建塞尚风格游戏世界

视频生成模型作为生成式AI的重要分支,通过深度学习技术实现从文本描述到动态视觉内容的转换。其核心原理是基于扩散模型的时间序列预测,能够保持帧间一致性生成高质量视频。在游戏开发领域,这项技术显著降低了美术资源生产成本,特别适合风格化游戏的概念验证和动态场景构建。以Google Veo 2为例,该模型支持1080p高分辨率视频生成,通过精准的提示词设计可实现特定艺术风格的动态表达。在实际应用中,开发者可以结合Unity等游戏引擎,将生成的视频资源转换为序列帧动画和纹理图集,用于建筑生长、环境变化等游戏场景。这种

weixin_29045001的博客 256

生成式AI如何重塑独立游戏开发:从美术到代码的全流程变革

生成式AI作为人工智能领域的重要分支,其核心原理是基于大规模数据训练,通过学习数据分布来生成全新的文本、图像、代码等内容。这项技术的价值在于极大地提升了内容创作的效率,降低了专业门槛,使其从实验室走向广泛的工程实践。在应用场景上,它正深刻改变着数字内容生产的各个领域,尤其是对资源有限的独立游戏开发。通过AI辅助,开发者能够快速生成美术概念图、辅助叙事创作、提升代码开发效率,从而将更多精力聚焦于核心玩法设计与创意实现。本文聚焦于独立游戏开发领域,探讨如何利用Midjourney、Stable Diffusio

weixin_30701575的博客 403

AI生成式PBR材质转换技术在游戏重制中的应用

物理渲染(PBR)是现代游戏开发的核心技术,通过模拟光线与材质的物理交互实现逼真视觉效果。传统PBR材质制作依赖手工绘制各通道贴图,耗时耗力。生成式AI技术为这一流程带来革新,能够自动将低分辨率贴图转换为完整的PBR材质集。以《Painkiller RTX》项目为例,团队开发了PBRFusion模型实现批量材质转换,结合RTX光线追踪技术,在保持原作风格的同时显著提升画质。这种AI辅助工作流特别适合资源有限的小型团队,可大幅缩短开发周期,为游戏重制和模组开发开辟了新路径。

weixin_30527323的博客 425

生成式AI落地指南:从ChatGPT到Gemini,游戏工作室如何选择适合自己的AI工具

本文为游戏工作室提供生成式AI工具链的选型与落地指南,涵盖ChatGPT、Gemini等主流工具的核心能力对比与适用场景。通过Unreal Engine集成方案和成本效益分析,帮助团队优化工作流程,提升效率。特别适合中小型游戏开发团队在VR/AR项目中快速部署AI解决方案。

weixin_29001327的博客 423

教育机构AI美术课落地:Z-Image-Turbo批量生成教学素材实战

Z-Image-Turbo不仅是一个图像生成工具,更是一套可深度定制的智能内容生产系统。✅技术可行性:本地化部署+中文优化模型完全满足日常教学需求✅经济可行性:一次性投入硬件成本,后续零边际成本复制内容✅教育有效性:显著提升备课效率,释放教师精力专注于教学设计未来我们将进一步探索:- 结合OCR识别学生草图,自动生成优化建议- 构建校本风格模型(LoRA微调),形成独特视觉标识- 开发学生端简易界面,支持课堂即时创意可视化AI不会取代美术老师,但会用AI的老师,终将取代不用AI的老师。

weixin_29050829的博客 625

AI游戏开发实战:从想法到可玩原型的工作流与工具指南

生成式AI正在重塑游戏开发的工业化链路,从策划、代码、美术到音频,AI工具以概率模型为核心,通过多模态能力辅助开发者快速产出内容。其技术价值在于将“想法到可玩原型”的周期压缩至周末以内,让独立开发者和小团队能以更低成本完成多角色协作。在独立游戏、休闲Demo等场景中,AI辅助开发已形成一套可落地的协作流程:用对话模型收敛设计,用代码生成工具按模块迭代,用图像生成统一风格素材。围绕AI游戏开发的完整工作流,这里拆解了工具选型、代码示例、常见误区与工程化建议,帮助开发者建立对AI增强创意工业化的合理预期。

weixin_33851177的博客 378

生成式AI重塑游戏内容生产:从概念到管线的实战指南

生成式AI作为人工智能在内容创作领域的核心应用,其原理是基于大规模预训练模型,通过学习海量数据分布来生成全新的文本、图像乃至代码。这项技术的核心价值在于,它能将创意灵感快速转化为具体原型,并实现内容的批量生产,从而在游戏开发、数字媒体等领域带来革命性的效率提升。在游戏开发这一具体应用场景中,生成式AI正从辅助工具演变为生产管线的关键重构力量。开发者通过技术选型,例如在云端API与本地部署模型之间权衡成本与控制力,并运用LoRA微调、ControlNet控制生成等技术,可以构建稳定、高效的资产生产管线。这不仅

weixin_30764771的博客 471

生成式AI与XR融合:技术原理、应用场景与实战挑战

生成式人工智能通过学习海量数据的分布规律,能够根据文本、图像等提示生成全新的数据实例,其核心价值在于实现了内容的按需、实时创造。这一技术原理与扩展现实(XR)追求沉浸式体验的目标相结合,催生了从‘内容消费’到‘内容共创’的范式转移。在工程实践中,技术选型需权衡模型能力与实时性要求,例如扩散模型擅长生成高质量视觉资产,而大语言模型则驱动智能叙事与交互逻辑。应用场景已深入创意设计、教育培训及工业仿真等领域,例如通过多模态交互实现从草图到3D模型的实时生成,或构建自适应学习的智能导师系统。然而,多模态深度整合、延

weixin_30839881的博客 587

生成式AI融入办公软件,会带来怎样的改变?

对于人工智能乃至整个科技领域来说,生成式AI(Artificial Intelligence Generated Content,也称AIGC)应用的飞速普及无疑都是2023年最大的亮点,没有之一。在席卷全球的生成式AI大潮下,各行各业都在运用这一新兴科技对自己进行重塑:医疗行业在运用生成式AI分析数据资料,协助诊断病情,加速药物研发;金融行业在运用生成式AI评估信用等级,预测信用风险,识别欺诈行...

趣味科技v 388

生成式AI合成手势数据:破解人机交互数据瓶颈的工程实践

在计算机视觉与人机交互领域,高质量、多样化的训练数据是模型性能的基石,但数据采集与标注常面临成本高、场景覆盖有限的瓶颈。合成数据技术,特别是基于生成式人工智能的方法,通过学习数据分布来创造逼真样本,为解决这一难题提供了新思路。其核心原理在于利用扩散模型或生成对抗网络,通过控制潜变量或条件输入,生成具有无限多样性且自带精准标注的图像。这项技术的工程价值在于能以极低的边际成本,快速生成覆盖长尾场景、危险环境或特定需求的数据,极大提升了模型研发的迭代速度和泛化能力。在应用层面,它尤其适用于需要复杂手势识别的场景,

weixin_30558697的博客 337

AI电影制作:从生成式AI到工业化管线的落地指南

生成式AI技术正快速渗透影视工业,从剧本开发到虚拟制片、后期特效,AI已从“玩具”演变为可复用的生产工具。理解其原理与部署门槛,是影视从业者降本增效的关键。本地部署的AI工作流能够实现概念图生成、视频预演、自动对白转录等任务,让个人创作者也能验证“AI辅助制作”的完整链路。文章从工程视角解析AI在电影生产中的介入点,给出本地GPU环境配置建议与可测试流程,并客观分析“含AI量为零”是否存在。最终指出,透明记录AI使用情况、建立合规授权体系,比争论“是否用AI”更有实际价值。

weixin_30780649的博客 328

丹青识画商业落地实录:某省级美术馆导览系统集成全过程

本文介绍了如何在星图GPU平台自动化部署🖼️ 丹青识画 · 智能影像雅鉴系统,实现AI艺术画作智能解读。该系统通过深度学习技术,为美术馆提供自动化艺术导览服务,能实时生成富有文学意境的书法风格描述,显著提升观众互动体验与文化传播效率。

weixin_32047493的博客 295

生成式AI如何破解VR内容困境:从无限生成到智能交互的范式革命

虚拟现实(VR)技术通过头戴设备和空间追踪,为用户创造沉浸式数字环境,其核心价值在于提供强烈的“存在感”。然而,传统VR内容生产依赖手工建模和脚本化交互,面临成本高昂、内容有限、体验重复等瓶颈,制约了其潜力释放。生成式AIAIGC)作为人工智能的重要分支,通过大语言模型和扩散模型等技术,能够实现大规模、低成本的动态内容生成与自然语言理解。这一技术融合为VR带来了根本性变革:它不仅能通过文本到3D(Text-to-3D)等技术无限生成场景资产,解决内容匮乏问题,更能赋能智能NPC和自然交互,为虚拟世界注入“

weixin_33738982的博客 369

AI全流程游戏开发实战:3个月3万元打造冒险岛单机版

游戏开发是一个融合创意策划、美术设计、程序编写和音频制作的复杂系统工程。传统开发模式下,每个环节都需要专业人员和大量时间投入。随着生成式AI技术的成熟,大语言模型和扩散模型等工具开始渗透到游戏开发的各个阶段,从概念设计到资源生成,再到代码编写,AI正在改变游戏创作的生产方式。这种AI辅助开发模式的核心价值在于,它能够将开发者从重复性、模式化的劳动中解放出来,使其更专注于核心玩法创新和系统设计。在实际工程实践中,AI工具链的应用尤其体现在2D美术资源生成和基础代码编写两个环节,通过Stable Diffusi

weixin_30703911的博客 583

设计师考AI证书有用吗,生成式AI工具和审美能力怎么结合

生成式 AI 大幅降低了绘图工具的使用门槛,但能将个人审美、品牌规范和 AI 工具结合的系统化流程搭建能力,正在成为设计行业稀缺竞争力。各类能力认证的核心价值不在于证书本身,而是完整学习过程中完成思维转型:从只会调用 AI 绘图工具的执行者,转变为搭建视觉自动化生产链路的流程架构师。结合自身岗位、长期职业发展路线选择适配的学习路径,才能在 AI 设计内卷环境中构建长期不可替代的职场护城河。

2601_96257321的博客 276

生成式AI如何重构高等教育教学设计

生成式AI正推动高等教育从知识传递转向认知架构,其核心在于降低知识解构与重组的成本,从而引发教学范式迁移。技术原理上,它通过大语言模型实现上下文感知的语义生成与逻辑推演;在教育价值层面,它不再是辅助工具,而是可编程的‘第25号学生’,提供即时反馈、对抗性验证与认知脚手架。典型应用场景覆盖人文社科的多视角镜像训练、理工科的错误生成与故障模拟、艺术类的风格语法解构等。本文聚焦一线教师可落地的AI协同教学策略,融合提示词工程、学术诚信三明治检测、课程评估AI免疫力设计等实操方法,强调教师角色向‘认知架构师’转型—

atu99602的博客 431

游戏开发工具AI应用现状:行业报告揭示创意工作流变革趋势

游戏开发领域,创意工具与游戏引擎构成了项目技术栈的核心基础。从原理上看,工具链的选择直接影响工作流效率、资产兼容性和团队协作模式。其技术价值在于通过标准化流程和实时协作能力,降低开发成本并提升内容产出质量。当前,Adobe Creative Cloud、Blender、Substance系列等工具在2D/3D内容创作中占据主导,而Unity和Unreal Engine则分别凭借跨平台灵活性与高保真渲染能力形成双引擎格局。随着生成式AI技术的渗透,工作流正经历从概念设计到代码辅助的全面升级。应用场景已从早期

weixin_34088583的博客 446

05 从零搭建 GPT 模型:LayerNorm、GELU 与解码器堆叠

本文介绍从零搭建GPT模型的关键组件:LayerNorm对特征维归一化,GELU平滑激活,前馈网络扩展收缩,残差连接缓解梯度消失。随后组装TransformerBlock(多头注意力+前馈,Pre-LN),最终构建GPTModel并实现文本生成,附参数量核算。

元直的博客 380
上一篇: 一个控制 Word 插入表格的代码:
下一篇: Delphi第三方控件大比拼
niray
博客等级 码龄22年 4粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值