Hallochen!
Zuerst einmal das, was ich erreichen möchte:
Ich habe im 3D Modus eine Fläche gezeichnet. Ich möchte nun einen Zylinder zeichnen, der genau auf der Fläche anfängt.
D.h unter der Fläche, die ja aufgrund der verschiedene z-Werte an den Ecken schief ist, soll sich kein bisschen vom Zylinder befinden, aber er soll direkt auf der Fläche beginnen, egal auf welcher x- bzw y-Position sich der Zylinder befindet.
Hier ist der Code mit dem ich gedacht habe, dass es funktioniert:
Alles anzeigen
Wo mache ich einen Denkfehler bzw. wie kann man das vielleicht einfacher machen?
Zuerst einmal das, was ich erreichen möchte:
Ich habe im 3D Modus eine Fläche gezeichnet. Ich möchte nun einen Zylinder zeichnen, der genau auf der Fläche anfängt.
D.h unter der Fläche, die ja aufgrund der verschiedene z-Werte an den Ecken schief ist, soll sich kein bisschen vom Zylinder befinden, aber er soll direkt auf der Fläche beginnen, egal auf welcher x- bzw y-Position sich der Zylinder befindet.
Hier ist der Code mit dem ich gedacht habe, dass es funktioniert:
GML-Quellcode
- d3d_set_projection(10,60,20,x1,y1,10,0,0,1)
- draw_set_alpha(1)
- draw_set_color(c_white)
- //Das sollte wohl jedem klar sein...
- d1=point_distance(x1,y1,0,0)
- d2=point_distance(x1,y1,0,20)
- d3=point_distance(x1,y1,20,0)
- d4=point_distance(x1,y1,20,20)
- d_all=d1+d2+d3+d4
- //Hier sollen die Entfernungen zwischen den vier Eckpunkten und dem Punkt (x1|y1) gemessen und später zusammengerechnet werden.
- z1=1
- z2=1
- z3=2
- z4=6
- //Jetzt lege ich die Z-Positionen der vier Ecken fest.
- zz=((z1*d1)+(z2*d2)+(z3*d3)+(z4*d4))/d_all
- //Hier liegt das Problem - denke ich zumindest...
- //Ich wollte jeden Eckpunkt mit seiner Distanz zu (x1|y1) malnehmen und dann durch die Gesamtdistanz teilen.
- //Da müsste doch eigentlich der z-Mittelwert mit Beachtung der Entfernung herauskommen.
- //Der Zylinder verändert seine z-Position aber nur minimal.
- d3d_primitive_begin_texture(pr_trianglestrip,background_get_texture(background0))
- d3d_vertex_texture(0,0,z1,0,0)
- d3d_vertex_texture(0,20,z2,1,0)
- d3d_vertex_texture(20,0,z3,0,1)
- d3d_vertex_texture(20,20,z4,1,1)
- d3d_primitive_end()
- //Hier wird die Fläche gezeichnet.
- d3d_draw_cylinder(x1-1,y1-1,zz,x1+1,y1+1,128,"",0,0,0,5)
- draw_set_color(c_red)
- d3d_draw_cylinder(x1-1,y1-1,0,x1+1,y1+1,128,"",0,0,0,1)
- //Hier der Zylinder mit einem roten Zylinder, mit dem man die genaue Position sehen kann.
Wo mache ich einen Denkfehler bzw. wie kann man das vielleicht einfacher machen?