Conversão de código em C para Delphi, Apenas 2 linhas
E ai pessoal, estou aprendendo como fazer colisões em 3d e a coisa ta braba.
Encontrei uma função em C que checa se um ponto3d está dentro de um triangulo .
Minha dúvida é como fazer para converter as seguintes linhas (em vermelho) para delphi?
[color=red:2fae125417]typedef unsigned int uint32;
#define in(a) ((uint32&) a)[/color:2fae125417]
bool checkPointInTriangle(const VECTOR& point, const VECTOR& pa,const VECTOR& pb, const VECTOR& pc) {
VECTOR e10=pb-pa;
VECTOR e20=pc-pa;
float a = e10.dot(e10);
float b = e10.dot(e20);
float c = e20.dot(e20);
float ac_bb=(a*c)-(b*b);
VECTOR vp(point.x-pa.x, point.y-pa.y, point.z-pa.z);
float d = vp.dot(e10);
float e = vp.dot(e20);
float x = (d*c)-(e*b);
float y = (e*a)-(d*b);
float z = x+y-ac_bb;
[color=red:2fae125417]return (( in(z)& ~(in(x)|in(y)) ) & 0x80000000);[/color:2fae125417]
}
a função em delphi está assim:
function checkPointInTriangle(const iPoint, pa, pb, pc : XVector) : Boolean;
var
e10, e20 : XVector;
a, b, c, ac_bb,
d, e, f, x, y, z : Single;
vp : XVector;
begin
e10 := VecSub(pb, pa);
e20 := VecSub(pc, pa);
a := VecDot(e10, e10);
b := VecDot(e10, e20);
c := VecDot(e20, e20);
ac_bb := (a*c)-(b*b);
vp := VecNew(iPoint.x-pa.x, iPoint.y-pa.y, iPoint.z-pa.z);
d := VecDot(vp, e10);
e := VecDot(vp, e20);
x := (d*c)-(e*b);
y := (e*a)-(d*b);
z := x+y-ac_bb;
[color=green:2fae125417][i:2fae125417]//Ainda está em C[/i:2fae125417][/color:2fae125417]
//return (( in(z)& ~(in(x)|in(y)) ) & 0x80000000);
end;
Alguém sabe o que o return está fazendo?
Agradeço se alguém puder me ajudar!
Encontrei uma função em C que checa se um ponto3d está dentro de um triangulo .
Minha dúvida é como fazer para converter as seguintes linhas (em vermelho) para delphi?
[color=red:2fae125417]typedef unsigned int uint32;
#define in(a) ((uint32&) a)[/color:2fae125417]
bool checkPointInTriangle(const VECTOR& point, const VECTOR& pa,const VECTOR& pb, const VECTOR& pc) {
VECTOR e10=pb-pa;
VECTOR e20=pc-pa;
float a = e10.dot(e10);
float b = e10.dot(e20);
float c = e20.dot(e20);
float ac_bb=(a*c)-(b*b);
VECTOR vp(point.x-pa.x, point.y-pa.y, point.z-pa.z);
float d = vp.dot(e10);
float e = vp.dot(e20);
float x = (d*c)-(e*b);
float y = (e*a)-(d*b);
float z = x+y-ac_bb;
[color=red:2fae125417]return (( in(z)& ~(in(x)|in(y)) ) & 0x80000000);[/color:2fae125417]
}
a função em delphi está assim:
function checkPointInTriangle(const iPoint, pa, pb, pc : XVector) : Boolean;
var
e10, e20 : XVector;
a, b, c, ac_bb,
d, e, f, x, y, z : Single;
vp : XVector;
begin
e10 := VecSub(pb, pa);
e20 := VecSub(pc, pa);
a := VecDot(e10, e10);
b := VecDot(e10, e20);
c := VecDot(e20, e20);
ac_bb := (a*c)-(b*b);
vp := VecNew(iPoint.x-pa.x, iPoint.y-pa.y, iPoint.z-pa.z);
d := VecDot(vp, e10);
e := VecDot(vp, e20);
x := (d*c)-(e*b);
y := (e*a)-(d*b);
z := x+y-ac_bb;
[color=green:2fae125417][i:2fae125417]//Ainda está em C[/i:2fae125417][/color:2fae125417]
//return (( in(z)& ~(in(x)|in(y)) ) & 0x80000000);
end;
Alguém sabe o que o return está fazendo?
Agradeço se alguém puder me ajudar!
Rickyale2
Curtidas 0
Respostas
Kroki
24/02/2008
Voce ta usando DElphiX?
Se não estiver use.
Se não estiver use.
GOSTEI 0
Rickyale2
24/02/2008
mudei do delphix para opengl para ficar mais fácil entender como funciona a lógica 3d... não fazia idéia e tava difícil de começar..
vc é a primeira pessoa que indica o delphix e não opengl... qual a diferença ?
valeu
vc é a primeira pessoa que indica o delphix e não opengl... qual a diferença ?
valeu
GOSTEI 0
Kroki
24/02/2008
No Delphix vc acessa o open Gl normalmente com rotinas simple...
Alem do mais no Delphix vc tem todas as funções de acesso ao HardWare muito facilmente.
Alem do mais no Delphix vc tem todas as funções de acesso ao HardWare muito facilmente.
GOSTEI 0