Meshesintersect() - zu langsam!
Übersicht

Mr HoppBetreff: Meshesintersect() - zu langsam! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey!
Ich habe gestern Abend (ENDLICH) herausgefunden, wie man Treppen steigen könnte. Dazu erstelle ich einen Cube um meine Füße herum (etwas über dem Boden) und bewege diesen mit mir. Wenn der Player nun mit einer Stufe/Wand kolidiert, wird er nur dann hoch bewegt, wenn der Cube NICHT kollidiert (um zu vermeiden, dass man die wand hoch laufen kann). Dies prüfe ich mit Meshintersect()..... Allerdings zieht mir das sage und schreibe 1000fps im Testprogramm...wie macht ihr sowas?? Kann man diesen Befehl umgehen? Danke schonmal |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Indem du einfach die Kollision via Collisions nimmst und Modus 2 oder 3 nimmst.
Ach ja: 1000 FPS sind nix, denn alles was mehr als 500 FPS ist, sind sowieso "heisse Luft FPS" sprich die verliert man bedeutend schneller (und durch bedeutend weniger) als im Bereich 500-0 (auf mid-high end karten) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst einfach den Collisionsradius größer machen, oder die Treppenstufenhöhe kleiner. | ||
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte: Dexterity Ball (100%) Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz (ehemals Uboot) PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nunja...mir geht es ja darum, dass der Cube ermittel, ob die Kante zu hoch ist, oder nicht. Wenn der Cube dann eine Kugel zur Kollision hat, verfälscht das extrem.
@Dreamora: also 280fps reichen für ein Testprogramm? ![]() |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, denn aktuell läuft dein Programm im Debug Mode. Will heissen, dass vor allem Loops extrem viel langsamer laufen und darüber hinaus wenn ich mich richtig erinner, sind vor allem auch Pick und MeshIntersect speziell langsam ![]() Solange du kein AMD64 5000 mit 7950 GTX hast ist das von daher kein Problem ^^ Das mit der Stephöhe lässt sich übrigens anders viel einfacher erreichen: Deine Figur kann nur in eine Richtung gehen auf einmal. Also kann er eigentlich auch nur in diese Richtung an eine Wand geraten, von daher lässt sich das "Treppensteigen" auch mit einigen wenigen LinePicks erledigen, die nur eine sehr kurze Distanz überprüfen müssen -> sehr sehr schnell |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Achso ok, dann ist ja gut, danke ![]() Linepick und so kannte ich auch noch gar nicht...bedeuten dx,dy,dz, dass mehrere Linien (z.B. im Abstand von x zu dx) erstellt werden??? Und was, wenn meine Figur rückwärts oder seitlich laufen soll??? |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dx, dy, dz sind sie Länge des Picks in X, Y, Z Richtung.
Und wie die Richtung heisst, in welche du läufst, macht keinen Unterschied, da du das in die X,Y,Z Position für den LinePick einfliessen lässt. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mhh.....das mit dem Linepick hab ich jetz noch net so ganz.... ich poste ma den Code (sorry, net lauffähig ohne mesh):
Mit Cube: Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1
SetBuffer BackBuffer() AppTitle("Test") Dim fps(3) objekt=LoadMesh("Treppe.3ds") PositionEntity objekt,0,0,0 EntityType objekt,1 cam=CreateCamera() PositionEntity cam,0,5,-6 EntityRadius cam,1,3 EntityType cam,2 cube=CreateCube(cam) ScaleEntity cube,1,0.1,1 MoveEntity cube,0,-1.5,0 EntityType cube,3 EntityAlpha cube,0 Collisions 2,1,2,3 light=CreateLight() Repeat Cls TranslateEntity cam,0,-1,0 If KeyDown(17) Then MoveEntity cam, 0, 0, 0.1 If KeyDown(31) Then MoveEntity cam, 0, 0, -0.1 If KeyDown(30) Then MoveEntity cam, -0.1, 0, 0 If KeyDown(32) Then MoveEntity cam, 0.1, 0, 0 RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 MoveMouse 512, 384 UpdateWorld RenderWorld If MeshesIntersect(cube,objekt)=0 And EntityCollided(cam,1)>0 Then TranslateEntity cam,0,1,0 Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs() Flip Until KeyHit(1) End Mit Linepick: Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1
SetBuffer BackBuffer() AppTitle("Test") Dim fps(3) objekt=LoadMesh("Treppe.3ds") PositionEntity objekt,0,0,0 EntityType objekt,1 cam=CreateCamera() PositionEntity cam,0,5,-6 EntityRadius cam,1,3 EntityType cam,2 EntityPickMode cam,1 Collisions 2,1,2,3 light=CreateLight() Repeat Cls TranslateEntity cam,0,-1,0 If KeyDown(17) Then MoveEntity cam, 0, 0, 0.1 If KeyDown(31) Then MoveEntity cam, 0, 0, -0.1 If KeyDown(30) Then MoveEntity cam, -0.1, 0, 0 If KeyDown(32) Then MoveEntity cam, 0.1, 0, 0 RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 MoveMouse 512, 384 UpdateWorld RenderWorld If cam=LinePick(EntityX(cam),EntityY(cam)+1.5,EntityZ(cam),0,0,0.5) Then TranslateEntity cam,0,1,0 Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs() Flip Until KeyHit(1) End |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich sehe so auf Anhieb 2 Fehler:
1. Du hast EntityY(cam) + 1.5 statt -1.5 2. Das Levelmesh scheint nicht pickable zu sein. Sprich solange das Picksetup net da ist, wird der Pick immer 0 ergeben ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
und dein pick geht nach vorne(Z) statt nach unten
y + oben y - unten camerea y sollte da sein wo der kopf ist und von dort den strahl los zu schicken ist ok . Wenn der zu hoch startet über den Kopf mußte aufpassen das zu nicht in einer anderen Etage landest . Zu tief triffst du die Stufe evtl. nicht mehr . wenn du was pickst solltest du den höhen unterscheid ausrechnen und nicht einfach um 1 verschieben . Siehe PickedY |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Pick muss auch nach vorne sein, da er ja wissen will ob vor dem Fuss auf Knöchelhöhe eine Wand ist. Der Boden wird ja durch die Kollision abgedeckt. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Dreamora
Für Wand und Boden reicht doch die normale Collision nur bei Treppen muß er nach helfen das der Spieler angehoben wird . @Mr Hopp Linepick hat auch noch nen Radius was du dir wie nen Zylinder vorstellen kannst der auf dem Boden steht wenn du in Richtung Y pickst . Also Spielerbreite/2 |
||
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mhhh.....hab die angesprochenen Fehler mal geändert, geht aber immer noch net. Hab mal die Treppe ins Archiv geladen (https://www.blitzforum.de/upload/file.php?id=797)
Hier der Code: Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1
SetBuffer BackBuffer() AppTitle("Test") Dim fps(3) objekt=LoadMesh("Treppe.3ds") PositionEntity objekt,0,0,0 EntityType objekt,1 EntityPickMode objekt,2 cam=CreateCamera() PositionEntity cam,0,5,-6 EntityRadius cam,1,3 EntityType cam,2 EntityPickMode cam,1 Collisions 2,1,2,3 light=CreateLight() Repeat Cls TranslateEntity cam,0,-1,0 If KeyDown(17) Then MoveEntity cam, 0, 0, 0.1 If KeyDown(31) Then MoveEntity cam, 0, 0, -0.1 If KeyDown(30) Then MoveEntity cam, -0.1, 0, 0 If KeyDown(32) Then MoveEntity cam, 0.1, 0, 0 RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 MoveMouse 512, 384 UpdateWorld RenderWorld If cam=LinePick(EntityX(cam),EntityY(cam)-1.5,EntityZ(cam),0,0,1) Then TranslateEntity cam,0,1,0 Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs() Flip Until KeyHit(1) End |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Mr Hopp
dann schau nochmal was ich für dich geschrieben habe ... |
||
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nunja....habe ich schon und bin leider immer noch nicht zu einem ergebnis gekommen (entschuldigt meine Dummheit ![]() ![]() |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das wundert mich nicht. Mit tendenz wird dein objekt ja nicht 0.001 gross sein, sprich mit einer Distanz von 1 bist du nicht mal aus dem Objekt raus normalerweise. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Derzeitig hab ich ja kein objekt sondern nur die cam^^ Aber es geht auch weder mit 5,10,20,200....ich glaub ich verstehe die Funktionsweiße von Linepick falsch.
Ich dachte, dass eine virtuelle Linie von x,y,z, nach x+dx,y+dx,z+dx gezogen wird und das erste Objekt, was die Linie berührt, zurückgeliefert wird.....ist es so??? |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Genau
Wobei X,Y,Z in globalen Koordinaten sind, nicht in Objektkoordinaten. (falls du das hast und nutzen willst, einfach erst die lokalen dx,dy,dz durch TFormVektor von Objekt nach 0 jagen) Ich vermute mal das war der Fehler mit dem Pick in Z Richtung. aber mit Picktiefen von 0 .. 1 wirst du nichts sehen, denn per Default ist bei 1 die near clipping plane. Also da wo er stehen bleiben würde siehst du nix mehr. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Autsch das tut weh.....ich hab in der If-Abfrage vergessen, den Code anzupassen....da stand genau das Gegenteil vom erwünschten..... Ich hab nämlich vergessen die Kollision des Players selbst mit der Treppe zu prüfen... *DUMM* ![]() |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group