zVALUE co to jest? (Gothic 2) 3892 8

O temacie

Autor Bogdan Zwei

Zaczęty 11.09.2015 roku

Wyświetleń 3892

Odpowiedzi 8

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Podczas szperaniu w zCCamera.d natknąłem się na zVALUE. Pomyślałem, użyję Printu, żeby sprawdzić wartość tej zmiennej. Pokazało duży numer, uznałem, że float, po czym sprawdziłem wartość z truncf() i pokazało 0. I tu moje pytanie, czy zVALUE to to samo co zREAL? Jeśli nie, jak mogę konwertować tą wartość (tzn. czym)?

zCCamera.d (jakbyście nie chceli włączać skryptów):

Spoiler
//--------------------------------------
// Kamera
//--------------------------------------

const int NUM_FRUSTUM_PLANES = 6;

class zCCamera {
    //enum { CLIP_FLAGS_FULL        = 63, CLIP_FLAGS_FULL_WO_FAR    = 15 };
    //enum { NUM_FRUSTUM_PLANES_WO_FAR  =  4 };
    //enum { FRUSTUM_PLANE_FAR  =  4 };

    //zTPlane           frustumplanes   [NUM_FRUSTUM_PLANES];
        var int frustumplanes[24/*NUM_FRUSTUM_PLANES * sizeof (zTPlane)*/];         //zTPlane: { zREAL distance; zPOINT3 normal; }
        var int signbits[/*NUM_FRUSTUM_PLANES als Bytes*/ 2];   //zBYTE

    //var int zTViewportData    vpData;
        var int xmin;               //int           // oben rechts
        var int ymin;               //int         
        var int xdim;               //int           
        var int ydim;               //int         
        var int xminFloat;          //zVALUE        // oben links
        var int yminFloat;          //zVALUE   
        var int xmaxFloat;          //zVALUE        // unten rechts
        var int ymaxFloat;          //zVALUE   
        var int xdimFloat;          //zVALUE       
        var int ydimFloat;          //zVALUE   
        var int xdimFloatMinus1;    //zVALUE   
        var int ydimFloatMinus1;    //zVALUE   
        var int xcenter;            //zVALUE
        var int ycenter;            //zVALUE
   
    var int targetView;                         //zCViewBase

    //Transformationsmatrizzen:
    var int camMatrix   [16];       //zMATRIX4
    var int camMatrixInv[16];       //zMATRIX4

    var int tremorToggle;       //zBOOL
    var int tremorScale;        //zREAL
    var int tremorAmplitude[3]; //zVEC3
    var int tremorOrigin[3];    //zVEC3
    var int tremorVelo;         //zREAL

    // Transformation matrices
    var int trafoView   [16];   //zMATRIX4
    var int trafoViewInv[16];   //zMATRIX4
    var int trafoWorld  [16];   //zMATRIX4
   
    /*
    template <class T, int SIZE> class zCMatrixStack {
        int     pos;
        T       stack[SIZE];
    }*/
    //zCMatrixStack<zMATRIX4,8> trafoViewStack;
        var int trafoViewStack[/* 1 + 16 * 8 */129];
    //zCMatrixStack<zMATRIX4,8> trafoWorldStack;
        var int trafoWorldStack[/* 1 + 16 * 8 */129];
    //zCMatrixStack<zMATRIX4,8> trafoWorldViewStack;
        var int trafoWorldViewStack[/* 1 + 16 * 8 */129];
   
    var int trafoProjection[16]; //zMATRIX4

    //enum { zTCAM_POLY_NUM_VERT = 4 };
   
    /*
    struct zTCamVertSimple {
        zREAL       x,y,z;     
        zVEC2       texuv;
        zCOLOR      color;
    };
    */
   
    //zTCamVertSimple polyCamVerts[zTCAM_POLY_NUM_VERT];
        var int polyCamVerts[/*zTCAM_POLY_NUM_VERT * (3 + 2 + 1)*/ 24];
   
    var int poly;           //zCPolygon*
    var int polyMesh;       //zCMesh*   
    var int polyMaterial;   //zCMaterial*

    // Screen-Effects
    var int screenFadeEnabled;         //zBOOL           
    var int screenFadeColor;           //zCOLOR         
    var string screenFadeTexture;      //zSTRING           
    var int screenFadeTextureAniFPS;   //zREAL           
   
    /*
    enum zTRnd_AlphaBlendFunc   {   zRND_ALPHA_FUNC_MAT_DEFAULT,
                                zRND_ALPHA_FUNC_NONE,                   
                                zRND_ALPHA_FUNC_BLEND,             
                                zRND_ALPHA_FUNC_ADD,                   
                                zRND_ALPHA_FUNC_SUB,                   
                                zRND_ALPHA_FUNC_MUL,                   
                                zRND_ALPHA_FUNC_MUL2,                   
                                zRND_ALPHA_FUNC_TEST,   
                                zRND_ALPHA_FUNC_BLEND_TEST
                            };  */
    var int screenFadeTextureBlendFunc;     //zTRnd_AlphaBlendFunc
    var int cinemaScopeEnabled;             //zBOOL
    var int cinemaScopeColor;               //zCOLOR

    //ungenutzt:
    //enum zPROJECTION  { PERSPECTIVE, ORTHOGONAL };
    var int projection;     //zPROJECTION
   
    /*
    enum zTCam_DrawMode { zCAM_DRAW_NORMAL, zCAM_DRAW_NOTHING,
                      zCAM_DRAW_WIRE, zCAM_DRAW_FLAT, zCAM_DRAW_TEX }; */
    var int drawMode; //zTCam_DrawMode
   
    /*
    enum zTShadeMode    { zSHADE_NORMAL, zSHADE_NOTHING, zSHADE_CONSTANT, zSHADE_GOURAUD, zSHADE_LIGHTMAP }; */
    var int shadeMode;  //zTShadeMode
   
    var int drawWire;   //zBOOL

    var int farClipZ;          //zVALUE
    var int nearClipZ;         //zVALUE
    var int viewDistanceX;     //zVALUE
    var int viewDistanceY;     //zVALUE
    var int viewDistanceXInv;  //zVALUE
    var int viewDistanceYInv;  //zVALUE
    var int vobFarClipZ;       //zBOOL   
    var int fovH;              //zREAL
    var int fovV;              //zREAL   
    var int connectedVob;     //zCVob*
   
    var int topBottomSin;      //zVALUE
    var int topBottomCos;      //zVALUE
    var int leftRightSin;      //zVALUE
    var int leftRightCos;      //zVALUE
};
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič
Myślę ze powinieneś zapytać na niemieckim forum najlepiej w temacie ikarusa. Jak będziesz miał sczeszcie to ci może nawet Nico odpisze albo chociaż sektenspinner, albo ktoś kto się zna na gothicu w podobnym stopniu jak te osoby 
 


chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Użyj funkcji Printf.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Ano, już widzę, dziękuję! Ale teraz mam pytanie, skoro printf (MEM_Camera.topBottomSin); daje ~0.8, to jak mogę dodać do tego np. ~0.4?
Wiem, że muszę użyć mkf(), ale nie wiem, jak to zapisać. W sumie to floatów nie ogarniam, wiem tylko jak używać mkf() i truncf(), ale jak robić liczby po przecinku to już nie wiem.


Dobra! Nauczyłem się. Jedyny problem, jaki jeszcze mam to wynik tego działania: divf (mkf(1200), mkf(1000));. Wynikiem jest... 1.1999. Ale najważniejsze, że się nauczyłem. Jeszcze raz dziękuję za pomoc.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Wynikiem jest... 1.1999.
1,1(9) (9 w okresie, tak zrozumiałem) to jest dokładnie 1,2.
 
Lieb Vaterland magst ruhig sein

oskardon

oskardon

Użytkownicy
posty91
Propsy38
ProfesjaGracz
  • Użytkownicy
Działania matematyczne na liczbach zmiennoprzecinkowych (w popularnych językach double i float, w zENGINE ich odpowiedniki zREAL i zVALUE/zFLOAT) są z definicji nieprecyzyjne. Na ogół jest to dobry kompromis z ich wydajnością. Po prostu nigdy nie porównuj ich ze sobą bezpośrednio, tylko odejmuj od siebie i sprawdzaj czy wartość bezwzględna z różnicy jest niższa niż tolerowalna granica błędu ("epsilon").
 
Life is brutal and full of zasadzkas.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Jeśli by ktoś potrzebował kiedykolwiek odczytać float, tutaj jest temat, w którym NicoDE posłał ciekawą funkcję, która odczytuje float. Można jej użyć praktycznie do wszystkiego (zwraca string) i jest nawet lepsza od PrintF().

Funkcję używamy tak:
Float32ToString ( mkf ( LICZBA ) );

Najlepsze przykłady:
Float32ToString (divf(mkf(55),mkf(17)); = 3,2352941176470588235294117647059
Float32ToString (divf(mkf(100),mkf(33)); = 3,030303030303030303030303030303
Float32ToString (divf(mkf(83),mkf(99)); = 0,83838383838383838383838383838384
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič
Można jej użyć praktycznie do wszystkiego (zwraca string) i jest nawet lepsza od PrintF().
Możesz rozwinąć czemu jest lepsza ?
 


Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Pokazuje większą liczbę po przecinku (PrintF() pokazuje tylko max. 4 miejsca po przecinku), można użyć do książek, np. jeśli chcemy, żeby w książce była zmienna, która musi być po przecinku (np. Regeneracja życia 1.53 na sekundę). Można tego także użyć do pokazywania zasięgu (Npc_GetDistToNpc()) w metrach (jesteśmy oddaleni 5.82 metrów od namierzonego npc - Npc_GetDistToNpc() pokazuje zasięg w centymetrach). Zaś PrintF() pokazuje tylko wartość float na ekranie u góry.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry