我正在使用c++
,opengl 2.1
和SDL
在窗口上写一个程序,并且在顶点颜色方面存在一些问题。OpenGL:总是相同的颜色
我使用glColor3f
来设置每个顶点集的颜色,但它似乎不工作。无论我选择什么颜色,我都会将每个顶点绘制为红色。我检查了传递给glColor3f
的值,它们确实不是1.f,0.f,0.f ...
有没有人遇到过这样的问题,或者知道可能是什么原因造成的?我可能不包括一些lib我应该?或者你认为SDL初始化代码可能存在一些问题(它不应该像我之前使用过的那样)?
EDIT4:解决..这的确是一个问题的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;
}
正如你所看到的,非常标准的东西.. c保持在0.0-1.0之间的值。 我刚刚尝试过运行一些其他我用OpenGL完成的工作,并且一切都显示为红色(以前不是这样),所以我猜测它与我正在使用的库有关:
opengl32.lib sdl.lib sdlmain.lib glu32.lib
SDL是1.2.14版。另外,它可能是我的GPU的问题?其他的一切显示了正常的颜色,但.. web浏览器,视频,游戏等
EDIT3:SDL初始化代码:
int done = 0;
int w = 800;
int h = 600;
GLenum gl_error;
char* sdl_error;
SDL_Event event;
Init_OpenGL(argc, argv, w, h); // start window and OpenGL
SDL_WM_SetCaption("MySlinky", ""); /* Set the window manager title bar */
void Init_OpenGL(int argc, char* argv[], int w, int h)
{
int rgb_size[3];
int bpp = 0;
Uint32 video_flags = SDL_OPENGL;
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr,"Couldn't initialize SDL: %s\n",SDL_GetError());
exit(1);
}
/* See if we should detect the display depth */
if (bpp == 0) {
if (SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 8) {
bpp = 8;
} else {
bpp = 16; /* More doesn't seem to work */
}
}
/* Initialize the display */
switch (bpp) {
case 8:
rgb_size[0] = 3;
rgb_size[1] = 3;
rgb_size[2] = 2;
break;
case 15:
case 16:
rgb_size[0] = 5;
rgb_size[1] = 5;
rgb_size[2] = 5;
break;
default:
rgb_size[0] = 8;
rgb_size[1] = 8;
rgb_size[2] = 8;
break;
}
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, rgb_size[0]); // Sets bits per channel
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, rgb_size[1]);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, rgb_size[2]);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); // 3 channels per pixel (R, G and B)
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
if (SDL_SetVideoMode(w, h, bpp, video_flags) == NULL) {
fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError());
SDL_Quit();
exit(1);
}
}
你能展示你的渲染循环的一些示例代码吗? – 2011-01-21 05:16:05
如果您将其设置为(1,1,1,1),那么使用glClearColor更改的清除颜色是否也显示为红色? – rotoglup 2011-01-21 07:25:33
没有..其实,改变清晰的颜色根本没有任何影响..它总是黑色的背景 – Zepee 2011-01-21 11:12:21