Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
17.08.2001, 12:55
thinktank



Also, ich hab mir mal das angeschaut, und festgestellt, dass man den vieworg
bekommen kann, aber in der view.cpp, jetzt bräuchte man nur noch die distance von der Kamera, damit man sie mit Traceline-Fraction malnehmen kann. Wie bekommt man jetzt das zusammen ;-) ?
Wie haben die das bei The Opera gemacht? Es gibt zwar in der
in_camera.cpp auch was mit der Kollision, ist aber "ausdefiniert" mit #ifdef LATER und funktioniert auch nicht. Da ich mich mit der Vektorarithmetik nicht so gut auskenne bräuchte ich jetzt euren Rat.

Thx !

--

zum Seitenanfang zum Seitenende Profil || Suche
001
17.08.2001, 19:46
thinktank



Hmm vielleicht könntet ihr mir dann mal erklären, was dieser Codeschnipsel machen sollte :
[code]
#ifdef LATER
if( cam_contain->value )
{
// check new ideal
VectorCopy( origin, pnt );
AngleVectors( camAngles, camForward, camRight, camUp );
for (i=0 ; i<3 ; i++)
pnt[i] += -dist*camForward[i];
// check line from r_refdef.vieworg to pnt
memset ( &clip, 0, sizeof ( moveclip_t ) );
clip.trace = SV_ClipMoveToEntity( sv.edicts, r_refdef.vieworg, ext, ext, pnt );
if( clip.trace.fraction == 1.0 )
{
// update ideal
cam_idealpitch->value = camAngles[ PITCH ];
cam_idealyaw->value = camAngles[ YAW ];
cam_idealdist->value = dist;
}
}
#endif
[/code]

wieso braucht man hier memset ?
was ist pnt für ein array?
wieso pnt[i] += -dist*camForward[i]; ?
was macht AngleVectors () ?
was ist Cam_Forward, cam_Angles etc. ?

Thx !

--


Dieser Beitrag wurde am 18.08.2001 um 11:30 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
18.08.2001, 11:40
thinktank



Wie ihr vielleicht wisst, poste ich das hier schon zum zweiten mal, aber habe auf beide Threads bisher noch keine Antwort bekommen, obwohl hier ganz schön tüchtige Leute rumkursieren (Another1,TTT .....), die das eigentlich können sollten (beweist es mir ;-) !!). Wenn ihr zu mindest eine Theorie vor Augen habt, wie es gehen könnte, dann postet das bitte auch . (bitte ! ;-) )

Thx !

--

zum Seitenanfang zum Seitenende Profil || Suche
003
18.08.2001, 19:19
apfelkorn



Theorie:
Du ziehst vom PlayerOrigin aus ei Traceline bis hin zum CamOrigin und prüfst, ob irgendeine Wand dazwischenliegt (if(pHit)). Wenn ja, dan veränderst du den Ort, wo die Cam steht und setzt sie einige Units vor die Wand.

--

zum Seitenanfang zum Seitenende Profil || Suche
004
18.08.2001, 21:50
thinktank



Ich habs probiert , aber in dieser Zeile hier:
tr = (playermove_s::PM_TraceLine(vec3_origin,params->vieworg,PM_NORMAL,-1)) ;

Kommt der Fehler :

...SourceCode\cl_dll\in_camera.cpp(412) : error C2064: Ausdruck ergibt keine Funktion

Was hab ich falsch gemacht ?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
18.08.2001, 22:18
DBug



Warum ist da eine Klammer um das ganze drum ??? Ist das Absicht ? Wenn ja, kann mich bitte einer aufklären wofür das gut ist *confused* ?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
18.08.2001, 22:29
thinktank



Die Klammer ist nicht notwendig, aber ich war mir nicht sicher, wegen dem Fehler. Lieber eine Klammer zu viel als zu wenig ;-)

--

zum Seitenanfang zum Seitenende Profil || Suche
007
18.08.2001, 22:31
Another1



versuchs doch mal mit
gEngfuncs.PM_TraceLine oder so
oder
gEnffuncs.pEventAPI->EV_PlayerTrace .. irgendwie sowas musst mal suchen =)

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
008
18.08.2001, 22:44
DBug



@thinktank: thx, ich dachte grade ich hab c++ schon verlernt...;)

--

zum Seitenanfang zum Seitenende Profil || Suche
009
19.08.2001, 00:10
thinktank



Ok es scheint zu klappen, nur die Kamera "schwabbelt" ein bischen, was wahrscheinlich darauf zurückzuführen ist, dass er immer wieder die distance aufs Ideal updatet. Aber ich hoffe, dass das das kleinere Übel sein wird.
thx !

--

zum Seitenanfang zum Seitenende Profil || Suche
010
19.08.2001, 22:45
apfelkorn



PM_Traceline ist, glaube ich zu wissen, keine Funktion mit return-Rückgabe. Da muss das tr in den Funktionsaufruf rein. Auch hast du das ignore_monsters vergessen, etc.

--


Dieser Beitrag wurde am 19.08.2001 um 22:45 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
20.08.2001, 11:52
thinktank



Eben nit ;-) ! Die PM_TraceLine Funktion gibt eine pm_trace_t struct zurück (oder so ähnlich). Ist nicht dasselbe wie die UTIL_TraceLine -Funktion auf der serverside. Schaus dir an ! Es gibt kein ignore_monsters etc. auf der clientside, da gibts nur PM_PHYSENTSONLY oder PM_ALLVISIBLE.

Thx

--

zum Seitenanfang zum Seitenende Profil || Suche
012
20.08.2001, 20:19
apfelkorn



mh... ist natürlich doof... dann wüsste ich auch nicht weiter

--

zum Seitenanfang zum Seitenende Profil || Suche
013
20.08.2001, 20:35
thinktank



Hmm jetzt hab ich ein neues Problem, bzw. das alte :) :
Das hier ist die Implementierung von der
Kollisionsabfrage:
Quellcode:
pmtrace_t tr;
cl_entity_s *pPlayer = gEngfuncs.GetLocalPlayer();
tr = *(gEngfuncs.PM_TraceLine( (float *)&(pPlayer->origin), (float *)¶ms.vieworg, PM_TRACELINE_PHYSENTSONLY , 2 /*point sized hull*/, -1 ));

if (tr.fraction != 1.0)
{
dist *=tr.fraction;
}
else
{
dist =  64;
}

Hab ich die Funktion PM_TraceLine falsch benutzt ?
Weil Valve hätte die Funktion SV_ClipMoveToEntity benutzt...

Naja, jedenfalls das Prob ist :
Die Distance wird komischerweise immer wieder auf die cam_idealdist gesetzt.
Deshalb ist schwingt sie immer hin und her. (Kann man nicht beschreiben, ausprobieren !). Ich hab den Code durchforstet, aber nichts gefunden, was damit zu tun haben könnte... Gibts da irgendwas ausserhalb von in_camera.cpp und view.cpp was die distance verändert ?

Thx

--

zum Seitenanfang zum Seitenende Profil || Suche
014
20.08.2001, 21:25
DBug



hmm, kA, such doch einfach mal (nach "cam_idealdist" z.B.) ;) !

--

zum Seitenanfang zum Seitenende Profil || Suche
015
24.08.2001, 16:27
thinktank



Hmm , ich bin ja auch blöd ;-) , Erklärung :

Er macht eine TraceLine zur idealdist (64),
dann ist idealdist = 64*fraction,
dann ist ja TraceLine die fraction wieder 1 , weils genau so
ist, das er die Wand ned trifft.
dann macht er ja :
if (tr.fraction != 1.0) // peng!!!

Also muss man das anders machen ;-)

Thx

--

zum Seitenanfang zum Seitenende Profil || Suche
016
24.08.2001, 17:14
TheTinySteini



Mach doch einfach:
if( tr.fraction != 1.0 )
dist = tr.fraction * 64;
else
dist = 64;

oder lass den else-zweig mal ganz weg.

Oder hab ich da jetzt was falsch kapiert (die Hitze hier treibt einem echt jeden klaren Gedanken aus dem Kopf :-/ ) ?

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy


Dieser Beitrag wurde am 24.08.2001 um 17:16 von TheTinySteini bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
017
24.08.2001, 18:42
thinktank



Hehe , nein das funzt nicht, WENN man immer eine TraceLine vom Vieworg zum player macht, da wenn du dist * tr.fraction nimmst, ist tr.fraction bei der nächsten TraceLine wieder 1, also macht ers auf dist = 64 . Also dann schwabbelts immer hin und her ;-). Ich werds jetzt so ausprobieren:

float TraceViewOrg[3];

TraceViewOrg[0] = params.vieworg[0];
TraceViewOrg[1] = params.vieworg[1];
TraceViewOrg[2] = 64;

tr = *(gEngfuncs.PM_TraceLine( (float *)&(pPlayer->origin), (float *)&TraceViewOrg,PM_TRACELINE_PHYSENTSONLY , 2 /*point sized hull*/, -1 ));

if (tr.fraction != 1.0)
{
dist *= tr.fraction;
}
else
{
dist = 64;
}

Ich probiers gleich mal.......

--


Dieser Beitrag wurde am 24.08.2001 um 18:57 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
24.08.2001, 19:41
thinktank



Das geht so auch nicht :( . Ich bräuchte "nur" einen anderen vieworg, der immer 64 Einheiten als Distance hat ......... Wie mache ich das ?

--

zum Seitenanfang zum Seitenende Profil || Suche
019
25.08.2001, 17:55
thinktank



Hmm , kennt ihr noch eine andere Idee ?

Thx !

--

zum Seitenanfang zum Seitenende Profil || Suche
020
27.08.2001, 11:39
thinktank



Hmmm , ich schaffs immer noch nicht, gibts wirklich keinen Geisteblitz bei euch ? =)
Habt ihr was falsch verstanden ?

Thx !

--

zum Seitenanfang zum Seitenende Profil || Suche
021
27.08.2001, 14:17
thinktank



[code]
pmtrace_t tr;
cl_entity_s *pPlayer = gEngfuncs.GetLocalPlayer();
AngleVectors( viewangles, camForward, camRight, camUp );
for (int i=0 ; i<3 ; i++)
TraceViewOrg[i] = (pPlayer->origin[i] +(-64 * camForward[i]));
tr = *(gEngfuncs.PM_TraceLine( (float *)&(pPlayer->origin), (float *)&TraceViewOrg ,PM_TRACELINE_PHYSENTSONLY , 2 , -1 ));
if (tr.fraction != 1.0)
{
dist *= tr.fraction;
}
else
{
dist = 64;
}
[/code]
So hab ichs jetzt gemacht, aber er macht die dist nicht immer korrekt........

Hallo ? I need Help ;-) !

--


Dieser Beitrag wurde am 27.08.2001 um 14:17 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
022
27.08.2001, 15:28
apfelkorn



Quellcode:
pmtrace_t tr;
dist = 64;
cl_entity_s *pPlayer = gEngfuncs.GetLocalPlayer();
AngleVectors( viewangles, camForward, camRight, camUp );
for (int i=0 ; i<3 ; i++)
TraceViewOrg[ i ] = (pPlayer->origin[ i ] - dist * camForward[ i ]);
tr = *(gEngfuncs.PM_TraceLine( (float *)&(pPlayer->origin), (float *)&TraceViewOrg ,PM_TRACELINE_PHYSENTSONLY , 2 , -1 ));

if (tr.fraction != 1.0)
   dist = dist * tr.fraction; // manchmal empfiehlt es sich die Lange Schreibweise zu nutzen, zum besseren Verständnis

entweder so, oder wie valve:

Quellcode:
// check new ideal
VectorCopy( origin, pnt );
AngleVectors( camAngles, camForward, camRight, camUp );
for (i=0 ; i<3 ; i++)
   pnt[ i ] += -dist*camForward[ i ];

// check line from r_refdef.vieworg to pnt
memset ( &clip, 0, sizeof ( moveclip_t ) );
clip.trace = SV_ClipMoveToEntity( sv.edicts, r_refdef.vieworg, ext, ext, pnt );

cam_idealpitch->value = camAngles[ PITCH ];
cam_idealyaw->value = camAngles[ YAW ];

if( clip.trace.fraction == 1.0 )
   cam_idealdist->value = dist;
else
   cam_idealdist->value = dist * clip.trace.fraction;

Ich persönlich würde das untere bevorzugen...

--


Dieser Beitrag wurde am 27.08.2001 um 15:32 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
023
27.08.2001, 16:14
thinktank



Hehe, das obere funzt aber nicht, und das untere hätte ich ja schon längst genommen, wenns gefunzt hätte ........
Ich frag mich halt, welches Entity ich in diesen Parameter bei SV_ClipMoveEntity stopfen soll und was dieses ext soll, weiß ich auch nicht.

--

zum Seitenanfang zum Seitenende Profil || Suche
024
28.08.2001, 17:43
thinktank



Another1 wollte doch den Code posten, mach das mal =) bitte !

--

zum Seitenanfang zum Seitenende Profil || Suche