c++ - 设置 glutBitmapCharacter() 的颜色?
问题描述
我正在尝试增强 MoonLander 游戏程序 - 只是想更好地理解事物。
我想在燃油低于某个水平时添加警告,并且我希望该警告改变颜色。我的游戏循环以大约 30 帧/秒的速度运行。所以我创建了一个成员变量,它在特定的帧数上“设置”一个 INT。我做了一些检查——我的帧计数器代码工作正常——我的 setWhichColour 函数也是如此。文本确实在屏幕上绘制 - 但它每次都以白色绘制......
这是设置“颜色”成员变量的代码
if (lander.getFuel() < 200)
{
incrementFrameCounter();
if (frameCounter % 15 == 0)
{
setWhichColour(0);
}
else if (frameCounter % 20 == 0)
{
setWhichColour(1);
}
else if (frameCounter % 50 == 0)
{
setWhichColour(2);
}
else
{}
drawText(Point(40, 40), "Warning: Fuel Below 200",getWhichColour());
}
这是我用来在屏幕上绘制文本的 drawText 函数。case 语句只是传递一个整数值来选择要触发的 glColor3f 序列。每次游戏循环运行时,drawText 函数都会运行一次。
void drawText(const Point & topLeft, const char * text, int iColour)
{
void *pFont = GLUT_BITMAP_HELVETICA_12;
// prepare to draw the text from the top-left corner
glRasterPos2f(topLeft.getX(), topLeft.getY());
glPushAttrib(GL_CURRENT_BIT); // <-- added this after finding another answer
switch (iColour)
{
case 0: // red
glColor3f(1.0 /* red % */, 0.0 /* green % */, 0.0 /* blue % */);
case 1: // green
glColor3f(0.0 /* red % */, 1.0 /* green % */, 0.0 /* blue % */);
case 2: //blue
glColor3f(0.0 /* red % */, 0.0 /* green % */, 1.0 /* blue % */);
default: //white
glColor3f(1.0 /* red % */, 1.0 /* green % */, 1.0 /* blue % */);
}
// loop through the text
for (const char *p = text; *p; p++)
glutBitmapCharacter(pFont, *p);
glPopAttrib(); // <-- added this after finding another answer
}
我找到了这个似乎相关的答案: How to Set text color in OpenGL
我已经在上面提到了我从那个答案中复制代码的地方,这似乎应该有所帮助。
不幸的是 - 我的文字仍然是白色的。它根本不设置颜色。我怀疑我错过了一些基本的东西(可能很简单),但我只是没能看到什么。
任何人都可以确定我应该怎么做才能让文本以不同的颜色显示 - 老实说 - 我什至会很高兴它只显示白色以外的任何颜色,即使它没有改变.. .
解决方案
glRasterPos
设置颜色后调用。
推荐阅读
- c# - WPF 将视图模型集合项绑定到没有类名的视图
- javascript - Node 的控制台没有显示所有对象属性……这是预期的行为吗?
- angular - 更改角材料复选框复选标记的颜色
- javascript - 抓取NodeJS时出现分页问题
- matlab - 如何(自动)测量图像中像素缺陷的大小?
- python-3.x - 使用python在Highcharts中添加系列名称时遇到问题
- python - 如何在此代码中生成两次随机数?
- jquery - 如何从 Firebase 中的单个分支获取单个字符串并将其放在 HTML 文本框中并更新它?
- date - 如何使用 NeDB 解决 FeathersJS 前端日期查询
- python - 通过交替元素将列表拆分为 2 个列表