Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 Polski Portal COLOBOTa - COLOBOT Polish Portal
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Pierwszy krok zrobiony - co dalej?
Autor Wiadomość
piotrdz 


Twoja ulubiona misja: programowanie ;)
Pomógł: 1 raz
Dołączył: 17 Mar 2012
Posty: 55
Skąd: Częstochowa
Wysłany: 15-04-2012, 01:38   Pierwszy krok zrobiony - co dalej?

A więc ogłaszam wszem i wobec - mamy projekt w CMake, który kompiluje się pod MinGW :)

Istnieją teraz dwie gałęzie w repozytorium:
- główna (master)
- rozwojowa mingw_dev, gdzie oprócz plików z głównej są też pliki CMake i instrukcja jak skompilować projekt pod MinGW

Również sprawdziliśmy, że projekt kompiluje się pod VisualStudio 2008 i 2010.

Niestety, jest problem z grafiką. Objawia się to tak, że:
- pod MSVC6 wszystko działa poprawnie
- pod każdym innym kompilatorem, nie działa.
Prawdopodobnie jest zepsute ładowanie tekstur efektów, tylko trudno to zdebugować.

Poza tym odkryliśmy problem z colobot.ini - przed uruchomieniem programu czasem trzeba usunąć stary plik (z "zepsutej" wersji programu).

Ale wyłączając te błędy, nad którymi będziemy też pracować, mamy wreszcie bazę, od której możemy pracować dalej. Proponuję, aby teraz przyjąć następujący plan działania:

1. Dokonać sensownego podziału kodu na:
- CBot (już wydzielony),
- główną aplikację,
- silnik grafiki,
- silnik fizyczny,
- typowe klasy modeli, czyli roboty itp.
- jeszcze parę innych pewnie się znajdzie

2. Pozbyć się zależności do typów D3DVECTOR, D3DMATRIX wszędzie poza silnikiem graficznym - trzeba po prostu napisać własne struktury i funkcje matematyczne (zebrać je z d3dmath i math3d).

3. Jak to skończone - popatrzeć na interfejs silnika grafiki i sklonować to samo, tyle że w OpenGL.

4. Tak samo zrobić z modułem samej aplikacji - funkcje WindowsAPI zastąpić SDL.

No i na koniec powinniśmy mieć przeportowaną grę. Tyle, że łatwo powiedzieć, trudniej wykonać. Czas pokaże, jak to wyjdzie.

Edit: oczywiście "my" to ja i Programerus.
Ostatnio zmieniony przez piotrdz 15-04-2012, 18:20, w całości zmieniany 1 raz  
 
 
     
PoxiPol 
Chicken


Wiek: 23
Dołączył: 04 Mar 2012
Posty: 146
Skąd: UK
Wysłany: 15-04-2012, 16:13   

Twoje dzialania sa blogoslawienstwem, porownujac twoj entuzjazm, do wiekszosci reszty. No ale zeby nie bylo ze na kogos zle mowie, rozumiem ze teraz jest szkola, i sa problemy i matura itd : P Na pelny ruch czekam do wakacji.
Na Github z tym!
 
 
     
Programerus 
Jestem Bogiem


Pomógł: 2 razy
Wiek: 22
Dołączył: 28 Mar 2009
Posty: 188
Skąd: Kołobrzeg
Wysłany: 15-04-2012, 17:48   

@PoxiPol: A ja to co? Nie zauważyłeś, że cały post jest pisany w formie "my"? ;)
_________________
"Tylko bogaci mogą mówić mi, że pieniądz nie daje szczęścia"
 
 
     
piotrdz 


Twoja ulubiona misja: programowanie ;)
Pomógł: 1 raz
Dołączył: 17 Mar 2012
Posty: 55
Skąd: Częstochowa
Wysłany: 15-04-2012, 18:20   

No właśnie, zapomniałem dopisać Programerusa.

No cóż, do tej pory miałem trochę czasu, ale niestety w maju będę miał mniej. Być może rzeczywiście dopiero od czerwca zacznie się dziać więcej.

Edit:

Ha! Pomoc Programerusa, przebłysk geniuszu i zakomentowanie 4 linii w kodzie i efekt... grafika działa! Pod MinGW i VisualStudio 2010!

Dowód: http://i.imgur.com/awmuZ.jpg

Edit2:

Teraz trochę odwróciła się sytuacja - w głównej gałęzi mamy projekt już w CMake. Jak ktoś chce skompilować z MSVC6 albo Visualem, to niech sobie przywróci pliki projektu z poprzednich commitów. Docelowo CMake zostaje - (w przyszłości) można nawet wykorzystać jego różne generatory i kompilować z kompilatorem Visuala.
 
 
     
PoxiPol 
Chicken


Wiek: 23
Dołączył: 04 Mar 2012
Posty: 146
Skąd: UK
Wysłany: 17-04-2012, 11:32   

Ty wygrales uzytkownik miesiacaa, wiec no : P
 
 
     
lukas_j 
Geek
127.0.0.1<-hack


Twoja ulubiona misja: nie wiem, lubie wiekszosc :)
Pomógł: 1 raz
Dołączył: 07 Cze 2008
Posty: 187
Skąd: localhost
Wysłany: 20-04-2012, 20:46   

Gratuluje solidnej roboty! :) Zaraz pobieram i coś testuje. Nareszcie coś ruszyło, to może w końcu zaczne coś robić przy tym projekcie :)
_________________
Jestem zwolennikiem wolnego oprogramowania!
 
 
     
piotrdz 


Twoja ulubiona misja: programowanie ;)
Pomógł: 1 raz
Dołączył: 17 Mar 2012
Posty: 55
Skąd: Częstochowa
Wysłany: 29-04-2012, 12:28   

Przez długi weekend coś spróbuję ruszyć. Założyłem nową gałąź dev - z podziałem kodu na moduły i próbuję przepisać funkcje i struktury matematyczne (na razie jest tam bałagan, więc nie sugerujcie się tym).

Update: struktury Vector i Matrix w zasadzie gotowe. Pozostaje jeszcze zaimplementować pozostałe funkcje i przetestować dokładnie.

Update 2:
Niestety, mój czas wolny się skończył - dodałem opis, co zrobiłem i co jest jeszcze do zrobienia w pliku README-DEV.txt. Zbliżają się zaliczenia i sesja, więc chyba dopiero w czerwcu będę miał czas zająć się tym dalej :-|
 
 
     
krzys_h 


Twoja ulubiona misja: Wszystkie :)
Pomógł: 3 razy
Wiek: 20
Dołączył: 12 Gru 2010
Posty: 255
Skąd: Łódź
Wysłany: 10-05-2012, 13:38   

Szkoda, że nie znam DirectX ani OpenGL, nie mogę pomóc w portowaniu :( Ale zajmę się innymi usprawnieniami
_________________
Gość, cieszysz się, że skontaktowaliśmy się z EPSITEC?
 
 
     
piotrdz
Gość


Wysłany: 05-06-2012, 20:14   

OK. No to prawie ustaliliśmy spotkanie na IRC, ale nie zaszkodzi napisać jeszcze kilka szczegółów technicznych tutaj, czyli o czym chcę porozmawiać.

Jak widać, moja praca dotychczas skupiła się na module z funkcjami i strukturami matematycznymi (Matrix, Vector, Point). Praca jest w ok. 70% skończona. Tutaj mogę kogoś "zatrudnić" do pomocy przy testach.

Dalej, dokumentacja kodu kuleje i to bardzo. Nie ukrywam, że bardzo potrzebne jest ogólne rozeznanie. Nie chodzi tu tylko o grafikę, bo tym tak czy siak będziemy się zajmować, ale też o klasy robotów itp. Chodzi o to, żeby mieć taki "plan" kodu - wiedzieć po prostu co za co odpowiada. Ważny jest też podział projektu na podmoduły. Ten podział, który wykonałem jest na razie wstępny.

Dalej tak - sam silnik graficzny to zbiór funkcji w modułach, które zebrałem osobno w graphics/d3d. Niestety w innych miejscach znajdują się moduły, które częściowo korzystają z D3D i niestety trudno będzie rozdzielić do końca różne funkcjonalności. Idealnie, interfejs silnik graficzny <-> reszta gry powinien być jak najwęższy, żeby się nie natrudzić z pisaniem i portowaniem wszystkiego. I ten interfejs trzeba będzie ustalić i ściśle rozdzielić na odpowiednie klasy. I tutaj przydałby się ktoś z doświadczeniem w D3D, bo bardzo trudno będzie wszystko ogarnąć.

I teraz co do samego sedna problemu portowania. Możemy przyjąć dwie strategie:
- zachować cały kod windowsowy i D3D w niezmienionej formie i tylko dopisać nasze nowe moduły, a z czasem po prostu wyeliminować stary kod,
- wywalić/zakomentować kod windowsowy i D3D i wszystko spróbować przepisać od nowa.

Obie stategie mają swoje zalety i wady. Moim zdaniem łatwiejsza będzie opcja nr 2, bo od razu uzyskamy coś - jeszcze nie całą grę, ale już coś - co będzie działało pod Linuksem. Potem będziemy mieli, że tak powiem, większą zachętę do pracy. No ale sporo w sumie będzie zależało od złożoności kodu.

To zostawiam wam to do przemyślenia. Dyskusję oczywiście będziemy kontynuowali na IRC.
 
     
piotrdz 


Twoja ulubiona misja: programowanie ;)
Pomógł: 1 raz
Dołączył: 17 Mar 2012
Posty: 55
Skąd: Częstochowa
Wysłany: 05-06-2012, 20:16   

Ech, głupie forum mnie wylogowało, ale post jest jak widać.
 
 
     
patrolez 
PWr


Pomógł: 2 razy
Wiek: 25
Dołączył: 11 Kwi 2012
Posty: 17
Skąd: Wrocław
Wysłany: 08-06-2012, 00:27   

Myślałeś już o zrobieniu wizualizacji w postaci wygenerowanego diagramu UML? Myślę, że od tego by warto zacząć z dokumentacją. Z takim diagramem wszystko widać.
http://www.youtube.com/watch?v=efd0wEYkUk0

[ Dodano: 08-06-2012, 15:02 ]
W sensie dziedziczenie, polimorfizm, agregację, metody, pola i ich rodzaje etc. etc.
_________________
Wszystko jest obiektem.
 
     
piotrdz 


Twoja ulubiona misja: programowanie ;)
Pomógł: 1 raz
Dołączył: 17 Mar 2012
Posty: 55
Skąd: Częstochowa
Wysłany: 08-06-2012, 16:20   

Doxygen już nam generuje dokumentację klas z takimi diagramami. Ale to nie pomaga za wiele, bo kod prawie nie wykorzystuje dziedziczenia -- są bodajże tylko trzy drzewa dziedziczenia w stylu klasy CAuto* dziedziczą po CAuto. Łatwo się w tym połapać i właściwie już wiemy mniej więcej co gdzie jest.

Za to ważniejsze teraz jest udokumentowanie poszczególnych zależności i tego, jak współpracują różne klasy. Np. jak przekazywane i obsługiwane są zdarzenia np. z klawiatury, jak działają poszczególne obiekty budynków itp.

PS. Widzę kolega też z PWr :)

[ Dodano: 19-06-2012, 20:50 ]
Po ostatnich zmaganiach z kodem, miałem okazję trochę więcej przejrzeć i zrozumieć strukturę silnika grafiki. I teraz widzę, że w sumie problemów będzie mniej niż się spodziewałem. W kodzie jest co prawda kilka przypadków specyficznego wykorzystania D3D, których nie da się tak łatwo przenieść na OpenGL, ale z drugiej strony np. kod ustawiający transformacje widoku, projekcji itp. jest w słownie dwóch, trzech miejscach. Co więcej, większość właściwego rysowania obiektów to po prostu wywoływanie DrawPrimitive() z tablicą D3DVERTEX albo D3DVERTEX2, czyli coś, co da się prosto przenieść do OpenGL. Zatem podstawową funkcjonalność można uzyskać w zasadzie niewielkim kosztem.

Za to widzę już, że aby ruszyć z dalszymi modyfikacjami np. nowymi robotami itp., trzeba będzie sporo kodu przepisać zupełnie od nowa. Np. w każdym miejscu, gdzie sprawdzany jest warunek np. czy jakiś robot/budynek jest blisko, jest przeglądana lista wszystkich istniejących obiektów. I jest to porówywane na zasadzie if (object->RetType() == ...). Czyli każdy nowy rodzaj obiektu musi być we wszystkich takich porównaniach uwzględniony. Jednym słowem: brakuje *klas* obiektów.

Ale wracając do grafiki, mam już mniej więcej plan jak zrobić to przejście do OpenGL. Trzeba zacząć od napisania uniwersalnych struktur: Color, Light, Vertex, rozszerzony Vertex (D3DVERTEX2). Dalej trzeba przenieść cały wykonujący właściwe funkcje D3D do d3dengine.cpp - chodzi tu głównie o moduły z graphics/common. I po tym można już napisać analogiczną implementację CD3DEngine w OpenGL. Równolegle trzeba będzie popracować nad d3dapp.cpp i przeniesieniem kodu WinAPI na SDL.

Myślę, że całość jest do zrobienia przez wakacje, trzeba się tylko zorganizować.
 
 
     
Wyświetl posty z ostatnich:   
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012