C# i XNA cz C++ i DirectX a moze OpenGL

0

Witam.
Od wielu miesiecy szukam informacji jakiej biblioteki graficznej powinienem uzyc. O ile ani C# ani C++ nie sprawia mi problemow o tyle Grafika 3D jest dla mnie nadal czarna magia ale to tylko dlatego ze nie moge sie zdecydowac ktora biblioteke wybrac. Czytalem wiele forum zarowno polskich jak i angielskich jednak taki mlyn robia z glowy ze w ogóle nie wiadomo czego czlowiek ma sie zlapac.

Spotkalem sie z roznymi stwierdzeniami i roznymi wywodami... Slyszalem ze XNA nie bedzie rozwijane ze DirectX nie bedzie rozwijane ze OpenGL nie bedzie rozwijane patrze na inne fora tutaj powstaje DirectX11 tam XNA3.0 OpenGL jakas nowsza wersja...

Czy ktos moze powiedziec jasno jaka biblioteke wybrac do profesjonalnej grafiki? Chce napisac gre online dla ok. 1000 klinetow. Na codzien zajmuje sie programowaniem jednak grafika jest mi nadal obca.

Nie interesuja mnie wywody na temat od czego latwiej zaczac lecz o to ktore jest bardziej profesjonalne ktore jest szybsze i ktore nie pojdzie do grobu w najblizszym czasie w miare postepu technologicznego.

Celem jest zastosowanie najlepszego rozwiazania i najbardziej efektownego, ktore bedzie moglo dzialac za kolejne 10 lat. Nie jest wazne dla mnie czy w XNA sie tworzy szybciej liczy sie efektowniej bo to nie jest rozwiazanie na 1 miesiac i czas mam. Czy w XNA uzyskam lepsze efekty niz w DX lub OpenGL ? ktore rozwizanie jest bardziej wydajne? Ktore jest przyszloscia? Tej odpowiedzi wiele osob szuka. Prosze mi nie sugerowac silnikow typu OGRE i innych bibliotek gdyz nie o tym mowa w temacie. I prosze nie odsylac linkami bo tak z linku na link mozna caly swiat okrazyc a odpowiedzi nie znalezc.
javascript:QuickEdit('id494203',1)
Dlugi ten post ale przez tyle czasu poszukiwan wreszcie zwatpilem i musialem napisac o co dokladnie mi chodzi. Proze nie odsylac mnie do google bo tam juz dobrze przekopalem informacje. Chce zrobic wszystko sam od podstaw i jesli pojdzie do piachu nie chce stracic czasu na uczenie sie czegos co okaze sie niepotrzebne. Dziekuje za pomoc.
PS. Przepraszam za brak stylistyki gdyz post pisze w pracy. Jesli nie zrozumiemy sie to odpsize w domu i postaram sie uscislic wszystko bo na pewno ludzie beda miec swoje wywody. Pozdrawiam.

0

Co bedzie za 10 lat i to w informatyce ... mysle, ze tego nawet tworcy wymienionych silnikow nie wiedza. To jest tez odpowiedzia, po prostu napisz do producentow jakie maja plany ...

Z pewnoscia mozna podejsc do sprawy tak:

  1. grafika 3d bedzie w ogolnosci bazowala na punktach, prostych, plaszczyznach.
  2. mozna utworzyc sobie wlasne obudowywujace klasy i w nich tworzyc specyficzne implementacje (cos na ksztalt fabryki obiektow, w zaleznosci od wybranej biblioteki).

to uczyni kod nieczulym na zmiane biblioteki a jak wszytskie projekty zostana zawieszone to wtedy mozna bedzie dodac nowa biblioteke o ktorej istnieniu nie wiemy na razie.

Rozwiazanie elstyczne, ale niestety, moze byc nie optymalne - np nie bedzie mozna stosowac niektorych uniklanych funkcji dla danych bibliotek (albo inaczej: dla tych co nie maja tego bedzie tzreb dopisac na bazie tego co maja wlasne odpowiedniki).

Wydaje sie, ze musisz postawic sobie pytanie co chcesz zrealizowac przez te 10 lat (co prawda dosc szalona wizja to bardzo duzo czas dla informatyki) i na tej podstawie dobrac optymalna dla siebie biblioteke.

0

Witam ponownie.
Glownie pytanie jest takie czy ktoras z wymienionych bibliotek przestala juz byc rozwijana? przede wszystkim nie chcialbym sie uczyc rozwiazan ktore ida w niepamiec i byc na bieŻąco z technologia. poza tym nie wiem o ile jest wolniejszy C# od C++. Serwer napisze na pewno w c++ bo jest szybsze a zarzadzanie w tym przypadku na niewiele sie zda. Natomiast klient mnie zdecydowanie frasuje. Niedawno myslalem o OpenGL ale kolega z ktorym pisze stwierdzil ze jest wolniejszy i nie warto sie uczyc ze XNA to przyszlosc a DX nie jest rozwijany. Zaczalem czytac no i z tym rozwojem to roznie wiedze. Na jednych forach czytalem artykuly ze XNA sie wypalilo ze nie ma takiej funkcjonalonosci jak DX slabsze efekty mozna uzyskac itp. Jedynym plusem jest to ze mozna w nim szybko pisac. Dlatego nie wiem ktora biblioteke uzyc. Czytalem rowniez ze DX nie bedzie supportowane na Vista z drugiej strony wszystko dziala. Mysle ze przeczytalem za duzo artykulow i zrobilo mi to calkowity metlik w glowie. Dlatego glownie chcialbym sie dowiedziec jaka jest naprawde polityka i czy wszystkie te biblioteki beda dalej supportowane czy ktores przestana byc naprawde rozwijane tak jak to pisza? I jeszcze jedno pytanie czy XNA posiada cala funkcjonalnosc DX?

0

Patrzac na strony producentow OpenGL i DirectX raczej sie rozwijajaja. Natomiast XNA dla windows bazuje na DX, jest wersja XNA MONO i ona bazuje na OpenGL. Tak wiec wybierajac XNA istnieje/bedzie istniec mozliwosc wyboru pomiedzy OpenGL a DirectX wrecz przez usera (zalezy na jakiej platformie .NET uruchomi to).

0

Chyba zaczynam rozumiec cos z tego. Wyglada na to ze nic nie jest przestazale i tak naprawde moge uzyc biblioteki OpenGL ktorej mi odradzano ze sie przestala rozwijac. Ale moze jeszcze jedno pytanie zadam czy jest roznica pod wzgledem funkcjonalnosci miedzy nimi? Bo widze ze praktycznie funkcje robia to samo lecz maja ewentualnie rozne nazwy tylko to tak na wstepie widze ale w najblizszym czasie przygladne sie im dokladnie. Chyba zdecyduje sie mimo wszystko na C++ i DirectX lub OpenGL nie ma sensu robic kodu zarzadzanego kosztem utraty szybkosci a na inne platformy zawsze klienta mozna przepisac. Dziekuje za dotychczasowe odpowiedzi.

0
reichel napisał(a)

Z pewnoscia mozna podejsc do sprawy tak:

  1. grafika 3d bedzie w ogolnosci bazowala na punktach, prostych, plaszczyznach.
  2. mozna utworzyc sobie wlasne obudowywujace klasy i w nich tworzyc specyficzne implementacje (cos na ksztalt fabryki obiektow, w zaleznosci od wybranej biblioteki).

no to byś się zdziwił bo prawdopodobnie za koło 5 lat karty graficzne zaczną generować obraz 3d głównie przez raytracing co do teraz nie było możliwe w czasie rzeczywistym więc tak stworzone biblioteki i tak będzie trzeba prawdopodobnie przebudować

0
fdfdsfsdghhhh napisał(a)
reichel napisał(a)

Z pewnoscia mozna podejsc do sprawy tak:

  1. grafika 3d bedzie w ogolnosci bazowala na punktach, prostych, plaszczyznach.
  2. mozna utworzyc sobie wlasne obudowywujace klasy i w nich tworzyc specyficzne implementacje (cos na ksztalt fabryki obiektow, w zaleznosci od wybranej biblioteki).

no to byś się zdziwił bo prawdopodobnie za koło 5 lat karty graficzne zaczną generować obraz 3d głównie przez raytracing co do teraz nie było możliwe w czasie rzeczywistym więc tak stworzone biblioteki i tak będzie trzeba prawdopodobnie przebudować

No a co ma jedno do drugiego ? Obiekt i tak w przestrzeni musi byc utworzony (zatem potrzeba jest i tak, ustawienia punktow, plaszczyzn, linii w przestrzeni opisujace jakis element). Potem dopiero sie wylicza bieg promienia i na jego podstawie buduje widok 2d przestrzeni 3d. Mysle, ze producenci wprowadzajac nowe elementy beda mimo wszystko chcieli zachowac kompatybilnosc. Zmieni sie/ulepszy jedynie to co i tak jest niedostepne (a raczej zautomatyzowane) dla programujacego.
I tak np. w opengl tworzac szescian pojawi sie opcja, ktora bedzie opisywala wspolczynnik zalamania swiatla dla przezroczystego szescianu, jednak cala idea pozostanie z penosci bardzo podobna jak dzis.

Jednym slowem, niezaleznie od metody tworzenia grafiki, elementy takie jak: punkt, linia, plaszczyzna, kolor tych elementow, tekstura, kamera, oswietlenie - pozostana i beda ogolne bo bazuja na realnym swiecie i nie jest w tych elementach nigdzie zawarta informacja jak nalezy wyliczyc projekcje 3d na 2d.

0

no nie wiem, tak na moje to pociągnie za sobą zmianę funkcjonowania shaderów
więc albo te biblioteki byłyby bardzo prymitywne albo coś jednak w nich trzeba będzie zmienić

kompatybilne to i tak to będzie, na pewno nie wyrzucą starej metody renderingu bo wszystkie gry / programy albo nawet całe systemy operacyjne przestałyby poprawnie działać

0

Witam ponownie.
Czytalem przy okazji cos o raytracingu i ogladalem krotki filmik pokazujacy dzialanie tego tworu. Jednak nie wglebialem sie w istote dzialania. Dzisiaj rozmawialem jeszcze z kolega na ten temat i przy zastosowaniu C# i XNA jest mozliwe ogladniecie calego kodu za pomoca reflecta. XNA podobno bedzie caly czas rozwijane bo to tylko zarzadzny DirectX i podobno szybkosc hest zblizona do zastosowania C++ i DirectX. Co by znaczylo ze XNA posiada funkcjonalnosc calego DirectX. Jednak to rowniez nie jest czlowiek z tej dziedziny i moze sie mylic. poza tym czy jest mozliwosc napisania kodu w C# + XNA tak aby nie byl on mozliwy do podgladniecia? Jeszcze pozniej sie pojawie cos podebatowac bo mam do napisania kilka linijek kodu w pracy i wskoczylem przy okazji na forum ;)

0

Mały OT a propos raytracingu. Kiedyś czytałem o nim na Wikipedii i wymiękłem, jak zobaczyłem to:
http://en.wikipedia.org/wiki/Image:Glasses_800_edit.png

0

What was the render time for this picture?

560 hours. — BRIAN0918 • 2006-08-02 00:19
0

raytracing, pixele, plaszczyzny i linie.. a czemu nie wolumeny? :) znacie ideę VOXELI ? :)

cofnijcie sie pamiecia do zamierzchlych czasow, kiedy pamieci bylo bardzo malo i wszystok co sie tylko dalo bylo generowane w locie. tak powstala grafika wektorowa --- pare punktow, informacja ze ma byc linia, ze ma byc trojkat i wszytko sie z tego rysuje. nikt nie myslal zeby zapamietac CALY obraz, bo te wszystkie pixele beda wazyc ze parenascie kilobajtow..

teraz malo kto sie szczypie, byle aparacik wypluwa z siebie jpgi 4tysx2tys pixeli wazace pare mega

opis wektorowy grafiki 3D wiaze sie z dwoma rzeczami - po pierwsze, informacje zajmuja mniej miejsca. po drugie - da sie je przeksztalcac szybciej - przesuwasz punkty.

glowe dam, ze za jakis czas ponownie slowa 'miejsce' oraz 'szybko' przestana miec znaczenie i znowu obrazy, tym razem 3D przejda w faze ... bitmap. a dokladniej - drzewa(etc) voxeli. ostatecznie, po co trzymac informacje o siatce i teksturze i mapowaniu text-siatka, shading i (..) skoro mozna trzymac 3-D 'teksture' w ktorej kazdy voxelu dokladnie opisuje jak wyglada?

rendering -- przeszktalcenia, animacje itp -- wygladalyby wtedy dokladnie tak samo jak renderowanie sceny we Flash na podstawie obrotow/skali/znieksztalcen bitmapek, tyle ze -- w 3D

oczywiscie, teraz jeszcze jest to technicznie nie wykonalne :))

0
quetzalcoatl napisał(a)

raytracing, pixele, plaszczyzny i linie.. a czemu nie wolumeny? :) znacie ideę VOXELI ? :)

Che che to straszny mix. Generalnie chodzilo mi o to, ze i tak w bibliotece musza byc elementy, ktore opisuja nasze wrazenia czyli obiekty, ich wymiary, parametry materialowe. Np. procedura narysuj kule moze byc uniwersalna dla wszytskich elementow i nie interesuje nas w jaki sposob grafika powstaje, czy jest przchowana jako wektor, zbior voxeli czy cokolwiek innego.

Raytracing jest o tyle ciekawy, ze bazuje na fizyce (optyka geometryczna). Powstawanie obrazu jest niemal identyczne jak to co obserwujemy za pomoca naszego wzroku (w rt promien biegnie najczesciej w przeciwna strone, ale to ze wzgledu na optymalizacje). Mozna sie tu zaglebiac niemal w nieskonczonosc (np. kazdy kolor ma swoj promien dzieki temu mozna wyrenderowac np. pryzmat, a potem trzymac go jako voxele :) )

Co do ukrycia kodu w MS studio (nie wiem jaka wersja) jest narzedzie do zaciemniania kodu, sa tez inne najczesciej platne (te w miare sensowne).

1 użytkowników online, w tym zalogowanych: 0, gości: 1