Добрый день, после компиляции выходит окно с ошибкой "failed to open dib file bmp". Погуглил и особо ничего не понял, может кто подскажет.
Код:
#include <iostream>
#include<glut.h>
#include <windows.h>
#include <stdio.h>
#include <glaux.h>
#pragma warning(disable : 4996)
using namespace std;
unsigned int T_tex;
const double G = 6.67 * pow(10, -11);
const double M = 5.97 * pow(10, 24), R = 6.37 * pow(10, 6);
const double pi = 3.1415926535;
double hzp;
float omega, T1, v;
GLfloat rx = 0; // Угол поворта сцены вокруг оси X
GLfloat ry = 0; // Угол поворта сцены вокруг оси Y
int mx, my; // Координаты мыши
bool ldown = false; // Нажата левая клавиша мыши?
bool rdown = false; // Нажата правая клавиша мыши?
GLuint list = 0;
float angle;
void Texture()
{
AUX_RGBImageRec* T = auxDIBImageLoadA("Photo.bmp");
glGenTextures(1, &T_tex);
glBindTexture(GL_TEXTURE_2D, T_tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, T->sizeX, T->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, T->data);
}
void speed()
{
// double omega = 0;
cout << "hzp=";
cin >> hzp;
omega = sqrt(G * M / pow((R + hzp), 3));
cout << "omega = " << omega << endl;
T1 = 2 * pi / omega;
cout << "T=" << T1 / 3600 << endl;
v = omega * (R + hzp);
cout << "v=" << v << endl;
}
void Init() // Инициализация OpenGL
{
glClearColor(0.5, 0.5, 0.75, 1); // Цвет фона
glEnable(GL_LIGHTING); // Включаем расчёт освещения
glEnable(GL_LIGHT0); // Включаем первый источник света
// Настраиваем источник света GL_LIGHT0
float light_ambient[4] = { 0.5, 0.5, 0, 0 };
float light_diffuse[4] = { 1.0,1.0,1.0,1.0 };
float light_specular[4] = { 0.0,1.0,0.0,1.0 };
float light_position[4] = { 1.0,1.0,1.0,0.2 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_NORMALIZE); //делаем нормали одинаковой величины во избежание артефактов
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glPopMatrix();
}
void Display() // Вывод изображения на экран
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, 6.0, 8.0);
gluLookAt(0, 0, 7, 0, 0, 0, 0, 1, 0);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
list = glGenLists(1);
glNewList(list, GL_COMPILE); //Создание дисплейного списка объекта (чайника)
glutSolidSphere(0.25, 30, 30);
glPushMatrix();//Сохраняем координаты первой сферы
glColor3f(0.3, 0.5, 0.9);//задаём цвет второй сферы
glTranslated(0.25 * (hzp + R) / R, 0.0, 0.0);//Сдвиг на 0.7 по оси x
glTranslated(-0.25 * (hzp + R) / R, 0.0, 0.0);//Перевод камеры в исходное положение
glRotatef(angle, 0.0, 0.0, 1.0);//Поворот вокруг начала координат
glTranslated(0.25 * (hzp + R) / R, 0.0, 0.0);//перевод камеры назад
glutSolidSphere(0.05, 50, 50);
glEndList();
glPushMatrix();
glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glCallList(list); // Вывод объекта на экран
glPopMatrix();
glutSwapBuffers(); // Смена переднего и заднего буферов экрана
}
void timer(int value)
{
glutTimerFunc(10, timer, 0);
Display();
Texture();
angle++;
glRotatef(0.0, 0.0, 0.0, 1.0);
glutPostRedisplay();
}
void Mouse(int button, int state, int x, int y) //Обработка щелчков мыши
{
if (button == GLUT_LEFT_BUTTON) //Левая кнопка
{
switch (state)
{
case GLUT_DOWN: //Если нажата
ldown = true; //установить флаг
mx = x; //Запомнить координаты
my = y;
break;
case GLUT_UP:
ldown = false;
break;
}
}
}
void MouseMotion(int x, int y) //Перемешение мыши
{
if (ldown) // Левая кнопка
{
rx += 0.5 * (y - my); //Изменение угола поворота
ry += 0.5 * (x - mx);
mx = x;
my = y;
glutPostRedisplay(); //Перерисовать экран
}
}
void MousePassiveMotion(int x, int y)
{
char buf[80];
sprintf(buf, "Mouse coords is: x=%d; y=%d", x, y);
glutSetWindowTitle(buf);
}
int main(int argc, char* argv[])
{
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); // Задаём параметры окна
glutCreateWindow("GLUT Teapot"); // Создём окно
Init();
// Задаём функцию обратного вызова вывода изображения на экран
glutIdleFunc(Display);
glutDisplayFunc(Display);
glutPassiveMotionFunc(MousePassiveMotion); // Обработчик перемещений грызуна при отжатой кнопке мыши
glutMotionFunc(MouseMotion); // Обработчик перемещений грызуна при зажатой кнопке мыши
glutMouseFunc(Mouse);
glutTimerFunc(10, timer, 0);
speed();
glutMainLoop();
Texture();
return 0;
}