Я пишу программу на окнах, используя c++
, opengl 2.1
и SDL
, и у меня есть некоторые проблемы с цветами вершин.OpenGL: всегда того же цвета
Я использую glColor3f
, чтобы установить цвет для каждого набора вершин, но, похоже, он не работает. Я получаю каждую вершину, красную, независимо от того, какой цвет я выбираю. Я проверил значения, переданные на glColor3f
, и они действительно не 1.f, 0.f, 0.f ...
Неужели кто-нибудь сталкивался с такой проблемой или знает, что может вызвать ее? Может быть, я не буду входить в какую-нибудь библиотеку? Или вы считаете, что это может быть проблема с кодом инициализации SDL (это не должно быть, поскольку я использовал его раньше правильно)?
EDIT4: решаемый .. это действительно проблема GPU, я получил драйвера от производителя, и теперь работает должным образом ... пойти фигуру
EDIT: Я также не использовать какое-либо освещение, текстуры или что-то в этом роде. Графически я просто настроить окно и сказать 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? Все остальное показывает с нормальными цветами, хотя .. веб-браузер, видео, игры и т.д.
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);
}
}
Можете ли вы показать пример кода вашего цикла визуализации? –
Является ли прозрачный цвет, измененный с помощью glClearColor, также отображаться красным, если вы установите его (1,1,1,1)? – rotoglup
Нет .. на самом деле, изменение прозрачного цвета вообще не имеет никакого эффекта. Это всегда черный фон. – Zepee