Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL:始终使用相同的颜色_C++_Opengl_Colors_Sdl - Fatal编程技术网

C++ OpenGL:始终使用相同的颜色

C++ OpenGL:始终使用相同的颜色,c++,opengl,colors,sdl,C++,Opengl,Colors,Sdl,我正在使用c++、opengl2.1和SDL在windows上编写一个程序,并且顶点颜色有一些问题 我正在使用glColor3f为每个顶点集设置颜色,但它似乎不起作用。无论我选择什么颜色,我都会把每个顶点画成红色。我检查了传递给glColor3f的值,它们实际上不是1.f、0.f、0.f 有没有人遇到过这样的问题,或者知道是什么原因造成的?我是不是不包括一些我应该做的事?或者您是否认为SDL初始化代码可能有问题(不应该有问题,因为我以前正确使用过它) 编辑4:解决了。。这确实是一个gpu的问题,

我正在使用
c++
opengl2.1
SDL
在windows上编写一个程序,并且顶点颜色有一些问题

我正在使用
glColor3f
为每个顶点集设置颜色,但它似乎不起作用。无论我选择什么颜色,我都会把每个顶点画成红色。我检查了传递给
glColor3f
的值,它们实际上不是1.f、0.f、0.f

有没有人遇到过这样的问题,或者知道是什么原因造成的?我是不是不包括一些我应该做的事?或者您是否认为SDL初始化代码可能有问题(不应该有问题,因为我以前正确使用过它)

编辑4:解决了。。这确实是一个gpu的问题,我从制造商那里得到了驱动程序,它现在工作正常。。。算计

编辑:我也不使用任何照明、纹理或任何种类的东西。从图形上说,我只是设置了窗口,告诉opengl一些顶点和颜色来绘制

EDIT2:当然,但我很怀疑有什么问题:

int GLmain::redraw(GLvoid)                              
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_LINE_STRIP);
for(int i=0; i<s->divs.size(); i++){
    vec3 v = s->divs.at(i).getPosition();
    vec3 c = s->divs.at(i).getColor();
    glColor3f(c.get(0),c.get(1),c.get(2));
    glVertex3f(v.get(0),v.get(1),v.get(2));
}
glEnd();

return TRUE;
}

有两个可能的原因:

  • 或者启用了某些最终将导致红色顶点的渲染状态。例如纹理、材质(!?)、照明等

  • OpenGL调用的“周围”代码有bug(例如:您真的确定
    c.get(1)
    不返回0吗?)

  • 编辑:OpenGL渲染上下文的设置失败或上下文未按预期/预期工作!例如,它没有预期的特性、钻头深度等

  • 为了消除任何疑问,请添加以下行并检查其结果:
    printf(“c=(%f,%f,%f)”,(float)c.get(0),(float)c.get(1),(float)c.get(2))

    您能试试这个吗:

    glShadeModel( GL_SMOOTH );
    
    告诉我问题是否解决了


    将调用放在
    Init\u OpenGL
    函数中。

    不确定这是否适用于您,但我只需要调用一次
    glUseProgram(NULL),告诉opengl使用固定的函数管道,问题得到了解决。

    能否显示渲染循环的一些示例代码?如果将其设置为(1,1,1,1),使用glClearColor更改的清晰颜色是否也显示为红色?否。。事实上,改变清晰的颜色根本没有效果。。总是黑色背景不。。我确实检查了这些值,它们确实是随机的。。还包括glMatrixMode(GL_投影);glLoadIdentity();格洛托(-100.0,100.0,-1.0,500.0,-20.0,20.0);glMatrixMode(GLU模型视图);glLoadIdentity();glEnable(GLU深度试验);glDepthFunc(GL_LESS);glShadeModel(GL_平滑);这些是我所做的唯一其他opengl调用(+sdl调用),它可能与渲染上下文有关(特别是当您写道“我刚刚尝试运行了一些我用opengl完成的其他工作,并且所有内容都显示为红色”)。我没有太多使用SDL,但请发布您的(渲染上下文)设置代码!我已经有了,我在评论中提到了。老实说,我不认为这是一个代码问题。。一年前编译的同一个可执行文件给了我正确的颜色,而现在它全是红色的
    glShadeModel( GL_SMOOTH );