当前位置: 首页 > 知识库问答 >
问题:

OpenGL LWJGL-glColor4d()未正确着色形状

商正浩
2023-03-14

我在使用OpenGL使颜色正常工作时遇到问题。我正确地绘制了形状,它们看起来很好,但当我调用glColor4d(r,g,b,a)时,它并没有正确地使用RGB应该指定的颜色,而是绘制了不同但相似的颜色。例如,大多数绿色绘制为完全黄色或完全绿色,任何灰色绘制为纯白。

Color[r=132,g=234,b=208,a=255,hexa=84EAD0]
Color[r=150,g=1,b=59,a=255,hexa=96013B]
Color[r=88,g=117,b=170,a=255,hexa=5875AA]
Color[r=219,g=190,b=26,a=255,hexa=DBBE1A]
Color[r=208,g=51,b=164,a=255,hexa=D033A4]
Color[r=85,g=43,b=228,a=255,hexa=552BE4]
Color[r=167,g=123,b=184,a=255,hexa=A77BB8]
Color[r=241,g=183,b=25,a=255,hexa=F1B719]

在这个随机颜色值的短列表中,所有颜色值都绘制为实心FFFFFF白色,即使它们都不应为白色。

我用来绘制矩形的代码:

public void drawRectangle(Color fill, double x, double y, double width, double height, double rot){
    GL11.glPushMatrix();
    GL11.glTranslated(x, y, 0);
    GL11.glRotated(rot, 0, 0, 1);
    GL11.glTranslated(-x, -y, 0);
    GL11.glBegin(GL11.GL_TRIANGLES);
    if(fill != null)GL11.glColor4d(fill.getRed(), fill.getGreen(), fill.getBlue(), fill.getAlpha());
    double width2 = width/2;
    double height2 = height/2;
    GL11.glVertex2d(x - width2, y + height2);
    GL11.glVertex2d(x - width2, y - height2);
    GL11.glVertex2d(x + width2, y + height2);
    GL11.glEnd();
    GL11.glBegin(GL11.GL_TRIANGLES);
    if(fill != null)GL11.glColor4d(fill.getRed(), fill.getGreen(), fill.getBlue(), fill.getAlpha());
    GL11.glVertex2d(x - width2, y - height2);
    GL11.glVertex2d(x + width2, y + height2);
    GL11.glVertex2d(x + width2, y - height2);
    GL11.glEnd();
    GL11.glPopMatrix();
}

共有1个答案

储志业
2023-03-14

glColor4d()采用从0.0到1.0的参数,而不是像glColor4i()那样采用255的参数。高于1.0的所有内容都更改为1.0,在大多数情况下会导致白色
更改

GL11.glColor4d(fill.getRed(), fill.getGreen(), fill.getBlue(), fill.getAlpha());

GL11.glColor4d(fill.getRed() / 255.0, fill.getGreen() / 255.0, fill.getBlue() / 255.0, fill.getAlpha() / 255.0);
 类似资料:
  • 我正在做一个游戏,我现在正在写一个着色器来反射光从一个物体,我不断得到错误消息: 任何帮助都将不胜感激。

  • 为了获得python方面的培训,我决定使用脚本绘制mandelbrot集。绘制它并不太复杂,所以我决定使用颜色,我发现了平滑着色算法。使用这个问题,我能够渲染出一些非常漂亮的东西,类似于这个。 为了实现这一点,我使用三个“步骤”设置了渐变调色板:从深蓝色到浅蓝色,然后从浅蓝色到黄色,最后从黄色到深棕色。整体形象完美。 当我试图太放大时,问题就来了。让我们以这个区域为例。当我处于这种缩放水平时,我的

  • 如果您想尝试代码,请按d移动字符。 问题是,当它到达最后一列时,我的函数正确地假设将head\u col更改为0,这样它看起来就像到达了屏幕的末尾。不幸的是,它在第80列末尾漏掉了一个字符,然后继续打印,但在下一行。 然后当它到达第13行的末尾时,它不会在第0行留下一个字符,而是仍然向下移动另一行,在第3行继续打印后,它似乎回到了原来的行,然后当它到达起点时,它不再打印任何东西。

  • 我试图创建一个堆叠条形图与chartjs。我有时间差异的时间序列,这意味着一些序列可以在一段时间内有价值,但其他序列没有价值。出于这个原因,我选择直接将x值包含在数据集中,而不是作为标签数组,但是图表不能正确渲染。 这是我的代码: 我认为问题在于x轴堆叠。 这里有一个JSFiddle来说明这个问题。 https://jsfiddle.net/1kLyyjfp/

  • 我正在使用geoJSON在Android MapBox中显示一个形状。在geoJSON中,我有很多多边形,每个多边形在“属性”JSONObject中都有一个值,下面是一个示例: 我想根据值用特定颜色填充多边形。 我应该怎么做来给形状上色? 在JSON中为“poperties”对象添加一个“fill”值?(还没有为我工作。) 手动解析JSON并在“PolygonOptions”对象中使用“fillC