我正在使用NVidia Path extension(NV路径)为OpenGL引擎编写文本模块。该扩展程序允许使用trutype metrics加载系统和外部字体文件。现在,我需要能够在渲染文本时为字形设置标准字体大小(以像素为单位)。默认情况下,加载的字形有EMscale = 2048.搜索字形指标到像素的转换我发现了这个:

将FUnits转换为像素

em方块中的值将转换为像素中的值

通过将它们乘以比例来协调系统。这个规模是:

pointSize * resolution /(每英寸72点* units_per_em)

所以units_per_em等于2048,pointSize和resolution是我无法解决的未知数。如何获得视口宽度和高度的分辨率值进入这个等式?另外,如果我的输入是字体的像素大小,那么点大小应该是多少?

我尝试使用不同类型的输入来解决这个等式,但我的渲染文本总是比参考文本(AfterEffects)更小(或更大)。

NV_Path文档引用FreeType2 metrics。参考文献说:

在face-> glyph->指标中找到的指标通常用。表示

26.6像素格式(即1/64像素),除非在调用FT_Load_Glyph或FT_Load_Char时使用FT_LOAD_NO_SCALE标志。在

在这种情况下,指标将以原始字体单位表示。

我试图将文本模型矩阵缩小1/64。它接近正确的尺寸,但仍然不完美。

以下是我目前在代码中设置文本呈现的方法:

emScale=2048;

glyphBase = glGenPathsNV(1+numChars);

pathTemplate= ~0;

glPathGlyphRangeNV(glyphBase,GL_SYSTEM_FONT_NAME_NV,

"Verdana",GL_BOLD_BIT_NV,0,numChars,GL_SKIP_MISSING_GLYPH_NV,pathTemplate,emScale);

/* Query font and glyph metrics. */

glGetPathMetricRangeNV(

GL_FONT_Y_MIN_BOUNDS_BIT_NV|

GL_FONT_Y_MAX_BOUNDS_BIT_NV|

GL_FONT_X_MIN_BOUNDS_BIT_NV|

GL_FONT_X_MAX_BOUNDS_BIT_NV|

GL_FONT_UNDERLINE_POSITION_BIT_NV|

GL_FONT_UNDERLINE_THICKNESS_BIT_NV,glyphBase+' ' ,1 ,6*sizeof(GLfloat),font_data);

glGetPathMetricRangeNV(GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV,

glyphBase,numChars,0,horizontalAdvance);

/* Query spacing information for example's message. */

messageLen = strlen(message);

xtranslate =(GLfloat*)malloc(sizeof(GLfloat) *messageLen);

if(!xtranslate){

fprintf(stderr, "%s: malloc of xtranslate failed\n", "Text3D error");

exit(1);

}

xtranslate[0] = 0.0f; /* Initial xtranslate is zero. */

/* Use 100% spacing; use 0.9 for both for 90% spacing. */

GLfloat advanceScale = 1.0f,

kerningScale = 1.0f;

glGetPathSpacingNV(GL_ACCUM_ADJACENT_PAIRS_NV,

(GLsizei)messageLen,GL_UNSIGNED_BYTE,message,glyphBase,

advanceScale,kerningScale,GL_TRANSLATE_X_NV,&xtranslate[1]); /* messageLen-1 accumulated translates are written here. */

const unsigned char *message_ub = (const unsigned char*)message;

totalAdvance = xtranslate[messageLen-1] +

horizontalAdvance[message_ub[messageLen-1]];

xBorder = totalAdvance / messageLen;

glEnable(GL_STENCIL_TEST);

glStencilFunc(GL_NOTEQUAL ,0 ,~0);

glStencilOp(GL_KEEP,GL_KEEP,GL_ZERO);

// init matrices /

translate(model ,vec3(0));

translate(view ,vec3(0));

float nearF=1 ,farF = 1200;

glViewport(0,0,_viewPortW,_viewPortH);

glMatrixLoadIdentityEXT(GL_PROJECTION);

float aspect_ratio =(float) _viewPortW /(float) _viewPortH;

glMatrixFrustumEXT(GL_PROJECTION ,-aspect_ratio,aspect_ratio,-1 ,1 ,nearF,farF);

model=translate(model,vec3(0.0f,384.0,0.0f));//move up

//scale by 26.6 also doesn't work:

model=scale(model,vec3((1.0f/26.6f),1.0f/26.6f,1.0f/26.6f));

view=lookAt(vec3(0,0,0),vec3(0,0,-1),vec3(0,1,0));

}

truetype字体怎么转换成普通字体_将truetype字体默认转换为NV路径中的像素大小相关推荐

  1. rdd转换成java数据结构_如何将CSV文件转换为RDD

    一种简单的方法是拥有一种保留标头的方法. 假设您有一个file.csv,例如: user, topic, hits om,  scala, 120 daniel, spark, 80 3754978, ...

  2. 使用pdfbox将pdf转换成图片的时候,STSong-Light字体不存在解决方案

    问题 使用pdfbox将pdf转换成图片的时候,STSong-Light字体的文字全为空格问题解决. 告警信息:Using fallback MT-Extra for CID-keyed font S ...

  3. 如何将夜晚图片转化为白天图片 matlab,教你简单几步将白天图片转换成夜景图_资源库...

    摘要:教你简单几步将白天图片转换成夜景图_资源库 摘要:今天分享一个有趣的教程,教大家利用滤镜和调整图层,简单几步将白天图片变成夜景图,特别实用,还能学到一个鲜为人知的调色功能,看看赶紧练练吧. 原图 ...

  4. 编写一个C程序,实现以下功能:编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101。在main函数中输入整数n,调用函数,输出它的二进制

    题目要求: 编写一个C程序,实现以下功能: //编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101. //在main函数中输入整数n,调用函数 ...

  5. 金额转换,阿拉伯数字转换成中国传统形式。 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整

    金额转换,阿拉伯数字转换成中国传统形式. 例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整 package com.itheima;import java.util.Arr ...

  6. truetype字体怎么转换成普通字体_【转】TrueType(二)字体格式解析

    1. 概述 TrueType字体使用Mac轮廓字体资源的格式编码,标记名为"sfnt". 字体目录TableDirectory包含了字体格式的版本号和几个表. typedef st ...

  7. truetype字体怎么转换成普通字体_一种TrueType字体渲染方法与流程

    本发明涉及一种TrueType字体显示技术领域,尤其是涉及一种基于热排序缓存机制的TrueType字体渲染方法. 背景技术: 随着军民用飞机座舱显示系统的不断复杂.功能的不断增加.显示分辨率的不断增大 ...

  8. truetype字体怎么转换成普通字体_如何创建自己的字体和编辑TrueType字体 | MOS86

    Wouldn 在这篇文章中,我显然,付费的程序往往具有更多的功能和更好的界面来处理字体,但也有一些很好的免费的. 免费字体编辑器 Let有几百万字体可以在线下载或购买,所以如果你 创建新字体的最简单方 ...

  9. truetype字体怎么转换成普通字体_TrueType字体作用|如何在文档嵌入 TrueType 字体中...

    访问量: 18 金山wps终于支持嵌入 TrueType 字体了,关于 嵌入 TrueType字体的作用,举个例子.比较直观的说明这个问题: 我的电脑A,您的电脑B.我的电脑A里面装了"华文 ...

最新文章

  1. 搜狗上线海外权威健康搜索 支持中英双语一键切换
  2. Linux下date命令的修改时间问题
  3. 做个有产品意识的工程师
  4. FM算法python实现
  5. WinXP的EFS加密文件如何解密?
  6. mysql根据ID的顺序查找_求救:mysql 如何根据给定的 ID顺序查找结果?
  7. Android 多屏幕适配 dp和px的关系
  8. Global.asax中的C#服务
  9. 无法获取计算机名,Spring Cloud常见问题之:无法注册主机名
  10. 软件概要设计_软件测试模型之 V模型
  11. Framework7 + Angular 开发问题解决汇总
  12. pivot 与 unpivot函数
  13. android开发 自我优势_android开发简历自我评价填写样本
  14. 201421410013 唐昭靖 作业1
  15. Spectral Algorithm
  16. 乐视X520(乐2 全网通)一键刷机教程
  17. 互联网数据中心(Internet Data Center,IDC)
  18. 计算机硬件更新快,频繁更新电脑硬件驱动程序到底好不好?真相在此
  19. 数据库基础知识点汇总(事务,索引)
  20. openpyxl单元格居中

热门文章

  1. seq和ack的理解
  2. jsliang 求职系列 - 40 - CSS 移动端
  3. python学习之 利用蒙特卡洛方法计算PI值
  4. 香港科大2020年TOP12人气热帖@商学院公众号
  5. Latex的使用(Ctex+TeXstudio)
  6. 缓冲、缓冲区、缓存三者的区别
  7. 校园失物招领系统,失物招领系统,校园失物招领管理系统毕设作品
  8. netsh interface portproxy listenaddress
  9. 【已解决】ping: www.baidu.com: 未知的名称或服务
  10. 输入正整数n,输出n层数字金字塔。