在c中制作一个3d文本编辑器

在c中制作一个3d文本编辑器,第1张

概述目前我正在为linux系统编写一个文本编辑器,它可以执行一些涉及opengl渲染的特定文本/字体突出显示.有没有人建议使用适合linux的c图形渲染库(特别是现在的ubuntu)?并建议从哪里开始渲染3D文本非常感谢!编辑:只是为了澄清渲染3d文本是项目的严格要求.最佳答案在OpenGL级别基本上只有三种方法:光栅字体.使用glBitmap或glDrawPi

目前我正在为linux系统编写一个文本编辑器,它可以执行一些涉及opengl渲染的特定文本/字体突出显示.有没有人建议使用适合linux的c图形渲染库(特别是现在的ubuntu)?

并建议从哪里开始渲染3D文本非常感谢!

编辑:只是为了澄清渲染3d文本是项目的严格要求.

最佳答案在OpenGL级别基本上只有三种方法:

光栅字体.

使用glBitmap或glDrawPixels在屏幕上绘制一组矩形像素.这样做的缺点很多:
描述每个字符的数据每帧都从cpu发送到图形卡 – 以及帧中的每个字符.这可能相当于显着的带宽.
底层的OpenGL实现几乎肯定必须以某种方式在cpu和帧缓冲区之间“混合”图像数据.
许多3D图形芯片根本不是为了绘制位图而设计的.在这种情况下,OpenGL软件驱动程序必须等到3D硬件完全完成绘制,然后才能将像素直接溅入帧缓冲区.在软件完成之前,硬件处于空闲状态.
位图和Drawpixels必须平行于屏幕边缘对齐,因此无法旋转文本.
缩放位图和Drawpixels是不可能的.
Raster字体有一个显着的优点 – 那就是在纯软件OpenGL实现上,它们可能比其他方法更快……与3D硬件情况相反.

几何字体.
使用几何图元(线条,三角形等)绘制字体的字符.这样做的缺点是:
绘制一些字符所需的三角形数量可能非常大 – 特别是如果您希望它们看起来很好.这可能对性能不利.
设计字体既困难又昂贵.
使用彩色边框,阴影等进行字体处理会显着加剧其他两个问题.

优点是:
几何字体可以缩放,旋转,扭曲,变形,挤压.
您可以使用精美的灯光模型,环境贴图,纹理等.
如果在3D世界中使用,您可以使用它们执行碰撞检测.
几何字体很好地缩放.它们没有表现出错误的锯齿伪影,并且它们在扩大时不会变得“模糊”.

纹理映射字体.
通常,整个字体存储在一个或两个大纹理贴图中,每个字母绘制为单个四边形.缺点是:
您需要的纹理贴图的大小可能必须非常大 – 特别是如果您需要大写和小写 – 和/或如果您想使字体在大点大小时看起来很好.这对于仅支持有限纹理贴图大小的硬件尤其是一个问题(例如3Dfx Voodoo只能渲染高达256×256的地图)
如果使用MIPmapPing,则缩放字体会使其看起来模糊不清.如果你不使用MIPmapPing,它看起来会很可怕.

优点是:
一般性 – 您可以为字体的每个字母使用任意全彩色图像.
纹理字体可以旋转和缩放 – 尽管它们看起来总是“平坦”.
将其他类型的字体转换为纹理贴图很容易.
您可以在3D场景中绘制它们,它们将被正确照亮.
速度!纹理字体只需要将一个四边形发送到每个字母的硬件.这可能比Raster或Geometric字体快一个数量级.由于低端3D硬件经过高度优化,可以绘制简单的纹理多边形,因此您可以通过渲染器“快速通过”速度,从而提高速度. (CAVEAT:在纯软件OpenGL上,纹理字体将是S-L-O-W.

一些免费字体库的链接:

> glut
> glTexFont
> fnt
> GLTT
> freetype 总结

以上是内存溢出为你收集整理的在c中制作一个3d文本编辑器全部内容,希望文章能够帮你解决在c中制作一个3d文本编辑器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存