zVEC3 proste funkcje 1673 0

O temacie

Autor Siemekk

Zaczęty 28.02.2017 roku

Wyświetleń 1673

Odpowiedzi 0

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Jako, że potrzebowałem funkcji pracujących na VEC3 postanowiłem takowe napisać. Skrypt jest na chwilę obecną w "podstawowej" wersji i operuje tylko podstawowymi działaniami matematycznymi (Dodawanie, odejmowanie, mnożenie i dzielenie). Skrypty mogą być używane z funkcjami silnika które zawracają zVEC3, pod warunkiem że zawracać będą one wartość przez MEM_InstToPtr.
Kod źródłowy wektorów, parsować gdzieś po LeGo.
func int VEC3_Create(var int x, var int y, var int z)
{
var int varray[3];
varray[0] = mkf(x);
varray[1] = mkf(y);
varray[2] = mkf(z);

return _@(varray);
};

func void VEC3_SetX(var int ptr,var int x)
{
MEM_WriteInt(ptr,x);
};

func void VEC3_SetY(var int ptr,var int y)
{
MEM_WriteInt(ptr+4,y);
};

func void VEC3_SetZ(var int ptr,var int z)
{
MEM_WriteInt(ptr+8,z);
};

func void VEC3_Adds(var int fvec, var int svec)
{
var int x1; x1 = MEM_ReadInt(fvec);
var int y1; y1 = MEM_ReadInt(fvec + 4);
var int z1; z1 = MEM_ReadInt(fvec + 8);

var int x2; x2 = MEM_ReadInt(svec);
var int y2; y2 = MEM_ReadInt(svec + 4);
var int z2; z2 = MEM_ReadInt(svec + 8);

MEM_WriteInt(fvec, addf(x1,x2));
MEM_WriteInt(fvec+4, addf(y1,y2));
MEM_WriteInt(fvec+8, addf(z1,z2));
};

func void VEC3_Subs(var int fvec, var int svec)
{
var int x1; x1 = MEM_ReadInt(fvec);
var int y1; y1 = MEM_ReadInt(fvec + 4);
var int z1; z1 = MEM_ReadInt(fvec + 8);

var int x2; x2 = MEM_ReadInt(svec);
var int y2; y2 = MEM_ReadInt(svec + 4);
var int z2; z2 = MEM_ReadInt(svec + 8);

MEM_WriteInt(fvec, subf(x1,x2));
MEM_WriteInt(fvec+4, subf(y1,y2));
MEM_WriteInt(fvec+8, subf(z1,z2));
};

func void VEC3_Mult(var int fvec,var int svec)
{
var int x1; x1 = MEM_ReadInt(fvec);
var int y1; y1 = MEM_ReadInt(fvec + 4);
var int z1; z1 = MEM_ReadInt(fvec + 8);

var int x2; x2 = MEM_ReadInt(svec);
var int y2; y2 = MEM_ReadInt(svec + 4);
var int z2; z2 = MEM_ReadInt(svec + 8);

MEM_WriteInt(fvec, mulf(x1,x2));
MEM_WriteInt(fvec+4, mulf(y1,y2));
MEM_WriteInt(fvec+8, mulf(z1,z2));
};

func void VEC3_Divs(var int fvec, var int svec)
{
var int x1; x1 = MEM_ReadInt(fvec);
var int y1; y1 = MEM_ReadInt(fvec + 4);
var int z1; z1 = MEM_ReadInt(fvec + 8);

var int x2; x2 = MEM_ReadInt(svec);
var int y2; y2 = MEM_ReadInt(svec + 4);
var int z2; z2 = MEM_ReadInt(svec + 8);

MEM_WriteInt(fvec, divf(x1,x2));
MEM_WriteInt(fvec+4, divf(y1,y2));
MEM_WriteInt(fvec+8, divf(z1,z2));

};

func int VEC3_GetX(var int vptr)
{
return MEM_ReadInt(vptr);
};

func int VEC3_GetY(var int vptr)
{
return MEM_ReadInt(vptr+4);
};

func int VEC3_GetZ(var int vptr)
{
return MEM_ReadInt(vptr+8);
};

Wiem, że sporo brakuje, dlatego prosiłbym o podesłanie co jeszcze dodać (jakie funkcje).
Opis funkcji
int VEC3_Create(int x, int y, int z); //-Utwórz wektor 3D Nic dodać nic ująć. Wektor zapisujemy do zmiennej typu int. Przykład.
var int vec; vec = VEC3_Create(100,100,100);
/******************************************************************************************************/
void VEC3_SetX(int vec, int x); //Ustalamy ręcznie X naszego wektora. Zmienna vec to wskaźnik z naszego wektora (z VEC3_Create) a x to pozycja X
void VEC3_SetY(int vec, int y); //Tak jak wyżej z wyjątkiem, że podajemy Y
void VEC3_SetZ(int vec, int z); //Tak jak wyżej z wyjątkiem, że podajemy Z
/******************************************************************************************************/
void VEC3_Adds(int fvec, int svec); //Dodaj Wektory do siebie. Funkcja sumuje ze sobą dwa wektory argumenty to pierwszy wektor i drugi wektor dla przykładu
var int a; a = VEC3_Create(100,100,100); //Utwórz 1 wektor
var int b; b = VEC3_Create(25,25,25); //Utwórz 2 wektor
VEC3_Adds(a,b); //Teraz wektor A nie będzie miał wartości 100,100,100 tylko 125,125,125. Kolejne funkcje działają na tej samej zasadzie, różni się tylko działania.  Tak więc mamy:
/******************************************************************************************************/
void VEC3_Subs(int fvec, int svec); //Odejmij wektory od siebie
void VEC3_Mult(int fvec, int svec); //Pomnóż wektory przez siebie
void VEC3_Divs(int fvec, int svec); //Podziej wektory przez siebie (fvec : svec)
/******************************************************************************************************/
Ostatnie (Na obecną chwilę) funkcje, zawracają nam wartość x,y lub z naszego wektora. Tak więc mamy:
int VEC3_GetX(int vec); //Zawróci nam X, naszego wektora
int VEC3_GetY(int vec); //Zawróci nam Y, naszego wektora
int VEC3_GetZ(int vec); //Zawróci nam Z, naszego wektora

I to na obecną chwilę wszystko. Zachęcam do wypróbowania i zgłaszania błędów i propozycji. (Daje to do tutoriali, bo kiedyś może się to przydać, zwłaszcza gdy będzie to gotowe w 100%)

Wymagany jest Ikarus i pakiet Floats.

Pozdrawiam.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.


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