plot 3d to 2d
Blitz3D Forums/Blitz3D Beginners Area/plot 3d to 2d
| ||
hello all,. i have an array of 3d points(xyz) that i want to plot to the screen(xy) and then rotate the plotted object like those old amiga demos..can anyone help me out with some source to get it working..Thanks. |
| ||
You might have samles in your /samples/Blitz 2D samples/ directory called 3ddotball.bb and 3dwireframe.bb. They can be easilly modified to get you started... Andy |
| ||
gahh..didnt even think to look..thanks |
| ||
had a look but cant find those files..dont seem to be in the code archives either.any ideas where i can get them. thanks. |
| ||
This is the dot ball one ..; ***************************** ; * DEPTH COLORED 3D DOT BALL * ; ***************************** ; * CODING BY TRACER * ; ***************************** dots_in_ball = 1440 ; How many dots are in the ball? ; Globals for the 3d. Global numpoints = dots_in_ball ; Number of points in the point table. Global distance = 400 ; Needed for perspective. Global vx# ; X location. Global vy# ; Y location. Global vz# ; Z location. ; Arrays used by 3d code. Dim points(numpoints, 3) ; Holds the point locations of the game over 3d. Graphics 640,480 SetBuffer BackBuffer() ; make points on the surface of a sphere ; calculation to make a sphere: ; x = cos(theta) * cos(phi) ; y = cos(theta) * sin(phi) ; z = sin(theta) ; where theta = -90 to 90 ; and phi = 0 to 360 For t= 1 To dots_in_ball xd = Rnd(-90,90) x0 = (Cos(xd) * 10) * (Cos(t) * 10) y0 = (Cos(xd) * 10) * (Sin(t) * 10) z0 = Sin(xd) * 100 points(t,1) = x0 points(t,2) = y0 points(t,3) = z0 Next ; Loop till esc is pressed. While Not KeyDown(1) threed() ; Call the threed thing. Color 255,255,255 Text 0,0,"Depth Colored Real 3D Dot Ball" dummy = MouseX() ; Removes the mouse from fullscreen. Flip ; Flip the screen. Cls ; Clear the screen. Wend Function threed() vx# = vx# + 0.5 ; X rotation speed of ball. vy# = vy# + 0.5 ; Y rotation speed of ball. vz# = vz# + 0.5 ; Z rotation speed of ball. For n = 1 To numpoints x3d = points(n, 1) y3d = points(n, 2) z3d = points(n, 3) ty# = ((y3d * Cos(vx#)) - (z3d * Sin(vx#))) tz# = ((y3d * Sin(vx#)) + (z3d * Cos(vx#))) tx# = ((x3d * Cos(vy#)) - (tz# * Sin(vy#))) tz# = ((x3d * Sin(vy#)) + (tz# * Cos(vy#))) ox# = tx# tx# = ((tx# * Cos(vz#)) - (ty# * Sin(vz#))) ty# = ((ox# * Sin(vz#)) + (ty# * Cos(vz#))) nx = Int(512 * (tx#) / (distance - (tz#))) + 320 ny = Int(240 - (512 * ty#) / (distance - (tz#))) setcolor(tz#) Rect nx,ny,1,1 Next End Function ; This function looks at the z-value of the pixel ; and sets the color accoordingly. Function setcolor(t#) If t# <= 100 And t# >= 75 Color 250,250,250 EndIf If t# <= 75 And t# >= 50 Color 225,225,225 EndIf If t# <= 50 And t# >= 25 Color 200,200,200 EndIf If t# <= 25 And t# >= 0 Color 175,175,175 EndIf If t# <= 0 And t# >= -25 Color 150,150,150 EndIf If t# <= -25 And t# >= -50 Color 125,125,125 EndIf If t# <= -50 And t# >= -75 Color 100,100,100 EndIf If t# <= -75 And t# >= -100 Color 50,50,50 EndIf End Function |
| ||
thats nice.should be able to work it out from here.thanks |
| ||
another question. vx# = vx# + 0.5 ; X rotation speed of ball. vy# = vy# + 0.5 ; Y rotation speed of ball. vz# = vz# + 0.5 ; z rotation speed of ball. i cant seem to make the ball rotate on the y axis. if i rem vy,vz the ball spins on x. if i rem out vx,vy ball spins on z. but if i rem vx,vz ball is stationary. I really need to be able to rotate independently on all 3 axes. Is this possible? |
| ||
This is the other example, which is much better to learn from if you wish to make wireframe graphics... I actually modified this into a flight sim complete with an aircraft carrier you could land on and buildings, while learning B2D... I had only heard of Blitz on the darkbasic forum, so when a friend of mine bought it, I went over to have a look. I started playing around with Tracers 3D demos and then I just had to go buy Blitz... EDIT: In reference to your problem, it works perfectly here! ; ********************************* ; * 3D WIREFRAME GRAPHICS EXAMPLE * ; ********************************* ; * Coding by: Tracer * ; ********************************* ; * Coded as an example program * ; * for the Blitz CD. * ;********************************** Graphics 640,480 SetBuffer BackBuffer() Global numpoints = 27 ; Number of points in the point table. Global numconn = 26 ; Number of connections in the connect table. Global distance = 400 ; Needed for perspective. Global vx# ; X location. Global vy# ; Y location. Global vz# ; Z location. ; Arrays used by 3d code. Dim points(numpoints, 3) ; Holds the point locations of the game over 3d. Dim rotated(numpoints, 2) ; Holds rotated points for the 3d. Dim connect(numconn, 2) ; Holds the connections of the 3d. ; Read data for 3d. Restore points For n = 1 To numpoints Read x3d, y3d, z3d points(n, 1) = x3d points(n, 2) = y3d points(n, 3) = z3d Next Restore conns For n = 1 To numconn Read a3d, b3d connect(n, 1) = a3d connect(n, 2) = b3d Next While Not KeyDown(1) threed() Flip Cls Wend ; 3D calculations mayhem. ; Basically it calculates the points in 3d ; and connects these points using the ; connections table. Function threed() vx# = vx# + 0.5 vy# = vy# + 0.5 vz# = vz# + 0.5 For n = 1 To numpoints x3d = points(n, 1) y3d = points(n, 2) z3d = points(n, 3) ty# = ((y3d * Cos(vx#)) - (z3d * Sin(vx#))) tz# = ((y3d * Sin(vx#)) + (z3d * Cos(vx#))) tx# = ((x3d * Cos(vy#)) - (tz# * Sin(vy#))) tz# = ((x3d * Sin(vy#)) + (tz# * Cos(vy#))) ox# = tx# tx# = ((tx# * Cos(vz#)) - (ty# * Sin(vz#))) ty# = ((ox# * Sin(vz#)) + (ty# * Cos(vz#))) nx = Int(512 * (tx#) / (distance - (tz#))) + 320 ny = Int(240 - (512 * ty#) / (distance - (tz#))) rotated(n, 1) = nx rotated(n, 2) = ny Next For n = 1 To numconn Color 255,255,255 Line rotated(connect(n, 1), 1), rotated(connect(n, 1), 2),rotated(connect(n, 2), 1), rotated(connect(n, 2), 2) Next End Function ; All the data for the 3d game over.. lots of work to make :) .points ; Points table ; X, Y, Z Data -100, 50, 50 Data 100, 50, 50 Data 100,-50, 50 Data -100,-50, 50 Data -100, 50,-50 Data 100, 50,-50 Data 100,-50,-50 Data -100,-50,-50 Data 0,-25, 0 Data 0, 25, 0 Data -35,-25, 0 Data -35, 25, 0 Data -5,-25, 0 Data 5, 25, 0 Data 35, 25, 0 Data 20, 25, 0 Data 20,-25, 0 Data -70, 25, 0 Data -70,-25, 0 Data -50, 25, 0 Data -50, 0, 0 Data -40, 0, 0 Data -40,-25, 0 Data 40, 25, 0 Data 70, 25, 0 Data 40,-25, 0 Data 70,-25, 0 .conns ; Connections (From,To, From,To, ..) Data 1,2,2,3,3,4,4,1 Data 5,6,6,7,7,8,8,5 Data 1,5,2,6,3,7,4,8 Data 9,10 Data 11,12,11,13 Data 14,15,16,17 Data 18,19,18,20,20,21,21,22,22,23,23,19 Data 24,25,26,27,25,26 |