Symulator EU07 (i nie tylko) > Na warsztacie

 Exe - konwersja na C++

<< < (578/637) > >>

Wiggle:

--- Cytat: AtapiCl w 01 Lipca 2017, 18:07:28 ---W praktyce WS DCU dają gotowość prawie że od razu.

--- Koniec cytatu ---

A z przetwornicą jak to wygląda?

Milek7:
mam zagadkę, może ktoś ma pomysł
Shadow mapa jest renderowana z projekcją depthproj i macierzą depthcam. Do GL jako modelview jest przesyłana tylko obrót depthcam, czyli mat3(depthcam).
To samo ze światem, renderowany jest z projekcją perspective i macierzą worldcamera. Do GL jako modelview jest przesyłany tylko obrót worldcamera, czyli mat3(worldcamera)
Teraz: przez jaki macierz trzeba przemnożyć (mat3(worldcamera) * wierzchołek) żeby powstały współrzędna wierzchołka widziana przez światło?

--- Kod: ---    glm::mat4 depthproj = glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, 0.1f, 100.0f);
glm::vec3 playerpos = glm::vec3(World.Camera.Pos.x, World.Camera.Pos.y, World.Camera.Pos.z);
glm::vec3 shadoweye = playerpos - Global::daylight.direction * 50.0f;
Global::SetCameraPosition(Math3D::vector3(shadoweye));
    glm::mat4 depthcam = glm::lookAt(shadoweye,
playerpos,
            glm::vec3(0.0f, 1.0f, 0.0f));
    m_camera.update_frustum(depthproj, depthcam);
    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(glm::value_ptr(depthproj));
    glMatrixMode(GL_MODELVIEW);
    glMultMatrixf(glm::value_ptr(glm::mat4(glm::mat3(depthcam))));

    glm::mat4 perspective = glm::perspective(
        glm::radians(Global::FieldOfView / Global::ZoomFactor),
        std::max( 1.0f, (float)Global::ScreenWidth ) / std::max( 1.0f, (float)Global::ScreenHeight ),
        0.1f * Global::ZoomFactor,
        m_drawrange * Global::fDistanceFactor );
glm::dmat4 worldcamera;
World.Camera.SetMatrix( worldcamera );
m_camera.update_frustum( OpenGLMatrices.data( GL_PROJECTION ), worldcamera);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(glm::value_ptr(perspective));
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixd( glm::value_ptr( glm::dmat4( glm::dmat3(worldcamera))));
--- Koniec kodu ---

Próbowałem już różne kombinacje, m. in. tak, ale nie mogę trafić.

--- Kod: ---glm::vec3 transdiff = glm::vec3(worldcamera[3]) - glm::vec3(depthcam[3]);
glm::mat3 rotdiff = glm::mat3(worldcamera) * glm::mat3(depthcam);
glm::mat4 lv = depthproj * glm::translate(glm::mat4(rotdiff), transdiff);
--- Koniec kodu ---

Krzysiek626:
Tytułem uzupełnienia testów. Obie wersje exeka @tnj i od @Milek7 poprawnie wczytują scenerie na 64 bitowym windowsie. Obie 64 bitowe wersje exeków nie wywlają błędów z pamięcią (brakiem). Exe Milkowe przestało sypać masowymi wpisami do log i errors.txt. Nie mam błędów w wyświetlaniu tekstur i modeli. Mimo anosu @tmj o wyższym fps na exe Milka, nie potwierdzę, kaliska ma kilka FPSów mniej niż na exe od @tmj, szczególnie, gdy ich poziom oscyluje w granicach 30.

MW:
@Krzysiek626: dzięki za link - zainstalowałem pierwszy napotkany sterownik, nowszy od dotychczasowego, celem sprawdzenia czy to w ogóle pomoże. Rzucającym się w oczy problemem była rozbieżność w odczytaniu wersji OpenGL  przez różne warianty exe , tym bardziej, że inne niezależne narzędzia testujące pokazywały 3.3.0.  Co do zmian w obejmowaniu składu przez AI w trybie debug, to wiedziałem o tym. W poprzednim poście nawiązałem do tego, bo być może wysypy wersji NG miały przyczynę w jakimś konflikcie przy jednoczesnym inicjowaniu sceny i aktywacji AI (?)

tmj:

--- Cytat: Milek7 w 01 Lipca 2017, 21:44:34 ---Próbowałem już różne kombinacje, m. in. tak, ale nie mogę trafić.

--- Kod: ---glm::vec3 transdiff = glm::vec3(worldcamera[3]) - glm::vec3(depthcam[3]);
glm::mat3 rotdiff = glm::mat3(worldcamera) * glm::mat3(depthcam);
glm::mat4 lv = depthproj * glm::translate(glm::mat4(rotdiff), transdiff);

--- Koniec kodu ---

--- Koniec cytatu ---
O ile dobrze pamietam to roznica obrotow dwoch macierzy to R1^-1 * R2, czyli na jednej z nich musi byc zrobiony inverse. Zwykle mnozenie da sume obrotow, nie roznice.


--- Cytat: Wiggle w 01 Lipca 2017, 17:03:19 ---A co z opóźnieniem wyłącznika szybkiego? Dałoby radę coś zrobić?

--- Koniec cytatu ---
Teoretycznie mozna, ale jesli w praktyce wyglada to tak, jak mowi @AtapiCl to nie wiem czy warto ;o

W dzisiejszym uaktualnieniu:

- eksperymentalnie, wrzucanie tekstur do karty graficznej wykonywane jest dopiero gdy tekstura jest potrzebna do narysowania sceny, a tekstury przez dluzszy czas nie uzywane przenoszone sa do czasu ponownego uzycia do pamieci zasadniczej. Efektem pozytywnym jest zmniejszenie uzycia pamieci vram, wiec jest szansa ze nie zabraknie jej zbyt szybko na wyswietlanie modeli. Efektem niepozytywnym natomiast moze byc okazjonalne przyciecie w renderowaniu, w czasie gdy dane tekstur przesylane sa miedzy karta i pamiecia zasadnicza (aby to wyeliminowac przydalaby sie obsluga tekstur na osobnym watku, ale tak dobrze jeszcze nie jest)

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej
Powered by Advanced Topic Prefix Pro
Powered by SMFPacks Likes Pro Mod