Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
1

Программа с текстурами и 3DS обьектами

27.11.2015, 22:25. Показов 1728. Ответов 54
Метки нет (Все метки)

Хочу показать людям,что это реально,-написать типа "игру" 3Д обьектами.

Мне пацан помог,подсказал метод,как загрузить 3д фигуры

гифка программы:
[cut]

Новичкам и прогерам моя идея со сценой должна дать толчок к развитию

Поделюсь методом загруки 3д фигур,и способам вращения,и кому надо для экспериментов программирования - дам код,и ссылки.

Я в свое время в 2009 году сильно намучался с опенгл,на каждом этапе были проблемы и новые открытия.
Тема создана,чтобы помочь новичкам.ЭТО КРАСИВО - когда на фоне природы вращаются фигуры)

файл:
[cut]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2015, 22:25
Ответы с готовыми решениями:

Шашки-шахматы,примеры с кодом и с 3ds обьектами
Это не серьезная разработка,а любительская,для прикола В папке zip 5 программ .exe с исходным...

QVektor c различными обьектами
Всем добрый вечер. я хочу создать массив обьектов одного класса. Понятное дело что у меня не...

Как разобраться с Обьектами
Парни есть обьект родитель порожденный от TOBJECT, у этого моего обьекта родителя есть несколько...

Коммуникация между обьектами
Доброго времени суток! Ситуация следующая: Имеется 2 классы и 1 интерфэйс public class 1...

__________________
54
65 / 53 / 4
Регистрация: 06.09.2010
Сообщений: 254
29.11.2015, 20:30 2
Intronessia, залили бы на github, лучше гуглом проиндексируется
0
4189 / 2295 / 388
Регистрация: 05.10.2013
Сообщений: 6,394
Записей в блоге: 177
30.11.2015, 00:20 3
Цитата Сообщение от Intronessia Посмотреть сообщение
Поделюсь методом загруки 3д фигур
Через Assimp или свой метод?
0
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
30.11.2015, 00:38  [ТС] 4
3д фигура конвертируется в файл .cpp
1
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
30.11.2015, 02:29  [ТС] 5
версия программы 19 http://liozenda.ru/sound/Teslo19.zip
0
Миниатюры
Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
01.12.2015, 08:02  [ТС] 6
обожаю вращалки,вращение телефона,вращение эмблемы
0
Миниатюры
Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
02.12.2015, 04:49  [ТС] 7
новая вращалка программа Ledetra.zip
0
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
02.12.2015, 04:58  [ТС] 8
скрины программы
0
Миниатюры
Программа с текстурами и 3DS обьектами   Программа с текстурами и 3DS обьектами  
4189 / 2295 / 388
Регистрация: 05.10.2013
Сообщений: 6,394
Записей в блоге: 177
02.12.2015, 12:30 9
Заметил такую особенность: у меня текстуры по-другому выглядят. Но был момент, я что-то нажал и они выглядели, как в вас на скрине.

А сейчас так, как будто белые точки мелькают на текстуре:
0
Миниатюры
Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
02.12.2015, 12:58  [ТС] 10
да,белые точки есть на самой этой текстуре,мне надоедает один цвет и делаю дополннительные цвета,которые переключаются в конце показа.

щас делал часа 3 комнату с диванами,в той же программе,архив Ledetra1.zip обновил

кажется голова кружится от вращения комнаты,надо подумать,чтобы по минимальному комната ехала
0
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
03.12.2015, 05:12  [ТС] 11
глаза резало резало 2 дня,поменял красный цвет
0
Миниатюры
Программа с текстурами и 3DS обьектами   Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
09.12.2015, 20:41  [ТС] 12
по форуму смотрел темы,увидел мужик уголки написал,и вспомнил,что можно шашки написать в 3д
за 5 часов доску сделал,самой игры нету
доска с кнопок вращается,и 2 цвета переключается 3d_Doska.zip
0
Миниатюры
Программа с текстурами и 3DS обьектами   Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
10.12.2015, 19:37  [ТС] 13
так ходят все шашки на 1 клетку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if(enter==1) {  // клик выбора шашки
for(int i=0;i<64;i++) {
 
    if(focus[i]==1 & shashka_pamyat[i]!=4 & sh[i]==1) { shashka_pamyat[i]=4;  
                                                                     if(sh[i-9]!=1 & sh[i-9]!=2) { shashka_cel[i-9]=3; }
                                                                     if(sh[i-7]!=1 & sh[i-7]!=2) { shashka_cel[i-7]=3; }
                                                      } 
    if(focus[i]!=1 & shashka_pamyat[i]==4) { shashka_pamyat[i]=0; shashka_cel[i-9]=0;  shashka_cel[i-7]=0;    } 
}            }
 
 
if(enter==2) {  // ход шашки
for(int i=0;i<64;i++) {
 
    if(focus[i]==1 & shashka_cel[i]==3) {   sh[i]=1; hod=2;   }
    if(hod==2) 
              { if (shashka_pamyat[i]==4) 
                                         { sh[i]=0;
                                                   if(shashka_cel[i-7]==3) { shashka_cel[i-7]=0;}
                                                   if(shashka_cel[i-9]==3) { shashka_cel[i-9]=0;}
                                         enter=1; hod=2;
                                         }
              }
 
}            }
 
 
if(hod==2) {  // кликает и ходит комп
 
for(int rand_hod=0;rand_hod<64;rand_hod++) {
    if(hod==2) {
if(sh[rand_hod]==2) {
                      if(sh[rand_hod+7]!=1 & sh[rand_hod+7]!=2 & rand_hod+7!=16 & rand_hod+7!=32 & rand_hod+7!=48 & rand_hod+7!=64  & rand_hod+7<57) { sh[rand_hod]=0; sh[rand_hod+7]=2; 
                                                                 } else  if(sh[rand_hod+9]!=1 & sh[rand_hod+9]!=2 & rand_hod+9!=17 & rand_hod+9!=33  & rand_hod+9!=49  & rand_hod+9<57 ) { sh[rand_hod]=0; sh[rand_hod+9]=2; 
                                                                                                                   }
                      if(sh[rand_hod]!=2) { hod=0; }
} } } }
12 часов потратил на эти строки кода,было 5 проблем с глюками хода,хотел не наворотить абру кадабру,чтобы по простецки работало
0
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
11.12.2015, 21:57  [ТС] 14
3й день делаю,дебуггер запускал раз 120, дамок пока нету.zip
0
Миниатюры
Программа с текстурами и 3DS обьектами   Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
15.12.2015, 13:52  [ТС] 15
алгоритм шашек на 64 клетки переделал под большую доску,где то за 9 часов
0
Миниатюры
Программа с текстурами и 3DS обьектами   Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
15.12.2015, 15:32  [ТС] 16
еще раз редизайн,после кодинга

3d_Doska.zip
G-frose.zip
0
Миниатюры
Программа с текстурами и 3DS обьектами   Программа с текстурами и 3DS обьектами  
1080 / 692 / 114
Регистрация: 12.10.2013
Сообщений: 4,587
15.12.2015, 22:28 17
Может вместо 500 проверок :
----------
C++
1
2
3
4
5
6
if(hod==1) { kletka=TRUE; }
….
if(hod>144) { kletka=TRUE; }
if(hod<1) { kletka=TRUE; }
    return kletka;
}
Сделать наподобие:
C++
1
if(hod==непарное) { kletka=TRUE; }
----------
Попробуйте применять switch case break говорят помогает =).
Может вместо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (TextureImage[4]=LoadBMP("picture/5.bmp"))
    {
        Status=TRUE;                                    // Set The Status To TRUE
 
        glGenTextures(5, &texture[4]);                  // Create The Texture
 
        // Typical Texture Generation Using Data From The Bitmap
        glBindTexture(GL_TEXTURE_2D, texture[4]);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[4]->sizeX, TextureImage[4]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[4]->data);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    }
 
if (TextureImage[5]=LoadBMP("picture/6.bmp"))
    {
        Status=TRUE;                                    // Set The Status To TRUE
 
        glGenTextures(6, &texture[5]);                  // Create The Texture
 
        // Typical Texture Generation Using Data From The Bitmap
        glBindTexture(GL_TEXTURE_2D, texture[5]);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[5]->sizeX, TextureImage[5]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[5]->data);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    }
----------

Написать в TextureImage[4]=LoadBMP("picture/5.bmp")) указать на типа массив из букв
"picture/5.bmp" Уйдет еще пару сотен\тысяч строк ненужного кода.

Обилие однотипных участков кода в котором достаточно поменять всего пару параметров.
90% программы ненужный Ctrl+C Ctrl+V с изменением пары параметров которые правильней прописать в неком массиве.
----------
А это вообще жесть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// дамка ходит на много клеток
                 
    if(sh[rand_hod]==3) {
        if(sh[rand_hod+55]==0 & sh[rand_hod+44]==0 & sh[rand_hod+33]==0 & sh[rand_hod+22]==0 & sh[rand_hod+11]==0 & sh[rand_hod+66]!=4 & sh[rand_hod+66]!=2) {
            if(PustayaKletka(rand_hod+55)==FALSE) { sh[rand_hod+55]=3; sh[rand_hod]=0; }
        } else  if(sh[rand_hod+44]==0 & sh[rand_hod+33]==0 & sh[rand_hod+22]==0 & sh[rand_hod+11]==0 & sh[rand_hod+55]!=4 & sh[rand_hod+55]!=2) {
            if(PustayaKletka(rand_hod+44)==FALSE) { sh[rand_hod+44]=3; sh[rand_hod]=0; }
        } else  if(sh[rand_hod+33]==0 & sh[rand_hod+22]==0 & sh[rand_hod+11]==0 & sh[rand_hod+44]!=4 & sh[rand_hod+44]!=2) {
            if(PustayaKletka(rand_hod+33)==FALSE) { sh[rand_hod+33]=3; sh[rand_hod]=0; }
        } else  if(sh[rand_hod+22]==0 & sh[rand_hod+11]==0 & sh[rand_hod+33]!=4 & sh[rand_hod+33]!=2) {
            if(PustayaKletka(rand_hod+22)==FALSE) { sh[rand_hod+22]=3; sh[rand_hod]=0; }
        } else  if(sh[rand_hod+11]==0 & sh[rand_hod+22]!=4 & sh[rand_hod+22]!=2) {
            if(PustayaKletka(rand_hod+11)==FALSE) { sh[rand_hod+11]=3; sh[rand_hod]=0; }
        }  if(sh[rand_hod]!=3) { hod=3; proverka=0; } }
 
 
 // дамка нижняя ходит вниз на +9 клеток
 
    if(sh[rand_hod]==3) {
        if(sh[rand_hod+65]==0 & sh[rand_hod+52]==0 & sh[rand_hod+39]==0 & sh[rand_hod+26]==0 & sh[rand_hod+13]==0 & sh[rand_hod+78]!=4 & sh[rand_hod+78]!=2) {
            if(PustayaKletka(rand_hod+65)==FALSE) { sh[rand_hod+65]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod+52]==0 & sh[rand_hod+39]==0 & sh[rand_hod+26]==0 & sh[rand_hod+13]==0 & sh[rand_hod+65]!=4 & sh[rand_hod+65]!=2) {
            if(PustayaKletka(rand_hod+52)==FALSE) { sh[rand_hod+52]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod+39]==0 & sh[rand_hod+26]==0 & sh[rand_hod+13]==0 & sh[rand_hod+52]!=4 & sh[rand_hod+52]!=2) {
            if(PustayaKletka(rand_hod+39)==FALSE) { sh[rand_hod+39]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod+26]==0 & sh[rand_hod+13]==0 & sh[rand_hod+39]!=4 & sh[rand_hod+39]!=2) {
            if(PustayaKletka(rand_hod+26)==FALSE) { sh[rand_hod+26]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod+13]==0 & sh[rand_hod+26]!=4 & sh[rand_hod+26]!=2) {
            if(PustayaKletka(rand_hod+13)==FALSE) { sh[rand_hod+13]=3; sh[rand_hod]=0; }
        } if(sh[rand_hod]!=3) { hod=3; proverka=0; } }
 
 
 // дамка нижняя ходит наверх на -7 клеток
if(sh[rand_hod]==3) {
        if(sh[rand_hod-55]==0 & sh[rand_hod-44]==0 & sh[rand_hod-33]==0 & sh[rand_hod-22]==0 & sh[rand_hod-11]==0 & sh[rand_hod-66]!=4 & sh[rand_hod-66]!=2) {
            if(PustayaKletka(rand_hod-55)==FALSE) { sh[rand_hod-55]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod-44]==0 & sh[rand_hod-33]==0 & sh[rand_hod-22]==0 & sh[rand_hod-11]==0 & sh[rand_hod-55]!=4 & sh[rand_hod-55]!=2) {
            if(PustayaKletka(rand_hod-44)==FALSE) { sh[rand_hod-44]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod-33]==0 & sh[rand_hod-22]==0 & sh[rand_hod-11]==0 & sh[rand_hod-44]!=4 & sh[rand_hod-44]!=2) {
            if(PustayaKletka(rand_hod-33)==FALSE) { sh[rand_hod-33]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod-22]==0 & sh[rand_hod-11]==0 & sh[rand_hod-33]!=4 & sh[rand_hod-33]!=2) {
            if(PustayaKletka(rand_hod-22)==FALSE) { sh[rand_hod-22]=3; sh[rand_hod]=0; }
        } else if(sh[rand_hod-11]==0 & sh[rand_hod-22]!=4 & sh[rand_hod-22]!=2) {
            if(PustayaKletka(rand_hod-11)==FALSE) { sh[rand_hod-11]=3; sh[rand_hod]=0; }
        } if(sh[rand_hod]!=3) { hod=3; proverka=0; } }
----------
И тут вроде ошибка где 61?:
C++
1
2
3
4
5
6
7
if(sh[53]!=0) { kosyak_est=kosyak_est+1;  }
if(sh[55]!=0) { kosyak_est=kosyak_est+1;  }
if(sh[57]!=0) { kosyak_est=kosyak_est+1;  }
if(sh[59]!=0) { kosyak_est=kosyak_est+1;  }
if(sh[62]!=0) { kosyak_est=kosyak_est+1;  }
if(sh[64]!=0) { kosyak_est=kosyak_est+1;  }
if(sh[66]!=0) { kosyak_est=kosyak_est+1;  }
Никогда не встречал столько if в работающем коде =)).Этоже очевидно неправильный алгоритмический подход к построению программы и неоднократный.
C++
1
2
3
4
5
6
7
8
9
10
if(sh[1]!=0) { kosyak_est=kosyak_est+1;  }
…..
if(sh[144]!=0) { kosyak_est=kosyak_est+1;  }
//}
if(kosyak_est>0) { //показываем надпись про пустую клетку,если есть косяк
 
Вместо 300 строк типа:
sh[2]=2; shashka_cel[2]=0;
….
sh[95]=0; shashka_cel[96]=0;
Можно применить такую штуку как цикл for, но я нуб, и скорей всего есть более продвинутая команда записи нулей в массив.


C++
1
2
3
4
5
6
7
8
9
10
11
//dwExStyle=WS_EX_APPWINDOW;                                // Window Extended Style
        //dwStyle=WS_POPUP;                                     // Windows Style
        //ShowCursor(FALSE);
        dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;           // Window Extended Style
        dwStyle=WS_OVERLAPPEDWINDOW;                                        // Hide Mouse Pointer
    }
    else
    {
        dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;           // Window Extended Style
        dwStyle=WS_OVERLAPPEDWINDOW;                            // Windows Style
    }
Это помесь чегото и GLUT? Но зачем? 0_0.

Обилие вырвиглазного кода с кучей повторов ненужных, мне кажеться любой программист просто застрелиться при попытке понять его, а опытный вообще сопьется с горя =)).
Кстати у меня не показывает текстуры и процессор всегда загружен на 100% в игре и в просмоторщике моделей, такое чувство что OpenGL тут вообще не используется хотя указан глут.

Мне кажется это очень яркий пример того как ненужно программировать никогда.

Добавлено через 3 минуты
И вы делаете 4 пункт вместо 3, хотя я думаю тут еще пункт 2.И редизайн нужно оставить на самую последнюю часть как финал.
1)сделать чтобы работало
2)работало правильно
3)работало быстро
4) было красиво =).
0
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
15.12.2015, 23:59  [ТС] 18
я это все знаю,уже 650 раз думал,как сделать удобнее,и сократить рисование клетки,и поменьше if

щас версия в 4 раза лучше,чем была на визуал бейсике в 2007 году
там ваще был неопытный,и прописывал каждую клетку,вот там реально ужс,часа под 4 редактировал чисто цифры

тут удобнее сделано,алгоритм 64 клеток применил на 144 клетки - в редакторе Visual studio выбрал пункт edit-find and replace и заменил цифры 24 параметра

но всего было заменено около 600 цифр ,спас редактор...

остается доску нарисовать как нибудь через for ,созрею - догадаюсь как

в программе нет циклов ,for - это смерть программы

сначала написания игры,сделал 4 цикла на ход - и зависло...

я знаю с прошлых лет,что циклы - это смерть программы,и оператор swich - while использовать не буду

программа будет долбиться на одном месте пока while не сработает

в проге идет ручной таймер - i=i+1;

и каждый раз аналиирует цифру-подставляя под неё клетку в фокусе

так что ниче не зависает,

у меня опыт лет 12,если понаставить циклов и for и while - все будет висеть с первой секунды

я еще в 1993 году на zx spectrum программировал,писал писал код - маленькая ошибка с циклом- и виисиит...и не сохранилось...и опять потом пишешь....

надо в будущем тоже применить операцию "пустая клетка" - но применять по другому...я насовал её в каждую строчку... просто уже мозги варились от 2 месячного кодинга...хотел уже закончить и чтобы заработало

в программе не пункт 2 -а пункт 9 выполнен ...

сделал последнюю стадию - налаживание цвета,

да я вижу,какая абра кадабра на сайтах у мужиков - особенно гамедев заполнен дерьмом, это и есть образец как не надо писать

я писал - если у программиста на рабочем столе порядок - и все папки отсортированы - мусор удален,в файлах порядок - то и код будет аккуратным ...

я не буду лепить разное дерьмо в разные участки кода,чтобы потом через 2 года голову ломать,че это такое

я пишу так,чтобы потом самому понять,че и где находится

ТВОЯ МЫСЛЬ ЗАКЛЮЧАЛАСЬ В ПОВТОРЕНИИ УСЛОВИЙ С РАЗНЫМИ ЦИФРАМИ - я ответил - думал об этом 650 раз

программа работает всю ночь - утром просыпаюсь - комп играет,прога не висит...и графика тоже крутится через 12 часов работы

если у компа включится режим ожидания-программу выкинет ...это в порядке вещей
0
Миниатюры
Программа с текстурами и 3DS обьектами   Программа с текстурами и 3DS обьектами  
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
16.12.2015, 00:41  [ТС] 19
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Кстати у меня не показывает текстуры и процессор всегда загружен на 100% в игре и в просмоторщике моделей, такое чувство что OpenGL тут вообще не используется хотя указан глут.
это значит ты не женат,не игроман,и нету детей,которые бы играли в игры ))

ну и не нужно делать выводы ,если прогу не включал ,и если комп играми не используется

))
0
1080 / 692 / 114
Регистрация: 12.10.2013
Сообщений: 4,587
16.12.2015, 00:55 20
Цитата Сообщение от Intronessia Посмотреть сообщение
в программе нет циклов ,for - это смерть программы
Цитата Сообщение от Intronessia Посмотреть сообщение
я знаю с прошлых лет,что циклы - это смерть программы,и оператор swich - while использовать не буду
Цитата Сообщение от Intronessia Посмотреть сообщение
у меня опыт лет 12,если понаставить циклов и for и while - все будет висеть с первой секунды
Программа с текстурами и 3DS обьектами
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2015, 00:55

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Выдвинуть меню с обьектами
Случайно выдвинул на маленькое расстояние и теперь когда навожу на границу не предлогает изменить...

Заполнить вектор обьектами
Проблема с решением, вот задание: Создать вектор и заполнить его не менее, чем двадцатью объектами...

Заполнения массива обьектами
Есть класс Rectangle. В нем я реализовал три конструктора(с двумя параметрами, с одним, и без...

работа с Disposable обьектами
using(StreamReader sr = new StreamReader(FILE_NAME)) using(StreamWriter sw = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.