【问题标题】:glColor3f in OpenGl have little brightnessOpenGL中的glColor3f亮度很小
【发布时间】:2019-05-29 09:40:13
【问题描述】:

我的 OpenGL 代码有问题 我需要做一个游戏引擎。 我使用 freeglut 库。 我用旧的 Visual Studio 版本做了这个练习,我没有这个问题。但是在 Visual Studio 2017 中,glColor3f 属性显示的亮度很小。为什么?

这是我用来显示文本的代码:

char instrucciones3[100];
sprintf_s(instrucciones3, "PULSA 'ESC' SI QUIERES SALIR");
char *res4 = instrucciones3;
glColor3f(0.0f, 1.0f, 1.0f); //This is the problem, I dont have alpha but the brightness is low.
glRasterPos3f(1.0f, 5.0f, 0.0f);
drawString(res4);

char instrucciones2[100];
sprintf_s(instrucciones2, "PULSA 'H' PARA COMENZAR PARTIDA ");
char *res3 = instrucciones2;
glColor3f(0.0f, 1.0f, 1.0f);
glRasterPos3f(-10.0f, 5.0f, 0.0f);
drawString(res3);

更新:

亮度这么低,但模型不错。我在新代码中输入了glColor3f(0.0f, 1.0f, 1.0f);,但结果是一样的。


更新2 这是我的 displayMe 函数:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0, 3, 15, 0, 0, 0, 0, 1, 0);

glRotatef(yaw, 0.0, 1.0, 0.0);
glRotatef(pitch, 1.0, 0.0, 0.0);
glRotatef(roll, 0.0, 0.0, 1.0);
GLfloat lightpos[] = { 5.0, 15., 5., 0. };
glLightfv(GL_LIGHT0, GL_POSITION, lightpos);

【问题讨论】:

  • 我尝试这样做,但结果是一样的。亮度太低了,几乎是黑色。
  • 我不使用那个。
  • 您是在绘制模型之前还是之后绘制文本?您是否尝试交换订单?
  • 在模型之后,但是如果我在文本之后绘制模型,结果是一样的
  • 我有这个 GLfloat lightpos[] = { 5.0, 15., 5., 0. }; glLightfv(GL_LIGHT0, GL_POSITION, lightpos);也许,这就是问题所在?

标签: c opengl freeglut opengl-1.x


【解决方案1】:

固定功能灯光模型也应用于文本。这将导致任意结果,具体取决于当前灯光设置和当前法线向量属性。您必须在绘制文本之前禁用照明。

glDisable(GL_LIGHTING);

你必须在绘制几何图形之前启用它

glEnable(GL_LIGHTING);

glColor3f 的参数必须是 [0.0, 1.0] 范围内的浮点值,

glColor3f(0.0f, 1.0f, 1.0f);

glColor3ub 相比,其中参数是 [0, 255] 范围内的整数值。

glColor3ub(0, 255, 255);

OpenGL Specification (Version 2.0) - 2.7. VERTEX SPECIFICATION; page 21

设置RGBA颜色的命令是

void Color{34}{bsifd ubusui}( T components );
void Color{34}{bsifd ubusui}v( T components );

颜色命令有两个主要变体:Color3Color4。四个值版本设置所有四个值。三个值版本将 R、G 和 B 设置为提供的值; A 设置为 1.0。
[...] 采用浮点数的 Color 和 SecondaryColor 命令版本 values 接受名义上介于 0.0 和 1.0 之间的值
[...]

GL        Type Conversion
ubyte     c/(2^8 − 1)
byte      (2c + 1)/(2^8 − 1)
ushort    c/(2 16 − 1)
short     (2c + 1)/(2^16 − 1)
uint      c/(2^32 − 1)
int       (2c + 1)/(2^32 − 1)
float     c
double    c

【讨论】:

  • 我试试这个,但结果是一样的
  • Rabbid 您对禁用和启用功能的评论是解决方案,谢谢!
  • 但您在我的问题中的评论已被删除,但我不这样做。我试图找到你的评论,但没有出现。
  • @Ana 我扩展了答案。我删除了评论并将评论添加到答案中(在答案的开头)。
【解决方案2】:

你在某处使用纹理吗?如果是这样,请尝试在绘制其他内容之前禁用纹理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2022-01-12
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多