de perfecte globe

Status
Niet open voor verdere reacties.

Murdocki

Gebruiker
Lid geworden
7 jun 2007
Berichten
449
jullie hebben vast allemaal wel de perfecte cirkel thread gelezen, deze heb ik gebruikt om met een camera rondom het punt waar hij naar kijkt te draaien. ook heb ik heb gebruikt voor het punt om de camera heen te draaien. 2 functies dus: orbit en normale rotatie.

nu wilde ik als volgende stap ook de camera omhoog en omlaag bewegen maar dan moet natuurlijk wederom de straal hetzelfde blijven. mijn probleem hierbij is dat ik ergens een denkfoutje maak om te berekenen hoeveel de camera over de x en z axis terug moet bewegen. de functie die ik geschreven heb is als volgt:

Code:
loglist RotateCameraLookDown( float& cameraposx, float& cameraposy, float& cameraposz,
                            float& cameralookx, float& cameralooky, float& cameralookz,
                            double& groundangle, double& globeangle )
    {
    loglist returnlist;
    int circlequadrant = GetCam_posQuadrant( cameraposx, cameraposz, cameralookx, cameralookz, groundangle );
    sprintf( returnlist.extras, "%s", "started rotcamdwn function-");



    float groundradius = GetCamDist_Ground( cameraposx, cameraposz, cameralookx, cameralookz );
    float globeradiustemp = GetCamDist_Globe(   cameraposx, cameraposy, cameraposz,
                                            cameralookx, cameralooky, cameralookz );
    if( globeangle < 215-rotatespeed )globeangle += rotatespeed;
    else return returnlist;
    cameralooky = cameraposy + groundradius*tan_d(globeangle);
    float globeradius = GetCamDist_Globe(   cameraposx, cameraposy, cameraposz,
                                            cameralookx, cameralooky, cameralookz );
    float groundchange = sqrt((globeradius-globeradiustemp)*(globeradius-globeradiustemp)-(groundradius*sin_d(globeangle))*(groundradius*sin_d(globeangle)));
    //cameralookx = cameraposx+(groundradius-groundchange)*cos_d(groundangle);
    //cameralookz = cameraposz+(groundradius-groundchange)*sin_d(groundangle);



    loglist temp(   -1, globeradius, groundchange, rotatespeed,
                    cameralookz, cameralookx, cameraposx, cameraposz );
    returnlist = temp;
    return returnlist;
    }
hierbij is:
loglist: een zelfgemaakte class om info door te geven
GetCamDist_Ground/GetCamDist_Globe: functies die met pythagoras de afstand berekenen
GetCam_posQuadrant: zoekt voor mij het kwadrant waar de camera is op (voor de fun)

het probleem is nu dat ik als groundchange het volgende krijg: "-1.IND00" dit zal wel een of andere sprinf error zijn maar het geeft dus wel aan dat er ergens iets niet lekker zit.

iemand enig idee war ik hier fout doe en wat die error betekent?

p.s. ik weet dat de camera zo de verkeerde kant op draait maar dat is makkelijk verholpen en geen probleem.
 
Ik heb ooit eens hetzelfde gedaan. Mijn formule hiervoor was:

Code:
vecCam.x = sin(tmpX)*sin(tmpY);
vecCam.y = cos(tmpY);
vecCam.z = 0.0f - (cos(tmpX)*sin(tmpY));


Waarbij tmpX een waarde is tussen 0 en 2PI (cirkel rondom object)
En tmpY tussen 0 en PI (van onder naar boven)

de up vector staat altijd op 1.0 en lookat naar het midden
 
hmm hij beweegt van linksboven naar rechtsonder. is dat de bedoeling?

edit:
de straal blijft ook niet hetzelfde
 
Straal is gewoon een extra factor:

Code:
vecCam.x *= straal;
vecCam.y *= straal;
vecCam.z *= straal;
 
heb je de applicatie waarin je het had nog? zo ja zou ik hem mogen zien?
 
nice. k zal morgen je code eens bestuderen thx :)

p.s. maak een check of de schermresolutie in config groter is dan max van het scherm. denk dat dat de reden is waarom ik krijg dat directx9 init failed. heb het gefixt door de resolutie lager te zetten
 
hmm ik begrijp er nix van hoe jij dat doet. ik doe het zelf nu zo:

Code:
cameralooky = cameraposy + sin_d( globeangle ) * camera_radius;
float groundradius = cos_d( globeangle ) * camera_radius;
cameralookx = cameraposx + cos_d( groundangle ) * groundradius;
cameralookz = cameraposz + sin_d( groundangle ) * groundradius;

hierbij is camera_radius de afstand tussen camera een lookat
globeangle de hoek vanaf de grond omhoog/omlaag
groundangle de hoek op de grond
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan