Добрый день.
Осваиваю, или пытаюсь это сделать, OpenGL.
К сожалению не так много подробной информации как хотелось бы можно найти.
Столкнулся с такой проблемой - сцена отображается в черно-белых тонах, хотя, как казалось бы, должна быть цветной.
Помогите, плз, разобраться почему так.
Пишу на C# с использованием Tao framework.
Вот код, простой как сибирский валенок...
При инициализации формы
Код:
// инициализация OpenGL
// инициализация бибилиотеки glut
Glut.glutInit();
// инициализация режима экрана
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE);
// установка цвета очистки экрана (RGBA)
Gl.glClearColor(255, 255, 255, 1);
// установка порта вывода
Gl.glViewport(0, 0, AnT.Width, AnT.Height);
// активация проекционной матрицы
Gl.glMatrixMode(Gl.GL_PROJECTION);
// очистка матрицы
Gl.glLoadIdentity();
Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 2000);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
Gl.glEnable(Gl.GL_DEPTH_TEST);
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_LIGHT0);
Отрисовка, происходит по таймеру
Код:
private void draw()
{
// очистка буфера цвета и буфера глубины
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glClearColor(255, 255, 255, 1);
// очищение текущей матрицы
Gl.glLoadIdentity();
Gl.glPushMatrix();
// перемещаем камеру для более хорошего обзора объекта
Gl.glTranslated(0, 0, -zoom);
Gl.glRotated(rotationX, 1, 0, 0);
Gl.glRotated(rotationY, 0, 1, 0);
Gl.glRotated(rotationZ, 0, 0, 1);
Gl.glBegin(Gl.GL_LINES);
Gl.glColor3f(255, 0, 0);
Gl.glVertex3d(0, 0, 0);
Gl.glVertex3d(100, 0, 0);
Gl.glColor3f(0, 255, 0);
Gl.glVertex3d(0, 0, 0);
Gl.glVertex3d(0, 100, 0);
Gl.glColor3f(0, 0, 255);
Gl.glVertex3d(0, 0, 0);
Gl.glVertex3d(0, 0, 100);
Gl.glEnd();
///
/// Рисуем плоскость на которой расположены объекты
/// синим цветом
///
Gl.glColor3f(0, 0, 0.9f);
Gl.glNormal3f(0, 1, 0);
Gl.glBegin(Gl.GL_QUADS);
Gl.glVertex3f(-100, -25, -100);
Gl.glVertex3f(-100, -25, 100);
Gl.glVertex3f(100, -25, 100);
Gl.glVertex3f(100, -25, -100);
Gl.glEnd();
///
/// Рисуем красный куб
///
Gl.glColor3f(1, 0, 0);
Glut.glutSolidCube(48);
///
/// Рисуем зеленую сферу
///
Gl.glColor3f(0, 1, 0);
Gl.glPushMatrix();
Gl.glTranslated(-60, 0, 0);
Glut.glutSolidSphere(25, 64, 64);
Gl.glPopMatrix();
///
/// Рисуем желтый конус
///
Gl.glColor3f(1, 1, 0);
Gl.glPushMatrix();
Gl.glRotated(-90, 1, 0, 0);
Gl.glTranslated(60, 0, -24);
Glut.glutSolidCone(25, 50, 64, 64);
Gl.glPopMatrix();
///
/// Рисуем пуппурный тор
///
Gl.glColor3f(1, 0, 1);
Gl.glPushMatrix();
Gl.glTranslated(0, 0, 60);
Glut.glutSolidTorus(8, 16, 64, 64);
Gl.glPopMatrix();
///
/// Рисуем голубой октаэдр
///
Gl.glColor3f(0, 1, 1);
Gl.glPushMatrix();
Gl.glTranslated(0, 0, -60);
Gl.glScaled(25, 25, 25);
Glut.glutSolidOctahedron();
Gl.glPopMatrix();
Gl.glPopMatrix();
Gl.glFlush();
AnT.Invalidate();
}
А вот печальный результат: