我正在使用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. Flutter开发之ListView添加HeaderView和FooterView-2(39)
  2. python电脑软件下载-Python for windows
  3. linux命令 正则表达式,详解Linux命令中的正则表达式
  4. centos oracle sqlplus,centos 下oracle sqlplus乱码问题解决
  5. 20个 CSS 快速提升技巧
  6. 判断操作系统类型的多种方法
  7. 标志寄存器02 - 零基础入门学习汇编语言55
  8. 朱嘉明《火药:改变了人类历史演变模式》
  9. @Value 注解用法
  10. 测试2年6.5K,每天“911”,我的心酸经历只有我自己知道···
  11. 有源与无源晶振的区别
  12. C#中Chart控件的一些由浅至深的理解
  13. Flume采集数据利器
  14. C语言中的float(单精度浮点数)
  15. Oracle11g R2相比R1的区别
  16. unity星空银河绚烂天空盒宇宙场景
  17. U8标准接口API使用-生产订单
  18. 一个编得好的拼音输入法C51的
  19. RS232转RS484接线图
  20. 吉林大学计网真题以及期末题汇总

热门文章

  1. 『安全工具』注入神器SQLMAP
  2. python爬虫模拟有道翻译
  3. A股-进阶-1分钟get的选股八大技巧
  4. 嵌套/双层循环中的continue和break详解
  5. 内齿轮铣齿机铣削动力头的设计(论文+CAD图纸)
  6. 人工神经网络(ANN/NN)、感知机(PLA)
  7. MySQL数据库之管理工具(上)
  8. Simulink简单模型
  9. c语言求n个数最大最小值,c语言 如何求n个数的最大值 最小值
  10. TopCoder比赛简介