我尝试在OpenGL和FreeType2中渲染文本,我不知道在渲染字体时如何获得每行之间的空间(以像素为单位).当我解析文本时,我希望能够做类似的事情
const char *text = "some text\n here";
for(char *p = text; *p; p++)
{
if(*p == '\n')
{
y -= newLineDistance;
continue;
}
...//render text here
}
Run Code Online (Sandbox Code Playgroud)
起初我用过
newLineDistance = face->glyph->metrics.vertAdvance >> 6;
Run Code Online (Sandbox Code Playgroud)
但它不适用于某些字体,因为文档也说它对非垂直字体(中文等)不可靠
我最近进入图形编程,我注意到许多图形引擎(即Ogre)和许多编码器总体上更喜欢动态地初始化类实例.这是Ogre Basic Tutorial 1的一个例子
//...
Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh");
Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("HeadNode");
//...
Run Code Online (Sandbox Code Playgroud)
ogreHead然后将headNode数据成员和方法称为ogreHead->blabla.
为什么要乱用对象指针而不是普通对象?
顺便说一下,我还读到了堆内存分配比堆栈内存分配慢得多的地方.
我可以决定编译器可以生成哪些类型的模板类吗?
假设我希望下一个类只能保存实数(float,double)而不是整数类型.
//can I force T to be only real number types?
template<typename T>
class RealNumber
{
public:
T num;
RealNumber() : num() {}
void add(T x) { num += x; }
T get() const { return num; }
};
Run Code Online (Sandbox Code Playgroud)
所以这应该生成一个编译错误:
RealNumber<int> myrealnumber;
Run Code Online (Sandbox Code Playgroud) 是否有基于数据成员或成员函数对对象数组进行排序或过滤的标准方法?
我正在寻找一个标准函数,如getLowestValue下面的代码:
class Grade
{
public:
Grade() : _grade(0) {}
void setGrade(int i) { _grade = i; }
int getGrade() const { return _grade; }
private:
int _grade;
}
int main()
{
Grade grades[10];
for(int i = 0; i < 10; i++)
grades[i].setGrade(generateRandomNumber());
Grade *lowestGrade = getLowestValue(grades, Grade::getGrade); //???
std::cout << "lowest grade: " << lowestGrade->getGrade() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 可以肯定地说,如果我不希望容器中有重复项,并且我不关心元素位置,因为我只想遍历容器,那么我应该使用unordered_set而不是vector?
给定两个排序的整数数组 A1、A2,具有相同的长度n和一个整数x,我需要编写一个以 O(nlog(n)) 运行的算法,该算法确定是否存在两个元素a1, a2(每个数组中的一个元素)使a1+a2=x.
起初我想有两个索引迭代器i1=0, i2=0(每个数组一个)从 0 开始,一次增加一个,这取决于 A1 的下一个元素比 A2 的下一个元素大/小。但是在两个阵列上对其进行测试后,我发现它可能会遗漏一些可能的解决方案......
测试中的一个问题:
设T为 AVL 树, 为x,y树中的两片叶子 ( x != y)。的最大值是多少depth(x) - depth(y)?
A. 0
B. 1
C. 2
D. None of the above
Run Code Online (Sandbox Code Playgroud)
正确的(?)答案是 D。有人可以解释为什么它不是 B,因为 AVL 属性之一是height(a.left) - height(a.right) <= 1每个节点的属性a?
我正在写一个3d资产导入库.(它使用Assimp,顺便说一句).有一个包含网格的节点的大场景,每个网格都包含一个材质.所以我创建了下一个类:Scene,Mesh,Material.
只有Scene类应该被编码器实例化和使用,所以最合理的做法是(imo)将Mesh声明为一个私有的内部Scene(以及Material作为Mesh内部的私有).
这应该没问题,因为只有Scene才应该使用Mesh,但唯一的问题是它看起来很糟糕,而且我不方便用这种方式编码.(函数嵌套在类中嵌套的类等...)
我的问题是,是否有其他编码方法来实现我的目标.
我想检查 aglm::vec3是否等于零向量glm::vec3(0,0,0)。
直到现在我在写
if(v == glm::vec3(0,0,0))
...
Run Code Online (Sandbox Code Playgroud)
但后来我了解了 epsilon,所以我的问题是,是否有一种更快(更具可读性)的方法来进行此检查,而不是像这样进行显式比较:
if(abs(v.x) < EPSILON && abs(v.y) < EPSILON && abs(v.z) < EPSILON)
...
Run Code Online (Sandbox Code Playgroud) 很多人都注意到MSAA不适用于延迟着色.这是为什么?这听起来还不错.
根据维基百科:
...由于将照明阶段与几何阶段分开,硬件抗锯齿不再产生正确的结果,因为插值子样本将导致无意义的位置,法线和切线属性.
你能解释一下吗?
我有哪些其他AA替代品?