Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2020, 17:36   #1
SADxRobot
 
Регистрация: 13.09.2020
Сообщений: 4
По умолчанию Как наложить текстуру

Добрый день есть код:
Код:
#include <iostream>
#include<glut.h>
#include <windows.h>
#include <stdio.h>  
#pragma warning(disable : 4996)
 
using namespace std;
 
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 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);
 
    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();
    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();
 
    // Задаём функцию обратного вызова вывода изображения на экран
    glutDisplayFunc(Display);
 
    glutPassiveMotionFunc(MousePassiveMotion); // Обработчик перемещений грызуна при отжатой кнопке мыши
    glutMotionFunc(MouseMotion); // Обработчик перемещений грызуна при зажатой кнопке мыши
    glutMouseFunc(Mouse);
 
    glutTimerFunc(10, timer, 0);
    speed();
    glutMainLoop();
 
    return 0;
}
Чет вообще не понимаю с этими текстурами. Нужно на главную сферу наложить текстуры Земли. Не знаю с чего даже начать и можно ли вообще на такую сферу наложить или по вершинам придется перестраивать.
SADxRobot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL C++ наложить текстуру на все фигуры Shade2015 Помощь студентам 3 26.04.2015 18:14
Нужен исходник загрузки текстуру в OpenGL pufystyj Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 19.07.2011 03:07
OpenGL рендеринг в текстуру или ... SalasAndriy Мультимедиа в Delphi 14 22.11.2010 08:27
Наложить текстуру в первую четверть и отображать ее на всю форму(Opengl). peredozer Мультимедиа в Delphi 4 27.05.2010 02:13
Не получается сделать прозрачную текстуру devi409 Мультимедиа в Delphi 5 25.03.2009 05:47