当前位置:

首页 > 编程开发 > Delphi下OpenGL2d绘图之画点的方法

Delphi下OpenGL2d绘图之画点的方法

在Delphi的OpenGL2D绘图中,画点需先调用glPointSize设置点直径,然后通过glBegin(GL_POINTS)和glEnd()之间使用glColor3f指定颜色、glVertex2f指定坐标,最后调用SwapBuffers显示结果。

本文目录

    在Delphi环境下进行OpenGL 2D绘图,有一个非常基础但又绕不开的操作——画点。别看它简单,却是理解OpenGL图元绘制流程的起点。图形绘制的核心逻辑其实就藏在glBegin()与glEnd()这一对函数之间,而整个绘图框架的初始化工作可以复用标准的OpenGL 2D初始化代码。这里我们重点关注的是Draw函数部分,把画点这件事彻底讲透。

    一、前言

    Delphi下OpenGL2d绘图之画点的方法

    画点之前,先弄明白两个关键函数:glPointSize用来指定栅格化点的直径,默认值是1.0。这个设置只在GL_POINTS模式下起作用,至于抗锯齿之类的高级特性,可以后续再研究。而glBegin(GL_POINTS)则是告诉OpenGL:“接下来我要画点了。”参数GL_POINTS只是其中一种,其他如画线用GL_LINES等等,都可以在OpenGL单元的源码里查到。

    这两个函数的原型非常简洁:

    void glBegin(GLenum mode)
    void glEnd(void)
    

    参数mode决定了你要绘制哪种图元。下面列出所有可用的模式值,每个都有明确的行为:

    • GL_POINTS:每个顶点作为一个独立的点,顶点n即定义了点n,共绘制N个点。
    • GL_LINES:每两个顶点构成一条独立线段,顶点2n-1和2n之间定义第n条线段,共绘制N/2条。
    • GL_LINE_STRIP:从第一个顶点到最后一个顶点依次相连,顶点n和n+1定义线段n,共绘制n-1条。
    • GL_LINE_LOOP:与GL_LINE_STRIP类似,但最后还会把最后一个顶点和第一个顶点连起来,形成闭合环,共绘制n条。
    • GL_TRIANGLES:每三个顶点构成一个独立三角形,顶点3n-2、3n-1、3n定义第n个三角形,共绘制N/3个。
    • GL_TRIANGLE_STRIP:一组相连的三角形。对于奇数n,顶点n、n+1、n+2定义第n个三角形;对于偶数n,顶点n+1、n、n+2定义第n个三角形。共绘制N-2个。
    • GL_TRIANGLE_FAN:一组以第一个顶点为中心的扇形三角形。顶点1、n+1、n+2定义第n个三角形,共绘制N-2个。
    • GL_QUADS:每四个顶点构成一个独立四边形。顶点4n-3、4n-2、4n-1、4n定义第n个四边形,共绘制N/4个。
    • GL_QUAD_STRIP:一组相连的四边形,每对顶点和后一对顶点共同确定一个四边形。顶点2n-1、2n、2n+2、2n+1定义第n个四边形,共绘制N/2-1个。
    • GL_POLYGON:绘制一个凸多边形,顶点1到n定义了这个多边形。

    需要特别注意的是,glBegin和glEnd之间只能放置顶点定义以及相关的属性设置(如颜色),不能在里面调用glPointSize这类状态设置函数。

    二、画点

    画点的实现代码非常直观。下面是一个完整的Draw过程示例:

    procedure TForm1.Draw;
    begin
     // 清空缓冲区
     glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
     // 设置点大小,不能在glBegin和glEnd之间
     glPointSize(10);
     glBegin(GL_POINTS); // 画点
     // 设置点的颜色
     glColor3f(1, 0, 0);
     // 绘制点
     glVertex2f(50, 50);
     glColor3f(0, 1, 0);
     glVertex2f(100, 50);
     glColor3f(0, 0, 1);
     glVertex2f(150, 50);
     glEnd;
     SwapBuffers(FDC); // 交换双缓冲区内容,将刚绘制的图形翻印到屏幕上
    end;
    

    这段代码做了三件事:首先清空颜色和深度缓冲区,接着设置点的直径为10像素(注意,这一步必须在glBegin之前完成),然后用glBegin(GL_POINTS)开启点绘制模式,依次设置颜色并指定顶点位置。可以看到,每个顶点用glColor3f指定颜色,再用glVertex2f指定坐标——第一个点红色位于(50,50),第二个点绿色位于(100,50),第三个点蓝色位于(150,50)。最后调用SwapBuffers将绘制结果呈现到屏幕上。

    从这段代码可以清楚地看到,glColor3f控制颜色,glVertex2f控制位置,两者配合就能在指定位置画出指定颜色的点。理解了这个基础,后续更复杂的图元绘制(线段、三角形、多边形)就只是换一个glBegin的参数而已。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    delphi 2010 场景实战:从需求到落地步骤
    delphi 2010 场景实战:从需求到落地步骤

    Delphi2010在维护旧代码和开发高性能桌面、数据库及工业控制软件方面仍具价值。项目需明确需求、评估可行性,随后搭建环境并规划结构,采用模块化开发。核心阶段应高效利用数据库与语言特性,借助VCL快速构建界面,最终通过调试、测试与规范部署确保质量并交付。

    以前我没学过编程 请问编程从那里学起
    以前我没学过编程 请问编程从那里学起

    编程语言仅为工具,真正决定高度的是数据结构和算法及计算机底层逻辑理解。建议从C语言入门,打好基本功。根据目标选择深入方向,避免同时学习多门语言。最终目标是学会用程序解决问题,语言只是实践载体。

    Java中CountDownLatch和CyclicBarrier的区别与详解
    Java中CountDownLatch和CyclicBarrier的区别与详解

    CountDownLatch与CyclicBarrier均为Java同步工具,核心区别:前者计数器可大于等于线程数,由其他线程控制放行且不可重用;后者计数器必须等于线程数,所有线程到达屏障后统一继续并可循环使用。常用于多线程协作,前者等待完成,后者同步任务。

    delphi 判断字符串是否为纯数字组合
    delphi 判断字符串是否为纯数字组合

    Delphi中判断字符串是否为纯数字组合,常见需求有两种实现方案:一是先去除首尾空格再逐字符检查是否在'0'..'9'范围内,遇非数字即返回假;二是直接遍历字符串,使用Break提前结束循环。核心思路均为字符级判断,区别在于空格处理与退出方式。

    Delphi 常见文件处理及注册表文件的使用实例
    Delphi 常见文件处理及注册表文件的使用实例

    Delphi中借助TRegIniFile类可将注册表操作简化为类似INI文件读写,提供CreateKey、OpenKey、EraseSection及读写多种类型值、枚举子键键值等方法。通过创建节点、删除值、删除键等实例展示实际应用,有效完成常见注册表读写场景。

    Delphi 中内存映射对于大文件的使用
    Delphi 中内存映射对于大文件的使用

    针对超大文件,利用Delphi的内存映射机制分块处理,以10倍页面粒度为单位映射,通过GetSystemInfo获取页面分配粒度。在循环中判断当前映射范围是否足够,不足时保留剩余数据并重新映射,合并后顺序读取指定长度数据。

    Delphi提取PDF文本实例
    Delphi提取PDF文本实例

    针对当前PDF解析工具稀缺且易出错的现状,本文提出一种利用Delphi语言封装ApachePDFBox开源库的解决方案,通过命令行调用其ExtractText功能,有效实现PDF文档的文本提取。该方法需要Java运行环境以及pdfbox-app-2.0.6.jar包支持,运行稳定可靠,并且能够正确处理中文内容,具有实用性。

    Delphi实现截屏存盘的方法
    Delphi实现截屏存盘的方法

    在Delphi中,通过GetDC获取屏幕设备上下文,创建兼容DC及位图,利用BitBlt复制指定区域,然后赋给TJPEGImage并设置压缩质量70,保存为JPEG文件,需注意释放GDI对象以避免内存泄漏。

    Delphi7中群发Email邮件的方法
    Delphi7中群发Email邮件的方法

    在Delphi7环境下,通过安装WinWebMail邮件服务器、配置Indy控件及SMTP账户,实现了考生信息的批量邮件群发。函数封装了发送及地址合法性判断流程,每50封邮件延迟2秒,并注意了反垃圾邮件限制及验证模式问题。

    Delphi实现检测并枚举系统安装的打印机的方法
    Delphi实现检测并枚举系统安装的打印机的方法

    通过调用Printer.Printers属性,可自动检测并枚举系统中所有已安装打印机,返回名称列表。若列表为空则提示未安装。该方法代码简洁、逻辑清晰,非常便于集成到Delphi项目中。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。