home *** CD-ROM | disk | FTP | other *** search
/ DarkBasic Professional / DarkBasicPro.iso / data1.cab / Lang_Files_(English) / Help / examples / basic3d / basic3d2-example.dba < prev    next >
Encoding:
Text File  |  2004-09-22  |  20.0 KB  |  679 lines

  1. rem Basic3D Functionality
  2.  
  3. rem Standard Setup Code for all examples
  4. backdrop off : cls : sync on : sync rate 0 : hide mouse
  5. set text font "arial" : set text size 16
  6. set text to bold : set text transparent
  7.  
  8. rem Legacy or New Commands
  9. legacyonly=rnd(1)
  10. if legacyonly=1
  11.  gosub _legacycommands
  12. else
  13.  gosub _newcommands
  14. endif
  15.  
  16. rem End program
  17. end
  18.  
  19. _legacycommands:
  20.  
  21. rem Test loop
  22. do
  23.  
  24. rem Produce random values
  25. ObjectNumber=1+rnd(500000)
  26. Wireframe=rnd(1)
  27. Transparency=rnd(1)
  28. Cull=rnd(1)
  29. Filter=rnd(1)
  30. Light=rnd(1)
  31. Fog=rnd(1)
  32. Ambient=rnd(1)
  33. MeshNumber=1+rnd(5)
  34. TextureNumber=1+rnd(5)
  35. LimbNumber=10
  36. Size=10+rnd(90)
  37. XSize=10+rnd(90)
  38. YSize=10+rnd(90)
  39. ZSize=10+rnd(90)
  40. StartFrame=1+rnd(10)
  41. EndFrame=StartFrame+1+rnd(10)
  42. Speed=50+rnd(50)
  43. QuarterPercent=100/4
  44. ImageNumber=1+rnd(5)
  45. TextureMode=1+rnd(2)
  46. Percentage#=rnd(100)
  47. SecondObject=1+rnd(500000)
  48. TextureMode=1+rnd(2)
  49. MipMode=1+rnd(2)
  50. X=rnd(400)-200
  51. Y=0
  52. Z=rnd(400)
  53. NewX=rnd(400)-200
  54. NewY=0
  55. NewZ=rnd(400)
  56. Velocity=1+rnd(9)
  57. XAngle=rnd(359)
  58. YAngle=rnd(359)
  59. ZAngle=rnd(359)
  60. UValue=rnd(100)/100.0
  61. VValue=rnd(100)/100.0
  62. Scale=50+rnd(50)
  63. XScale=50+rnd(50)
  64. YScale=50+rnd(50)
  65. ZScale=50+rnd(50)
  66. MipmapGeneration=1+rnd(1)
  67.  
  68. rem Try each command group at random
  69. r=r+1 : if r>=4 then r=0
  70. if r=0 then gosub _3dobjects
  71. if r=1 then gosub _3dmotion
  72. if r=2 then gosub _3dcollision
  73. if r=3 then gosub _3dlimbs
  74.  
  75. rem Display data
  76. cls 0
  77. print "BASIC3D EXPRESSION DATA"
  78. print
  79. if object exist(ObjectNumber)=1
  80. if rnd(5)=1
  81.  print "3D OBJECTS"
  82.  print "exist:";object exist(ObjectNumber)
  83.  print "frames:";total object frames(ObjectNumber)
  84.  print "size:";object size(ObjectNumber)
  85.  print "x:";object position x(ObjectNumber)
  86.  print "y:";object position y(ObjectNumber)
  87.  print "z:";object position z(ObjectNumber)
  88.  print "anglex:";object angle x(ObjectNumber)
  89.  print "angley:";object angle y(ObjectNumber)
  90.  print "anglez:";object angle z(ObjectNumber)
  91.  print "sizex:";object size x(ObjectNumber)
  92.  print "sizey:";object size y(ObjectNumber)
  93.  print "sizez:";object size z(ObjectNumber)
  94.  print "visible:";object visible(ObjectNumber)
  95.  print "playing:";object playing(ObjectNumber)
  96.  print "looping:";object looping(ObjectNumber)
  97.  print "frame:";object frame(ObjectNumber)
  98.  print "speed:";object speed(ObjectNumber)
  99.  print "interpolation:";object interpolation(ObjectNumber)
  100.  print "object in screen:";object in screen(ObjectNumber)
  101.  print "object screen x:";object screen x(ObjectNumber)
  102.  print "object screen y:";object screen y(ObjectNumber)
  103.  print
  104. endif
  105. if rnd(5)=1
  106.  print "COLLISION"
  107.  if object exist(SecondObject)=1
  108.   print "object collision:";object collision(ObjectNumber, SecondObject)
  109.   print "object hit:";object hit(ObjectNumber, SecondObject)
  110.  endif
  111.  print "object col radius:";object collision radius(ObjectNumber)
  112.  print "object col center x:";object collision center x(ObjectNumber)
  113.  print "object col center y:";object collision center y(ObjectNumber)
  114.  print "object col center z:";object collision center z(ObjectNumber)
  115.  print "object col x:";get object collision x()
  116.  print "object col y:";get object collision y()
  117.  print "object col z:";get object collision z()
  118.  print "static hit:";get static collision hit( 2,2,2,10,10,10, 3,3,3,11,11,11 )
  119.  print "static col x:";get static collision x()
  120.  print "static col y:";get static collision y()
  121.  print "static col z:";get static collision z()
  122.  print "static line hit:";static line of sight( 0,0,0, 0,0,100, 1, 1 )
  123.  print "static line col x:";static line of sight x()
  124.  print "static line col y:";static line of sight y()
  125.  print "static line col z:";static line of sight z()
  126.  print
  127. endif
  128. if rnd(5)=1
  129.  print "LIMBS"
  130.  print "exist:";limb exist(ObjectNumber, LimbNumber)
  131.  if limb exist(ObjectNumber, LimbNumber)=1
  132.   print "offsetx:";limb offset x(ObjectNumber, LimbNumber)
  133.   print "offsety:";limb offset y(ObjectNumber, LimbNumber)
  134.   print "offsetz:";limb offset z(ObjectNumber, LimbNumber)
  135.   print "anglex:";limb angle x(ObjectNumber, LimbNumber)
  136.   print "angley:";limb angle y(ObjectNumber, LimbNumber)
  137.   print "anglez:";limb angle z(ObjectNumber, LimbNumber)
  138.   print "positionx:";limb position x(ObjectNumber, LimbNumber)
  139.   print "positiony:";limb position y(ObjectNumber, LimbNumber)
  140.   print "positionz:";limb position z(ObjectNumber, LimbNumber)
  141.   print "directionx:";limb direction x(ObjectNumber, LimbNumber)
  142.   print "directiony:";limb direction y(ObjectNumber, LimbNumber)
  143.   print "directionz:";limb direction z(ObjectNumber, LimbNumber)
  144.   print "texture:";limb texture(ObjectNumber, LimbNumber)
  145.   print "visible:";limb visible(ObjectNumber, LimbNumber)
  146.   print "linkvalid:";check limb link(ObjectNumber, LimbNumber)
  147.   print "name$:";limb texture name(ObjectNumber, LimbNumber)
  148.  endif
  149.  print
  150. endif
  151. if rnd(5)=1
  152.  print "MISC"
  153.  print "mesh exist:";mesh exist(MeshIndex)
  154.  print "alphablending available:";alphablending available()
  155.  print "filtering available:";filtering available()
  156.  print "fog available:";fog available()
  157.  print "TnL available:";tnl available()
  158.  print "Polys on nscreen:";statistic(1)
  159.  print
  160. endif
  161. endif
  162.  
  163. rem Delete Object
  164. if object exist(ObjectNumber)=1 then delete object ObjectNumber
  165.  
  166. rem Update screen
  167. sync
  168.  
  169. loop
  170.  
  171. return
  172.  
  173. _3dobjects:
  174.  
  175. rem Load Objects
  176. load object "models\model.x",ObjectNumber
  177. load object "models\model.x",SecondObject
  178.  
  179. rem Load Image for object
  180. load image "iron.jpg",ImageNumber
  181.  
  182. rem Append Object
  183. append object "models\extraanim.x", ObjectNumber, total object frames(ObjectNumber)+1
  184.  
  185. rem Set Object Properties
  186. set object ObjectNumber, Wireframe, Transparency, Cull
  187. set object ObjectNumber, Wireframe, Transparency, Cull, Filter
  188. set object ObjectNumber, Wireframe, Transparency, Cull, Filter, Light
  189. set object ObjectNumber, Wireframe, Transparency, Cull, Filter, Light, Fog
  190. set object ObjectNumber, Wireframe, Transparency, Cull, Filter, Light, Fog, Ambient
  191.  
  192. rem Control Object Animation
  193. play object ObjectNumber
  194. play object ObjectNumber,StartFrame
  195. play object ObjectNumber,StartFrame,EndFrame
  196. loop object ObjectNumber
  197. loop object ObjectNumber,StartFrame
  198. loop object ObjectNumber,StartFrame,EndFrame
  199. stop object ObjectNumber
  200. set object frame ObjectNumber, StartFrame
  201. set object speed ObjectNumber, Speed
  202. set object interpolation ObjectNumber, QuarterPercent
  203.  
  204. rem Control Object Orientation
  205. set object rotation xyz ObjectNumber
  206. set object rotation zyx ObjectNumber
  207.  
  208. rem Object Visuals
  209. hide object ObjectNumber
  210. show object ObjectNumber
  211. color object ObjectNumber, rgb(255,255,0)
  212. scale object ObjectNumber,XSize,YSize,ZSize
  213. texture object ObjectNumber, ImageNumber
  214. set object texture ObjectNumber, TextureMode, MipmapGeneration
  215. scroll object texture ObjectNumber, 0.1, 0.2
  216. scale object texture ObjectNumber, 75, 75
  217. ghost object on ObjectNumber
  218. ghost object off ObjectNumber
  219. fade object ObjectNumber, Percentage#
  220. glue object to limb ObjectNumber, SecondObject, 1
  221. unglue object ObjectNumber
  222. lock object on ObjectNumber
  223. lock object off ObjectNumber
  224. disable object zdepth ObjectNumber
  225. enable object zdepth ObjectNumber
  226.  
  227. rem Load mesh
  228. load mesh "mesh.x",MeshNumber
  229.  
  230. rem Make Primitives
  231. delete object ObjectNumber : make object cube ObjectNumber, Size
  232. delete object ObjectNumber : make object box ObjectNumber, XSize, YSize, ZSize
  233. delete object ObjectNumber : make object cylinder ObjectNumber, Size
  234. delete object ObjectNumber : make object cone ObjectNumber, Size
  235. delete object ObjectNumber : make object plain ObjectNumber, XSize, YSize
  236. delete object ObjectNumber : make object triangle ObjectNumber, 0, 0, 0, 1, 1, 0, 0, 1, 0
  237. delete object ObjectNumber : make object sphere ObjectNumber, Size
  238. delete object ObjectNumber : make object ObjectNumber, MeshNumber, TextureNumber
  239.  
  240. rem Change Mesh In Object
  241. LimbNumber=0
  242. change mesh ObjectNumber, LimbNumber, MeshNumber
  243.  
  244. rem Delete Mesh
  245. delete mesh MeshNumber
  246.  
  247. rem Make Mesh From Object
  248. make mesh from object MeshNumber, ObjectNumber
  249.  
  250. rem Delete second object
  251. delete object SecondObject
  252.  
  253. rem Remove redundant video items
  254. flush video memory
  255.  
  256. return
  257.  
  258. _3dmotion:
  259.  
  260. rem Load objects
  261. load object "model.x",ObjectNumber
  262. load object "model.x",SecondObject
  263.  
  264. rem Adjust model to face correct direction
  265. rotate object ObjectNumber, 270, 0, 0
  266. fix object pivot ObjectNumber
  267.  
  268. rem Control object motion using EULER
  269. position object ObjectNumber, X, Y, Z
  270. rotate object ObjectNumber, XAngle, YAngle, ZAngle
  271. xrotate object ObjectNumber, XAngle
  272. yrotate object ObjectNumber, YAngle
  273. zrotate object ObjectNumber, ZAngle
  274. point object ObjectNumber, NewX, NewY, NewZ
  275. move object ObjectNumber, Velocity
  276.  
  277. rem Control object motion using FREEFLIGHT
  278. turn object left ObjectNumber, Velocity
  279. turn object right ObjectNumber, Velocity
  280. pitch object up ObjectNumber, Velocity
  281. pitch object down ObjectNumber, Velocity
  282. roll object left ObjectNumber, Velocity
  283. roll object right ObjectNumber, Velocity
  284.  
  285. rem Align position and angle with other entities
  286. set object to object orientation ObjectNumber, SecondObject
  287. set object to camera orientation ObjectNumber
  288.  
  289. rem Delete second object
  290. delete object SecondObject
  291.  
  292. return
  293.  
  294. _3dcollision:
  295.  
  296. rem Activate global collision
  297. set global collision on
  298.  
  299. rem Load object
  300. load object "model.x",ObjectNumber
  301.  
  302. rem Deactivate object collision
  303. set object collision off ObjectNumber
  304.  
  305. rem Activate object collision
  306. set object collision on ObjectNumber
  307.  
  308. rem Make new collision box for object
  309. make object collision box ObjectNumber, -50,-50,-50,50,50,50,1
  310.  
  311. rem Delete collision box from object
  312. delete object collision box ObjectNumber
  313.  
  314. rem Set different styles of collision
  315. set object collision to boxes ObjectNumber
  316. set object collision to spheres ObjectNumber
  317. set object collision to polygons ObjectNumber
  318.  
  319. rem Deactivate global collision
  320. set global collision off
  321.  
  322. return
  323.  
  324. _3dlimbs:
  325.  
  326. rem Load object
  327. load object "model.x",ObjectNumber
  328.  
  329. rem Load Image for object
  330. load image "iron.jpg",ImageNumber
  331.  
  332. rem Get details for all object limbs
  333. perform checklist for object limbs ObjectNumber
  334. for c=1 to checklist quantity()
  335.  print checklist string$(c)
  336. next c
  337.  
  338. rem Manipulate single limb of the object
  339. hide limb ObjectNumber, LimbNumber
  340. show limb ObjectNumber, LimbNumber
  341. offset limb ObjectNumber, LimbNumber, 0, 0, 100
  342. rotate limb ObjectNumber, LimbNumber, XAngle, YAngle, ZAngle
  343. scale limb ObjectNumber, LimbNumber, XScale, YScale, ZScale
  344. color limb ObjectNumber, LimbNumber, rgb(0,255,0)
  345. texture limb ObjectNumber, LimbNumber, ImageNumber
  346. scroll limb texture ObjectNumber, LimbNumber, UValue, VValue
  347. scale limb texture ObjectNumber, LimbNumber, XScale, YScale
  348.  
  349. return
  350.  
  351. _newcommands:
  352.  
  353. rem Set starting object numbers
  354. ObjectNumber=1+rnd(49)
  355. SecondObject=51+rnd(49)
  356. ImageNumber=1+rnd(5)
  357. Side=ImageNumber
  358.  
  359. rem Load image
  360. load image "iron.jpg",ImageNumber
  361.  
  362. rem Create a higher quality sphere
  363. make object sphere ObjectNumber,100,5,30
  364. texture object ObjectNumber,ImageNumber
  365.  
  366. rem Test loop
  367. do
  368.  
  369. rem Produce random values
  370. Wireframe=rnd(1)
  371. Transparency=rnd(1)
  372. Cull=rnd(1)
  373. Filter=rnd(1)
  374. Light=rnd(1)
  375. Fog=rnd(1)
  376. Ambient=rnd(1)
  377. VertexShaderNumber=1+rnd(5)
  378.  
  379. rem Try each command group at random
  380. r=r+1 : if r>=5 then r=0
  381. if r=0 then gosub _newobjectcommands
  382. if r=1 then gosub _newtexturecommands
  383. if r=2 then gosub _newvisualcommands
  384. if r=3 then gosub _newshadercommands
  385. if r=4 then gosub _newpixelshadercommands
  386.  
  387. rem Remove any second object
  388. if object exist(SecondObject)=1 then delete object SecondObject
  389.  
  390. rem Display data
  391. s=rnd(2)
  392. cls
  393. print "NEW BASIC3D EXPRESSION DATA (";r;")"
  394. print
  395. if s=0
  396.  print "3D DEVICE DATA"
  397.  print "devicetype:";get device type()
  398.  print "max lights:";get maximum lights()
  399.  print "max tex width:";get maximum texture width()
  400.  print "max tex height:";get maximum texture height()
  401.  print "max volume extent:";get maximum volume extent()
  402.  print "max vertexshader version:";get maximum vertex shader version()
  403.  print "max vertexshader constant:";get maximum vertex shader constants()
  404.  print "max pixelshader version:";get maximum pixel shader version()
  405.  print "max pixelshader value:";get maximum pixel shader value()
  406.  print
  407. endif
  408. if s=1
  409.  print "GENERAL AVAILABILITY FLAGS"
  410.  print "blit sys to local:";blitsystolocal available()
  411.  print "calibrate gamma:";calibrategamma available()
  412.  print "fullscreen gamma:";fullscreengamma available()
  413.  print "render after flip:";renderafterflip available()
  414.  print "render windowed:";renderwindowed available()
  415.  print "tlvertex system memory:";tlvertexsystemmemory available()
  416.  print "tlvertex video memory:";tlvertexvideomemory available()
  417.  print "nonlocal video memory:";nonlocalvideomemory available()
  418.  print "texture system memory:";texturesystemmemory available()
  419.  print "texture video memory:";texturevideomemory available()
  420.  print "fog range:";fogrange available()
  421.  print "fog table:";fogtable available()
  422.  print "fog vertex:";fogvertex available()
  423.  print "wbuffer:";wbuffer available()
  424.  print "wfog:";wfog available()
  425.  print "zbuffer:";zbuffer available()
  426.  print "zfog:";zfog available()
  427.  print
  428. endif
  429. if s=2
  430.  print "TEXTURE AVAILABILITY FLAGS"
  431.  print "alpha:";alpha available()
  432.  print "alpha comparison:";alphacomparison available()
  433.  print "anistropic filtering:";anistropicfiltering available()
  434.  print "antialias:";antialias available()
  435.  print "clip and scale points:";clipandscalepoints available()
  436.  print "clip tlverts:";cliptlverts available()
  437.  print "color perspective:";colorperspective available()
  438.  print "color write enable:";colorwriteenable available()
  439.  print "cubemap:";cubemap available()
  440.  print "cullccw:";cullccw available()
  441.  print "cullcw:";cullcw available()
  442.  print "dither:";dither available()
  443.  print "mipcubemap:";mipcubemap available()
  444.  print "mipmap:";mipmap available()
  445.  print "mipmap lodbias:";mipmaplodbias available()
  446.  print "mipmap volume:";mipmapvolume available()
  447.  print "non power of 2 textures:";nonpowtextures available()
  448.  print "perspective textures:";perspectivetextures available()
  449.  print "projected textures:";projectedtextures available()
  450.  print "seperate texture memories:";seperatetexturememories available()
  451.  print "only square textures:";onlysquaretextures available()
  452.  print "volumemap:";volumemap available()
  453.  print
  454. endif
  455.  
  456. rem Update screen
  457. sync
  458.  
  459. rem Short pause
  460. sleep 1000
  461.  
  462. rem End loop
  463. loop
  464.  
  465. return
  466.  
  467. _newobjectcommands:
  468.  
  469. rem Clone object
  470. clone object ObjectNumber, SecondObject
  471.  
  472. rem Move clone slightly so we can see it
  473. if object exist(SecondObject)=1 then position object SecondObject,50,50,50
  474.  
  475. rem Move against the object angle
  476. move object up ObjectNumber, rnd(25)
  477. move object down ObjectNumber, rnd(25)
  478. move object left ObjectNumber, rnd(25)
  479. move object right ObjectNumber, rnd(25)
  480.  
  481. rem Adjust the collision radius of the object
  482. set object radius ObjectNumber, 50
  483.  
  484. return
  485.  
  486. _newtexturecommands:
  487.  
  488. rem Apply a texturing style
  489. set light mapping on ObjectNumber, ImageNumber
  490. set cube mapping on ObjectNumber, Side, Side, Side, Side, Side, Side
  491. set sphere mapping on ObjectNumber, ImageNumber
  492. set detail mapping on ObjectNumber, ImageNumber
  493. set blend mapping on ObjectNumber, ImageNumber, 10
  494. set bump mapping on ObjectNumber, ImageNumber
  495. set cartoon shading on ObjectNumber, ImageNumber, ImageNumber
  496.  
  497. return
  498.  
  499. _newvisualcommands:
  500.  
  501. rem Adjust visual properties of the object
  502. set object wireframe ObjectNumber, Wireframe
  503. set object transparency ObjectNumber, Transparency
  504. set object cull ObjectNumber, Cull
  505. set object filter ObjectNumber, Filter
  506. set object light ObjectNumber, Light
  507. set object fog ObjectNumber, Fog
  508. set object ambient ObjectNumber, Ambient
  509.  
  510. return
  511.  
  512. _newshadercommands:
  513.  
  514. rem Constants for vertex shader
  515. #constant CSCALE          1
  516. #constant CTRANSLATION    2
  517. #constant CXROTATE        3
  518. #constant CYROTATE        4
  519. #constant CZROTATE        5
  520. #constant CROTATION       6
  521. #constant CWORLD          7
  522. #constant CVIEW           8
  523. #constant CPROJECTION     9
  524. #constant CTEMP           10
  525. #constant CLIGHT          11
  526. #constant CDEGTORAD       ( 3.14 / 180.0 )
  527.  
  528. rem Provide vertex shader with stream count
  529. set vertex shader streamcount VertexShaderNumber, 4
  530.  
  531. rem Provide vertex shader with stream
  532. VSDT_FLOAT2=0x01 : VSDT_FLOAT3=0x02 : VSDT_D3DCOLOR=0x04
  533. VSDE_POSITION=0 : VSDE_NORMAL=3 : VSDE_DIFFUSE=5 : VSDE_TEXCOORD0=7
  534. set vertex shader stream VertexShaderNumber, 1, VSDE_POSITION, VSDT_FLOAT3
  535. set vertex shader stream VertexShaderNumber, 2, VSDE_NORMAL, VSDT_FLOAT3
  536. set vertex shader stream VertexShaderNumber, 3, VSDE_DIFFUSE, VSDT_D3DCOLOR
  537. set vertex shader stream VertexShaderNumber, 4, VSDE_TEXCOORD0, VSDT_FLOAT2
  538.  
  539. rem Create a vertex shader from a text file
  540. create vertex shader from file VertexShaderNumber, "vshader.vsh"
  541.  
  542. rem Make simple object
  543. if object exist(ObjectNumber)=1 then delete object ObjectNumber
  544. make object sphere ObjectNumber,100
  545.  
  546. rem Convert object to correct mesh format
  547. FVF_XYZ=0x002 : FVF_NORMAL=0x010 : FVF_DIFFUSE=0x040 : FVF_TEX1=0x100
  548. FVF_FINAL=D3DFVF_XYZ || D3DFVF_NORMAL || D3DFVF_DIFFUSE || D3DFVF_TEX1
  549. convert object fvf ObjectNumber,FVF_FINAL
  550.  
  551. rem Check if vertex shader was created
  552. if vertex shader exist(VertexShaderNumber)=1
  553.  
  554.  rem Apply vertex shader to object
  555.  set vertex shader on ObjectNumber, VertexShaderNumber
  556.  
  557.  rem Create required matrices
  558.  r=make matrix4(CVIEW)
  559.  r=make matrix4(CPROJECTION)
  560.  r=make matrix4(CSCALE)
  561.  r=make matrix4(CTRANSLATION)
  562.  r=make matrix4(CXROTATE)
  563.  r=make matrix4(CYROTATE)
  564.  r=make matrix4(CZROTATE)
  565.  r=make matrix4(CROTATION)
  566.  r=make matrix4(CWORLD)
  567.  r=make matrix4(CTEMP)
  568.  
  569.  rem required light vector
  570.  r=make vector3(CLIGHT)
  571.  
  572.  rem setup camera and light vector position
  573.  sync on : position camera 0,0,-500
  574.  set vector3 CLIGHT,0,0,-500
  575.  
  576.  rem Simple loop
  577.  while mouseclick()=0
  578.  
  579.   rem get view and projection matrices
  580.   view matrix4 CVIEW
  581.   projection matrix4 CPROJECTION
  582.  
  583.   rem setup a scale matrix
  584.   scale matrix4 CSCALE, 2.0, 2.0, 2.0
  585.  
  586.   rem now setup the position
  587.   translate matrix4 CTRANSLATION, 0.0, 10.0, 0.0
  588.  
  589.   rem setup rotation
  590.   rotate x matrix4 CXROTATE, 0.0 * CDEGTORAD
  591.   rotate y matrix4 CYROTATE, 0.0 * CDEGTORAD
  592.   rotate z matrix4 CZROTATE, 45.0 * CDEGTORAD
  593.  
  594.   rem multiply all 3 rotation matrices together
  595.   multiply matrix4 CROTATION, CXROTATE, CYROTATE
  596.   multiply matrix4 CROTATION, CROTATION, CZROTATE
  597.  
  598.   rem multiply all final matrices
  599.   multiply matrix4 CTEMP,  CROTATION, CSCALE
  600.   multiply matrix4 CWORLD, CTEMP,     CSCALE
  601.   multiply matrix4 CWORLD, CWORLD,    CVIEW
  602.   multiply matrix4 CWORLD, CWORLD,    CPROJECTION
  603.  
  604.   rem transpose the matrix
  605.   transpose matrix4 CWORLD, CWORLD
  606.  
  607.   rem we send the light vector3 to the vertex shader
  608.   set vertex shader vector VertexShaderNumber, 4, CLIGHT, 4
  609.  
  610.   rem this is an important part รป we send the world matrix to the vertex shader
  611.   set vertex shader matrix VertexShaderNumber, 0, CWORLD, 4
  612.  
  613.   rem camera look
  614.   rotate camera camera angle x()+mousemovey(),camera angle y()+mousemovex(),0
  615.  
  616.   rem update screen
  617.   sync
  618.  
  619.  rem end loop
  620.  endwhile
  621.  
  622.  rem Deactivate vertex shader of the object
  623.  set vertex shader off ObjectNumber
  624.  
  625.  rem Delete a vertex shader
  626.  delete vertex shader VertexShaderNumber
  627.  
  628. endif
  629.  
  630. return
  631.  
  632. _newpixelshadercommands:
  633.  
  634. rem Create an object
  635. if object exist(1)=1 then delete object 1
  636. make object sphere 1,10
  637.  
  638. rem If Pixel Shaders supported
  639. if get maximum pixel shader version()>0
  640.  
  641.  rem Create a pixel shader from a text file
  642.  create pixel shader from file PixelShaderNumber, "pixelshader.psh"
  643.  
  644.  rem Provide pixel shader with a texture
  645.  ImageNumber=1
  646.  load image "face.bmp",ImageNumber
  647.  set pixel shader texture PixelShaderNumber, 0, ImageNumber
  648.  
  649.  rem Check if pixel shader was created
  650.  if pixel shader exist(PixelShaderNumber)=1
  651.  
  652.   rem Apply pixel shader to object
  653.   set pixel shader on ObjectNumber, PixelShaderNumber
  654.  
  655.  endif
  656.  
  657.  rem Main loop
  658.  while mouseclick()<>2
  659.   set cursor 0,0 : print "Press Right Mouse Button To Exit"
  660.  endwhile
  661.  
  662.  rem Check if pixel shader was created
  663.  if pixel shader exist(PixelShaderNumber)=1
  664.  
  665.   rem Deactivate pixel shader of the object
  666.   set pixel shader off ObjectNumber
  667.  
  668.   rem Delete a pixel shader
  669.   delete pixel shader PixelShaderNumber
  670.  
  671.  endif
  672.  
  673. else
  674.  print "No Pixel Shader Support - Press Key" : wait key
  675. endif
  676.  
  677. return
  678.  
  679.