Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - Kyroaku

Strony: [1] 2 3 4 5 ... 15
1
C++ / Odp: Error: Attempting to reference a deleted function
« dnia: Marzec 28, 2018, 00:02:28 »
Ok, generalnie taki błąd wywala przy zapisie:
map1 = map2;
Gdzie map1 i map2 to są mapy z elementami o typie, w którym faktycznie nie ma konstruktora kopiującego (np jest usunięty przez "=delete"). Piszę to, ponieważ w przypadkach kiedy jawnie napiszemy:
map1[0] = new MapElement(map2[0]);
To kompilator zaprowadzi nas bezpośrednio do miejsca błędu, a w moim przypadku dostajemy linię z deklaracją mapy.

U mnie jednak problem polegał na tym, że w ścieżkach miałem ustawiony folder "include" Visual Studio 2013, a używałem Visual Studio 2015. Nie wnikam, co tam się dokładnie stało, bo wcale mnie nie dziwi, że przy takim bajzlu coś nie działa.

swoją drogą to nie powinno być tam pointera zamiast klasy?
std::map<int, AnimationKey*>animations;

Dlaczego "powinno"? Powiedziałbym, że nawet gdyby klasa była bardziej rozbudowana, to to zależy od przeznaczenia tej mapy. Jeśli jestem świadom tego, że użycie mapy może się wiązać ze znaczącym czasem przemielenia tego, to chyba nie ma problemu? Czy może chodzi o coś innego?

2
C++ / Odp: Error: Attempting to reference a deleted function
« dnia: Marzec 25, 2018, 23:59:06 »
Probowałem. Przypisania przenoszenia też :/

3
C++ / Error: Attempting to reference a deleted function
« dnia: Marzec 25, 2018, 21:52:20 »
Cześć wszystkim ;)

Mam problem o tyle trudny dla mnie do wykrycia, że nie pojawił się on po dodaniu fragmentu kodu, a po przesiadce z VS2013 na VS2015. Dostaję takie oto errory:

Error C2280 'std::pair<const _Kty,_Ty>::pair(const std::pair<const _Kty,_Ty> &)': attempting to reference a deleted function

W output'cie, oprócz wielu odniesień do plików z STL'a, jedno dotyczy mojego pliku:
1>  [...]: note: see reference to class template instantiation 'std::map<int,AnimationKey,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' being compiled
1>          with
1>          [
1>              _Kty=int,
1>              _Ty=AnimationKey
1>          ]

I wskazuje linię:
std::map<int, AnimationKey>animations;

Klasa AnimationKey:
class AnimationKey
{
public:
unsigned int startFrame, endFrame;

AnimationKey();
AnimationKey(unsigned int start, unsigned int end);
void set(unsigned int start, unsigned int end);
};

W nowszym standardzie C++, kiedy pojawiały się operatory przeniesienia wprowadzono, że zadeklarowanie jakiegokolwiek konstruktora, lub operatora przypisania automatycznie ustawia pozostałe konstruktory i operatory przypisania na "delete". Myślałem, że chodzi o to, próbowałem desperacko zadeklarować każdy z konstruktorów, ale nic to nie pomogło :P Nie potrafię nawet tego błędu wywołać tak "na sucho" w nowym projekcie. Możliwe, że to przez update plików z VS2013 do VS2015?

Od dłuższego czasu nie kodziłem w C++ i mam spore braki, jeśli chodzi o nowsze standardy. Będę wdzięczny za każdą wskazówkę.

4
Programowanie grafiki / Odp: OpenGL vs DirectX
« dnia: Styczeń 12, 2018, 23:42:50 »
Cytuj
Za Vulkanem przemawia to, że będę zaczynał od początku nie znając ani OpennGL ani DirectX, a grafika jest po prostu niesamowita.
A ja się wciąz zastanawiałem co ma piernik do wiatraka i na cholere komu uczyć się Vulkana, chcąc zrobić grę w Unreal Engine.

5
Szkółka / Odp: [C++] Export danych mesha 3d do tablicy
« dnia: Styczeń 02, 2018, 00:48:43 »
Wydawało mi się, że w takich demkach chodzi o to, że scene się generuje i animuje programowo. Takie "includowanie scen" brzmi jak oszukiwanie.

6
Szkółka / Odp: [C++] Export danych mesha 3d do tablicy
« dnia: Styczeń 01, 2018, 18:05:02 »
Chcesz z edytora grafiki 3D wyeksportowac plik źródłowy, zawierający tablicę w C++? Po co?.

Jeśli jednak chodzi Ci o ładowanie modeli 3D z pliku, to mam 4 propozycje:
  • .obj - format tekstowy. Bardzo przyjemny do implementacji własnego parsera, bo można po prostu podejrzeć dane chociażby w notatniku. Upośledzony jednak, jeśli chodzi o późniejsze zastosowanie - dużo zajmuje, wolno się ładuje i jeśli dobrze pamiętam, to raczej nie zapisuje się w tym wielu informacji o scenie.
  • Assimp - biblioteka do ładowania modeli z przeróżnych formatów (osobiście używam .dae - Autodesk Collada). Tym już załadujesz prawie wszystko :P Od wierzchołków, normalnych, tangesów, po animacje szkieletowe, światła, kamery.
  • Własny format plików - można napisać plugin do np 3DS Max'a, który wygeneruje Ci plik z tym, czego potrzebujesz w takiej formie, jakiej chcesz. Na upartego nawet plik .h z tablicą wierzchołków i texcoordów. Zdecydowanie będzie to najlepsza opcja, ale wymaga trochę więcej pracy.
  • .3ds - binarny format od 3DS Max'a. Jeśli .obj Cię nie przekonuje, a nie chcesz korzystać z gotowych rozwiązań, jak Assimp, to mogę polecić .3ds. Napisałem kiedyś tego loader i w sumie to była fajna zabawa ;) Taka trochę łamigłówka.

7
Projekty rozpoczęte / Odp: Szukam programisty do tworzenia gry.
« dnia: Lipiec 24, 2017, 18:01:50 »
Cytuj
reszta programowania powinna być prosta.
Lubie, kiedy grafik mówi mi, co będzie proste do zaprogramowania ^.^

8
SDL / Odp: SDL2 Obliczenie proporcji tekstury do rozdzielczości okna
« dnia: Lipiec 12, 2017, 18:12:24 »
Jeśli chodzi o problem, jak na obrazkach, które wysłałeś, to tak na szybko patrząc, to:
if (x == -1) // -1 oznacza że chcę by x bądź y znajdował się na środku ekranu
        x = intrfc->clientArea.w / 2 - p_range.w / 2;
if (y == -1)
        y = intrfc->clientArea.h / 2 - p_range.h / 2;
intrfc->clientArea.w i intrfc->clientArea.h, to rozmiar ekranu w pikselach, tak? Natomiast p_range.w i p_range.h, to rozmiar obiektu w pikselach, ale dla natywnej rozdzielczości, tak? Jeśli tak, to rozmiar obiektu musisz oczywiście wyskalować i będzie w porządku.

Cytuj
Obie metody poprawnie skalują, jednak większy potencjał zauważyłem w skalowaniu tekstur po przez obliczanie ich nowych x,y,w,h, a to dlatego iż wykrywanie eventów jest na podstawie tych właśnie współrzędnych.
Według mnie łatwiej by było zrobić jednak SDL_RenderSetScale() i programować dla natywnej rozdzielczości, a kiedy potrzebujesz przejść z przestrzeni natywnego ekranu do przestrzeni realnego ekranu, lub odwrotnie, to wystarczy użyć SDL_RenderGetScale() i wymnożyć wartości przez scaleX, scaleY, lub 1/scaleX, 1/scaleY.

Przykładowo współrzędne myszki musiałbyś przenieść z przestrzeni ekranu realnego do natywnego, co by wyglądało jakoś tak:
float scaleX, scaleY;
SDL_RenderGetScale(renderer, &scaleX, &scaleY);
int newMouseX = mouseX / scaleX;
int newMouseY = mouseY / scaleY;

Zawsze, zanim coś na piszesz, to zastanów się, czy to, co chcesz zrobić nie zablokuje Cię w przyszłości i staraj się myśleć jak najbardziej w przód. O ile na początku wszystko idzie gładko, to przy źle zaprojektowanym kodzie im dalej zajdziesz, tym bardziej będziesz musiał kombinować, albo przerabiać podstawy. Bez doświadczenia oczywiście skutek projektowania kodu będzie mierny, ale IMHO warto sobie wyrobić taki nawyt i trenować ;)

Życzę wytrwałości :D

9
SDL / Odp: SDL2 Obliczenie proporcji spritów do rozdzielczości okna
« dnia: Lipiec 11, 2017, 18:14:23 »
Twój kod byłby tu najbardziej wskazany.

Myślę, że próbówałeś zrobić to dobrze, ale gdzieś się walnąłeś.
SDL wymnaża koordynaty przez wartości ustawione w SDL_RenderSetScale(), więc jeśli programujesz pod rozdzielczość 1920x1080, a rozdzielczość okna to 800x600, to musisz koordynaty "zmniejszać" tak, aby wartość na osi x równa 1920 była równa 800 pikseli, a wartość na osi y równa 1080 była równa 600 pikseli.

Robisz więc SDL_RenderSetScale(renderer, 800/1920.0f, 600/1080f) i kodzisz tak, jakbyś miał ustawioną rozdzielczość 1920x1080.

Tyle wywnioskowałem z dokumentacji. Funkcji nigdy nie używałem, ale mam nadzieje, że pomoglem :)

10
Oferuję / Odp: Programista Python/Django / chętny na staż w Unity3D
« dnia: Lipiec 06, 2017, 20:22:41 »
Cytuj
A skoro mówicie tak o tym wysyłaniu CV i płacy minimalnej... naprawdę znacie jakąś firmę, w której zatrudnią na stanowisko programisty Unity3d osobę, która nie zna Unity3d i na co dzień nie pisze w C# ?
Tak. Elementarna wiedza, którą zdobywa się po przeczytaniu/obejrzeniu jednego tutorialu to dla mnie wciąż "nie zna się na Unity"xd

EDIT: W sumie to źle przeczytałem. Nie znam firmy, które takie osoby zatrudnią. Znam firmy, które takie osoby zatrudniły.

11
Oferuję / Odp: Programista Python/Django / chętny na staż w Unity3D
« dnia: Lipiec 05, 2017, 21:03:49 »
Cytuj
Porozsyłaj CV. Da się dostać na staż, czy praktyki bez żadnego doświadczenia, czy umiejętności.
Czy też wypłaty...
Dają minimalną, więc w sumie masz rację :P

Zawsze warto wysyłać CV. Okazuje się, że nawet, jeśli ktoś szuka eksperta, to może znaleźć Ciebie :P

12
Oferuję / Odp: Programista Python/Django / chętny na staż w Unity3D
« dnia: Lipiec 03, 2017, 21:12:16 »
Porozsyłaj CV. Da się dostać na staż, czy praktyki bez żadnego doświadczenia, czy umiejętności.

13
Szkółka / Odp: [OpenGL] Animacja 3d
« dnia: Czerwiec 29, 2017, 11:18:23 »
Jeśli chciałbyś coś niższego poziomu, niż Irrlicht, to Assimp jest bardzo przyjazny. Oczywiście w tym wypadku rendering jest na Twojej głowie, ale przecież to sama frajda :)

14
Szkółka / Odp: [C++] Nazewnictwo zmiennych
« dnia: Czerwiec 15, 2017, 19:30:46 »
Notacja węgierska według mnie to okropieństwo. Chociaż swego czasu uważałem ją za bardzo praktyczną (bardzo krótki okres mojego życia :D).

Ja przez cały czas próbowałem różnych styli pisania i od niedawna wydaje mi się, że się ustaliłem:
enum EColor {
eColorRed,
eColorGreen
};
Dodaję "Color" przy każdym polu ze względu na to, że to są jednak nazwy globalne (tak, wiem, że istnieje enum class) i staram się zachować ich unikalność. Troche dłuższa nazwa mi w tym wypadku nie przeszkadza.
class MyClass
{
MyClass(float firstParameter, int secondParameter);
float mMyFloat;
int mMyInt;
float GetFloat();
void SetFloat(float floatParameter);
};
Do pól klasy dodaje przedrostek "m" (też to tłumacze, jako "member" :D). To pozwala mi mieć zarówno pola, jak i metody pisane z dużej litery, nie licząc tego przedrostka. Nie podoba mi się pisowniaCamelCase w takich miejscach i używam jej do parametrów, zmiennych tymczasowych, etc.

Makra, stałe i podobne standardowo piszę duzymi literami, lub KazdyCzlonZDuzejLitery, w przypadku niektorych makr, jak np:
#define CastToMyClass(a) ((MyClass)a)

15
Szkółka / Odp: poruszenie sprita z punktu A do B
« dnia: Grudzień 18, 2016, 02:39:36 »
Cytuj
Podejrzewam, że posiadasz pętlę czasu rzeczywistego, która ogranicza Ci jakoś prędkość programu do np. 60 klatek na sekundę?
Ta, bo jak ktoś zaczyna naukę, to pierwsze co robi, to zaczyna od pętli czasu rzeczywistego, liczenia fps'ów i ich ograniczania. Ludzie, trzymajcie mnie.

Cytuj
float obj_target_dist = delta.magnitude(); // Math.sqrt(delta.x * delta.x + delta.y * delta.y) ... obliczasz odległość obiektu od celu i przechowujesz tę wartość w obiekcie
   
    delta.normalize(); // float max = Math.max(delta.x, delta.y); delta.x /= max; delta.y /= max; ... normalizujesz wektor delta, będziesz wiedział ile razy na 1 jednostkę x musisz się przemieścić na osi y (albo na odwrót, zależy od tego czy delta.x jest większe, czy delta.y)

    float delta_dist = delta.magnitude(); // obliczasz jaką odległość pokonasz po jednym przesunięciu obiektu przez wektor delta (już znormalizowany)

    float translation = player.speed * Time.deltaTime; // mając prędkość obiektu obliczasz jaką odległość pokona w jednej klatce, Time.deltaTime dla 60 klatek = ~16ms

    float ratio = translation / delta_dist; // obliczasz ile razy zmieści musisz przesunąć obiekt o znormalizowany wektor aby przenieść o dystans jaki pokona w jednej klatce
    Vec2D velocity = ratio * delta; // ostateczny wektor prędkości obiektu
"Kto sam nie umie, ten uczy", czy jakoś tak.


Strony: [1] 2 3 4 5 ... 15