Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)

[es] :: 3D programiranje :: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)

[ Pregleda: 3926 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BinaryRuler

Član broj: 73518
Poruke: 189
89.216.248.*



+3 Profil

icon Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)22.08.2007. u 21:09 - pre 202 meseci
Skinuo sam neke primere sa http://nehe.gamedev.net/ sajta za Dev-C++. Primeri koji imaju neko kretanje objekta pri pokretanju na jednoj masini (RAM: 1GB, nVidia GeForce 6100 i Sempron64 3000+) normalno se krecu (rotiraju), ali kada taj isti exe prebacim na drugu masinu (RAM 512 MB, ATI 9200, Athlon 900 MHz) kretanje objekata je prilicno brzo. Interesuje me razlog zasto se to desava i kako ako je moguce to da eliminisem da radi na svim masinama isto.
Source sam kompajlirao na Sempronu.
Evo jednog primera kod koga se pomenuta pojava desava http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06
rotiranje kocke sa nalepljenom teksturom.
 
Odgovor na temu

yaelo
Rajko Vojnović
Beograd

Član broj: 78087
Poruke: 153
*.smin.sezampro.yu.



+9 Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)22.08.2007. u 22:37 - pre 202 meseci
Verovatno je na mašini sa bržom rotacijom isključena sinhronizacija izmedju izmedju renderovanja i brzine osvežavanja monitora - disable vertical sync.
Za DirectX (ne poznajem OpenGL) d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; U pitanju je brzina prebacivanja sadržaja back bafera u front. To se često isključuje na slabijim mašinama.
 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)22.08.2007. u 22:38 - pre 202 meseci
Razlog lezi u tome sto neka graficka kartica brze izrenderuje scenu od druge kartice.
Ako postavis timere na odredjen interval( npr. 0.01 sec) i da u tom intervalu mjenjas koordinate tijela, onda ce ti efekat biti isti na oba racunara( jedino ako gpu izvrsi renderovanje scene za vise vremena od datog intervala).
Tako sam ja radio, mada, vjerovatno postoji dosta bolji nacini za rijesavanje tog problema, jer sam se samo malo bavio 3d grafikom.
Pozdrav!

 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
89.216.248.*



+3 Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)22.08.2007. u 23:35 - pre 202 meseci
OK hvala na odgovorima. Ali da li neko moze da mi kaze kako konkretno to da resim npr. na primeru za koji sam dao link?
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06
 
Odgovor na temu

MadHouseRock

Član broj: 154937
Poruke: 7
*.bvcom.net.



Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)23.08.2007. u 01:16 - pre 202 meseci
Na vrh posle fullscreen = TRUE dodaj:
Code:

unsigned long gStartTime = 0;
unsigned long gLastTime = 0;

float GetElapsedSeconds()
{
    unsigned long currentTime = GetTickCount() - gStartTime;
    unsigned long elapsedTime = currentTime - gLastTime;
    gLastTime = currentTime;
    return (float)(elapsedTime/1000.0f);
}

U initGL():
Code:

gStartTime = GetTickCount();

Na vrh DrawGlScene():
Code:

float timeInSec = GetElapsedSeconds();

i u istoj f promeni:
Code:

xrot+=80.0f * timeInSec;
yrot+=90.0f * timeInSec;
zrot+=100.0f * timeInSec;

Ovo je najjednostavnije sto sam trenutno mogao da smislim, vreme nije bas precizno ali trebalo bi da radi.
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
89.216.248.*



+3 Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)23.08.2007. u 11:58 - pre 202 meseci
Hoce malo da secka ali resava problem. Hvala.
A da li moze problem da se resi preko nekih parametara za device ili tako nesto?
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
89.216.248.*



+3 Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)23.08.2007. u 13:05 - pre 202 meseci
Hvala na trudu svima. Dosao sam do vrlo elegantnog resenja sa jednom linijom koda.
Evo kako, u win apiju u glavnoj while petlji sam dodao samo Sleep(1) i resio problem.

Code:

int WINAPI WinMain(    HINSTANCE    hInstance,            // Instance
                    HINSTANCE    hPrevInstance,        // Previous Instance
                    LPSTR        lpCmdLine,            // Command Line Parameters
                    int            nCmdShow)            // Window Show State
{
    MSG        msg;                                    // Windows Message Structure
    BOOL    done=FALSE;                                // Bool Variable To Exit Loop

    // Ask The User Which Screen Mode They Prefer
    if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
    {
        fullscreen=FALSE;                            // Windowed Mode
    }

    // Create Our OpenGL Window
    if (!CreateGLWindow("NeHe's Texture Mapping Tutorial",640,480,16,fullscreen))
    {
        return 0;                                    // Quit If Window Was Not Created
    }

    while(!done)                                    // Loop That Runs While done=FALSE
    {
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))    // Is There A Message Waiting?
        {
            if (msg.message==WM_QUIT)                // Have We Received A Quit Message?
            {
                done=TRUE;                            // If So done=TRUE
            }
            else                                    // If Not, Deal With Window Messages
            {
                TranslateMessage(&msg);                // Translate The Message
                DispatchMessage(&msg);                // Dispatch The Message
            }
        }
        else                                        // If There Are No Messages
        {
            // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
            if ((active && !DrawGLScene()) || keys[VK_ESCAPE])    // Active?  Was There A Quit Received?
            {
                done=TRUE;                            // ESC or DrawGLScene Signalled A Quit
            }
            else                                    // Not Time To Quit, Update Screen
            {
                SwapBuffers(hDC);                    // Swap Buffers (Double Buffering)
            }

            if (keys[VK_F1])                        // Is F1 Being Pressed?
            {
                keys[VK_F1]=FALSE;                    // If So Make Key FALSE
                KillGLWindow();                        // Kill Our Current Window
                fullscreen=!fullscreen;                // Toggle Fullscreen / Windowed Mode
                // Recreate Our OpenGL Window
                if (!CreateGLWindow("NeHe's Texture Mapping Tutorial",640,480,16,fullscreen))
                {
                    return 0;                        // Quit If Window Was Not Created
                }
            }
        }
        Sleep (1); //Evo ga tu je resenje.
    }

    // Shutdown
    KillGLWindow();                                    // Kill The Window
    return (msg.wParam);                            // Exit The Program
}
 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)23.08.2007. u 17:29 - pre 202 meseci
Ja ne bih koristio Sleep funkciju, jer ona suspenduje trenutni thread, odnosno za to vrijeme tvoja aplikacija ne radi nista.
Dakle, gubis dosta vremena, koje bi mogao potrositi na nesto korisnije!
Sleep pali na manjim projektima, ali kad se radi o glomaznim kalkulacijama, onda ne pije vodu.
Pozdrav!
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
89.216.248.*



+3 Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)23.08.2007. u 20:50 - pre 202 meseci
Ako je tako dajte neko elegantno resenje.

Pozdrav
 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)23.08.2007. u 22:46 - pre 202 meseci
pa, evo neki najlaksi primjer:
napravis novi thread pomocu CreateThread funkcije( http://msdn2.microsoft.com/en-us/library/ms682453.aspx )
i u Thread funkciji neka ima Sleep funkcija:
Code:

void thread_func(void *data){
   Sleep(1);//
   //ovjde postavljas zeljene transformacije:
   x+=0.001;
   y+=0.001;
   //itd...
}

Samo da jos kazem, thread predstavlja nit u jednom procesu. Dakle svaki proces moze da ima jednu( glavnu) ili vise niti.
Te niti se paralelno izvrsavaju.
U ovom primjeru, ti ces imati dvije niti:
1) glavnu - koja pocinje sa funkcijom main()
2) druga- koju si krirao pomocu CreateThread() i koja pocinje u funkciji thread_func().

p.s. Creating Threads - http://msdn2.microsoft.com/en-us/library/ms682516.aspx
 
Odgovor na temu

[es] :: 3D programiranje :: Zasto se na jednoj masini 3d objekat brzo rotira, a na drguj normalmo? (OpenGL)

[ Pregleda: 3926 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.