Hi,I don't have XNA installed, but from glancing at your code:device is the parameter for an anonymoius function that is out of scope in the place you're trying to use it. Did you misplace the closing parenthesis of '(fun device -> draw device Color.Black)'?scene is a type (note that a naming convention for types is that they start with uppercase, "Scene"). You should provide an instance of that type instead.cheers,Kurt
I fixed the typo with Scene.
On page 192-193, I get a problem with:
...
let rec draw (device : Device) color = function
| Triangles tris ->
Array.concat (List.map (triangle color) tris)
|> drawTriangles device
| Color(color, scene) -> draw device color scene
| Transform(m, scene) -> transform device color m draw scene
| Group ts -> List.iter (draw device color) ts
let printer scene =
let thread =
new System.Threading.Thread(fun () ->
(fun device -> draw device Color.Black scene)
|> show3D
|> makeViewer "F# Visualization"
|> Application.Run)
thread.SetApartmentState(Threading.ApartmentState.STA)
thread.Start()
"<scene>"
//fsi.AddPrinter(printer)
//Triangles [ vec(-1.0, -1.0, 0.0),
// vec(0.0, 1.0, -1.0),
// vec(1.0, -1.0, 0.0) ]
I don't what know the FSI is supposed to do.
fsi is only defined in an F# Interactive window. In this case, the code seems to add a pretty-printer for Scene types. If you're using this in a console application of some sort, you should probably call the printer function yourself for whatever scene you're trying to show.Kurt
Thank-you.
Topic tags
- f# × 3705
- websharper × 1897
- compiler × 286
- functional × 201
- ui next × 139
- c# × 121
- classes × 97
- web × 97
- .net × 84
- book × 84
- async × 76
- ui.next × 67
- bug × 54
- core × 49
- website × 49
- server × 45
- parallel × 43
- ui × 43
- enhancement × 41
- parsing × 41
- testing × 41
- trywebsharper × 41
- typescript × 37
- html × 35
- javascript × 35
- owin × 35
- asynchronous × 30
- monad × 28
- ocaml × 28
- tutorial × 27
- warp × 27
- haskell × 26
- sitelet × 25
- linq × 22
- workflows × 22
- wpf × 20
- fpish × 19
- introduction × 19
- silverlight × 19
- sitelets × 19
- monodevelop × 17
- rpc × 17
- suave × 17
- piglets × 16
- collections × 15
- feature request × 15
- jquery × 15
- templates × 15
- getting started × 14
- pipeline × 14
- kendoui × 13
- reactive × 12
- 4.1.0.171 × 11
- monads × 11
- opinion × 10
- 4.0.190.100-rc × 9
- deployment × 9
- fixed × 9
- formlets × 9
- in × 9
- json × 9
- plugin × 9
- proposal × 9
- scheme × 9
- solid × 9
- basics × 8
- concurrent × 8
- highcharts × 8
- how-to × 8
- python × 8
- 4.1.1.175 × 7
- complexity × 7
- documentation × 7
- visual studio × 7
- 4.1.2.178 × 6
- lisp × 6
- real-world × 6
- released in 4.0.192.103-rc × 6
- remoting × 6
- resources × 6
- scala × 6
- websharper ui.next × 6
- workshop × 6
- xaml × 6
- 4.0.193.110 × 5
- 4.2.3.236 × 5
- aspnetmvc × 5
- authentication × 5
- azure × 5
- bootstrap × 5
- conference × 5
- dsl × 5
- formlet × 5
- java × 5
- list × 5
- metaprogramming × 5
- ml × 5
- released in Zafir.4.0.188.91-beta10 × 5
- sql × 5
- visualstudio × 5
- websharper.forms × 5
- zafir × 5
- 4.0.192.106 × 4
- 4.0.195.127 × 4
- 4.1.0.38 × 4
- 4.2.1.86 × 4
- 4.2.6.118 × 4
- css × 4
- example × 4
- extensions × 4
- fsi × 4
- fsx × 4
- html5 × 4
- jqueryui × 4
- lift × 4
- reflection × 4
- remote × 4
- rest × 4
- spa × 4
- teaching × 4
- template × 4
- websocket × 4
- wontfix × 4
- 4.0.196.147 × 3
- 4.1.0.34 × 3
- 4.1.6.207 × 3
- 4.2.1.223-beta × 3
- 4.2.11.258 × 3
- 4.2.4.114 × 3
- 4.2.4.247 × 3
- 4.2.5.115 × 3
- 4.2.6.253 × 3
- 4.2.9.256 × 3
- ajax × 3
- alt.net × 3
- aml × 3
- asp.net mvc × 3
- canvas × 3
- cloudsharper × 3
- compilation × 3
- database × 3
- erlang × 3
- events × 3
- extension × 3
- file upload × 3
- forums × 3
- inline × 3
- issue × 3
- kendo × 3
- macro × 3
- mono × 3
- msbuild × 3
- mvc × 3
- pattern × 3
- piglet × 3
- released in Zafir.4.0.187.90-beta10 × 3
- svg × 3
- type provider × 3
- view × 3
- 4.1.1.64 × 2
- 4.1.5.203 × 2
- 4.1.7.232 × 2
- 4.2.10.257 × 2
- 4.2.3.111 × 2
- 4.2.5.249 × 2
- android × 2
- asp.net × 2
- beginner × 2
- blog × 2
- chart × 2
- client × 2
- client server app × 2
- clojure × 2
- computation expressions × 2
- constructor × 2
- corporate × 2
- courses × 2
- cufp × 2
- d3 × 2
- debugging × 2
- direct × 2
- discriminated union × 2
- docs × 2
- elm × 2
- endpoint × 2
- endpoints × 2
- enterprise × 2
- entity framework × 2
- event × 2
- f# interactive × 2
- fable × 2
- flowlet × 2
- formdata × 2
- forms × 2
- fsc × 2
- google maps × 2
- hosting × 2
- http × 2
- https × 2
- iis 8.0 × 2
- install × 2
- interactive × 2
- interface × 2
- iphone × 2
- iteratee × 2
- jobs × 2
- jquery mobile × 2
- keynote × 2
- lens × 2
- lenses × 2
- linux × 2
- listmodel × 2
- mac × 2
- numeric × 2
- oauth × 2
- obfuscation × 2
- offline × 2
- oop × 2
- osx × 2
- packaging × 2
- pattern matching × 2
- performance × 2
- pipelines × 2
- q&a × 2
- quotation × 2
- reference × 2
- released in Zafir.4.0.185.88-beta10 × 2
- rx × 2
- script × 2
- security × 2
- self host × 2
- seq × 2
- sockets × 2
- stm × 2
- tcp × 2
- trie × 2
- tutorials × 2
- type × 2
- url × 2
- var × 2
- websharper.charting × 2
- websharper4 × 2
- websockets × 2
- wig × 2
- xna × 2
- zh × 2
- .net interop × 1
- 2012 × 1
- 4.0.194.126 × 1
- 4.1.3.184 × 1
- 4.1.4.189 × 1
- 4.2.0.214-beta × 1
- 4.2.12.259 × 1
- 4.2.2.231-beta × 1
- 4.2.8.255 × 1
- Canvas Sample Example × 1
- DynamicStyle Animated Style × 1
- Fixed in 4.0.190.100-rc × 1
- Released in Zafir.UI.Next.4.0.169.79-beta10 × 1
- SvgDynamicAttribute × 1
- WebComponent × 1
- abstract class × 1
- accumulator × 1
- active pattern × 1
- actor × 1
- addin × 1
- agents × 1
- aggregation × 1
- agile × 1
- alter session × 1
- animation × 1
- anonymous object × 1
- apache × 1
- api × 1
- appcelerator × 1
- architecture × 1
- array × 1
- arrays × 1
- asp.net 4.5 × 1
- asp.net core × 1
- asp.net integration × 1
- asp.net mvc 4 × 1
- asp.net web api × 1
- aspnet × 1
- ast × 1
- attributes × 1
- authorization × 1
- b-tree × 1
- back button × 1
- badimageformatexception × 1
- bash script × 1
- batching × 1
- binding-vars × 1
- bistro × 1
- body × 1
- bundle × 1
- camtasia studio × 1
- cas protocol × 1
- charts × 1
- clarity × 1
- class × 1
- cli × 1
- clipboard × 1
- clojurescript × 1
- closures × 1
- cloud × 1
- cms × 1
- coding diacritics × 1
- color highlighting × 1
- color zones × 1
- combinator × 1
- combinators × 1
- compile × 1
- compile code on server × 1
- config × 1
- confirm × 1
- content × 1
- context × 1
- context.usersession × 1
- continuation-passing style × 1
- coords × 1
- cordova × 1
- cors × 1
- coursera × 1
- cross-domain × 1
- csla × 1
- current_schema × 1
- custom content × 1
- data × 1
- data grid × 1
- datetime × 1
- debug × 1
- declarative × 1
- delete × 1
- devexpress × 1
- dhtmlx × 1
- dictionary × 1
- directattribute × 1
- disqus × 1
- distance × 1
- do binding × 1
- doc elt ui.next upgrade × 1
- docker × 1
- dojo × 1
- dol × 1
- dom × 1
- domain × 1
- du × 1
- duf-101 × 1
- dynamic × 1
- eastern language × 1
- eclipse × 1
- edsl × 1
- em algorithm × 1
- emacs × 1
- emotion × 1
- enums × 1
- error × 1
- etw × 1
- euclidean × 1
- eventhandlerlist × 1
- examples × 1
- ext js × 1
- extension methods × 1
- extra × 1
- facet pattern × 1
- failed to translate × 1
- fake × 1
- fantomas × 1
- fear × 1
- float × 1
- form × 1
- form-data × 1
- forum × 1
- fp × 1
- frank × 1
- fsdoc × 1
- fsharp × 1
- fsharp.core × 1
- fsharp.powerpack × 1
- fsharpx × 1
- fsunit × 1
- function × 1
- functional style × 1
- game × 1
- games × 1
- gc × 1
- generic × 1
- geometry × 1
- getlastwin32error × 1
- getting-started × 1
- google × 1
- google.maps × 1
- grid × 1
- group × 1
- guide × 1
- hash × 1
- headers × 1
- hello world example × 1
- heroku × 1
- highchart × 1
- history × 1
- how to × 1
- html-templating × 1
- http405 × 1
- httpcontext × 1
- hubfs × 1
- i18n × 1
- ie 8 × 1
- if-doc × 1
- iis × 1
- image × 1
- images × 1
- inheritance × 1
- initialize × 1
- input × 1
- install "visual studio" × 1
- installer × 1
- int64 × 1
- interfaces × 1
- internet explorer × 1
- interop × 1
- interpreter × 1
- io × 1
- iobservable × 1
- ios × 1
- iot × 1
- ipad × 1
- isomorphic × 1
- javascript optimization × 1
- javascript semanticui resources × 1
- jquery-plugin × 1
- jquery-ui × 1
- jquery-ui-datepicker × 1
- js × 1
- kendo datasource × 1
- kendochart × 1
- kendoui compiler × 1
- knockout × 1
- l10n × 1
- learning × 1
- library × 1
- libs × 1
- license × 1
- licensing × 1
- lineserieszonescfg × 1
- local setting × 1
- localization × 1
- logging × 1
- loop × 1
- macros × 1
- mailboxprocessor × 1
- mapping × 1
- maps × 1
- markerclusterer × 1
- markup × 1
- marshal × 1
- math × 1
- mathjax × 1
- message × 1
- message passing × 1
- message-passing × 1
- meta × 1
- metro style × 1
- micro orm × 1
- minimum-requirements × 1
- mix × 1
- mobile installation × 1
- mod_mono × 1
- modal × 1
- module × 1
- mouseevent × 1
- mouseposition × 1
- multidimensional × 1
- multiline × 1
- multithreading × 1
- mysql × 1
- mysqlclient × 1
- nancy × 1
- native × 1
- nested × 1
- nested loops × 1
- node × 1
- nunit × 1
- object relation mapper × 1
- object-oriented × 1
- om × 1
- onboarding × 1
- onclick × 1
- optimization × 1
- option × 1
- orm × 1
- os x × 1
- output-path × 1
- override × 1
- paper × 1
- parameter × 1
- persistence × 1
- persistent data structure × 1
- phonegap × 1
- pola × 1
- post × 1
- powerpack × 1
- prefix tree × 1
- principle of least authority × 1
- privacy × 1
- private × 1
- profile × 1
- programming × 1
- project × 1
- project euler × 1
- projekt_feladat × 1
- protected × 1
- provider × 1
- proxy × 1
- ptvs × 1
- public × 1
- pure f# × 1
- purescript × 1
- qna × 1
- quant × 1
- query sitelet × 1
- question × 1
- quotations × 1
- range × 1
- raphael × 1
- razor × 1
- rc × 1
- reactjs × 1
- real-time × 1
- ref × 1
- region × 1
- released in 4.0.190.100-rc × 1
- reporting × 1
- responsive design × 1
- rest api × 1
- rest sitelet × 1
- restful × 1
- round table × 1
- router × 1
- routing × 1
- rpc reverseproxy × 1
- runtime × 1
- sales × 1
- sample × 1
- sampleapp × 1
- scriptcs × 1
- scripting × 1
- search × 1
- self hosted × 1
- semanticui × 1
- sequence × 1
- serialisation × 1
- service × 1
- session-state × 1
- sharepoint × 1
- signals × 1
- sitelet website × 1
- sitelet.protect × 1
- sitlets × 1
- slickgrid × 1
- source code × 1
- sqlentityconnection × 1
- ssl × 1
- standards × 1
- static content × 1
- stickynotes × 1
- streamreader × 1
- stress × 1
- strong name × 1
- structures × 1
- submitbutton × 1
- subscribe × 1
- svg example html5 websharper.ui.next × 1
- sweetalert × 1
- system.datetime × 1
- system.reflection.targetinvocationexception × 1
- table storage × 1
- targets × 1
- tdd × 1
- templates ui.next × 1
- templating × 1
- text parsing × 1
- three.js × 1
- time travel × 1
- tls × 1
- tooltip × 1
- tracing × 1
- tsunamiide × 1
- turkish × 1
- twitter-bootstrap × 1
- type erasure × 1
- type inference × 1
- type providers × 1
- type-providers × 1
- typeprovider × 1
- ui next forms × 1
- ui-next × 1
- ui.next jqueryui × 1
- ui.next charting × 1
- ui.next formlets × 1
- ui.next forms × 1
- ui.next suave visualstudio × 1
- ui.next templating × 1
- unicode × 1
- unittest client × 1
- upload × 1
- usersession × 1
- validation × 1
- vb × 1
- vb.net × 1
- vector × 1
- view.map × 1
- visal studio × 1
- visual f# × 1
- visual studio 11 × 1
- visual studio 2012 × 1
- visual studio shell × 1
- vs2017 compiler zafir × 1
- vsix × 1
- web api × 1
- web-scraping × 1
- webapi × 1
- webcomponents × 1
- webforms × 1
- webgl × 1
- webrtc × 1
- webshaper × 1
- websharper async × 1
- websharper codemirror × 1
- websharper f# google × 1
- websharper forms × 1
- websharper reactive × 1
- websharper rpc × 1
- websharper sitelets routing × 1
- websharper warp × 1
- websharper-interface-generator × 1
- websharper.chartsjs × 1
- websharper.com × 1
- websharper.exe × 1
- websharper.owin × 1
- websharper.ui.next × 1
- websharper.ui.next jquery × 1
- websockets iis × 1
- why-websharper × 1
- windows 7 × 1
- windows 8 × 1
- windows-phone × 1
- winrt × 1
- www.grabbitmedia.com × 1
- xamarin × 1
- xml × 1
- yeoman × 1
- yield × 1
- zafir beta × 1
- zafir websharper4 × 1
- zarovizsga × 1
![]() |
Copyright (c) 2011-2012 IntelliFactory. All rights reserved. Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us | Terms of Use | Privacy Policy | Cookie Policy |
Built with WebSharper |
When I tried this F# Interactive, no problem. When I tried this F# Compile, I get an errors:
Error 1 Type mismatch. Expecting a Device -> 'a -> (Device -> scene -> unit) -> 'b but given a Device -> unit. The type ''a -> (Device -> scene -> unit) -> 'b' does not match the type 'unit'.
Error 2 The value or constructor 'scene' is not defined.
Error 3 The value or constructor 'device' is not defined.
#light
open System
open System.Drawing
open System.Windows.Forms
open Microsoft.DirectX
open Microsoft.DirectX.Direct3D
let presentParams() =
let p = new PresentParameters()
p.Windowed <- true
p.SwapEffect <- SwapEffect.Discard
p.EnableAutoDepthStencil <- true
p.AutoDepthStencilFormat <- DepthFormat.D24S8
[| p |]
let makeDevice (form : #Form) =
let dtype = DeviceType.Hardware
let flags = CreateFlags.SoftwareVertexProcessing
new Device(0, dtype, form, flags, presentParams())
type Viewer() = class
inherit Form()
override form.OnPaintBackground _ = ()
end
let paint (form : #Form) render (device : Device) _ =
try
device.TestCooperativeLevel()
device.BeginScene()
render device
device.EndScene()
device.Present()
form.Invalidate()
with
| :? DeviceLostException -> ()
| :? DeviceNotResetException -> device.Reset(presentParams())
let makeViewer title render =
let form = new Viewer(StartPosition=FormStartPosition.CenterScreen,
Text=title, Visible=true)
form.MinimumSize <- form.Size
let device = makeDevice form
form.Paint.Add(paint form render device)
form.Resize.Add(fun _ -> form.Invalidate())
form.KeyDown.Add(fun e -> if e.KeyCode = Keys.Escape then form.Close())
form.Invalidate()
form
let render (device: Device) =
let target = ClearFlags.Target
device.Clear(target, Color.Coral, 1.0f, 0)
//let form = makeViewer "Blank" render
let allBuffers =
ClearFlags.Target ||| ClearFlags.ZBuffer ||| ClearFlags.Stencil
let vec(x, y, z) =
let f = Float32.of_float
new Vector3(f x, f y, f z)
type Vertex = CustomVertex.PositionNormalColored
let vertex (c : Color) (nx, ny, nz) (x, y, z) =
let c = c.ToArgb()
let f = Float32.of_float
new Vertex(f x, f y, f z, f nx, f ny, f nz, c)
let vertex2 color (x, y) =
vertex color (0.0, 0.0, -1.0) (x, y, 0.0)
let show2D render (device : Device) =
let near, far = -1.0f, 1.0f
let vp = device.Viewport
let w, h = float32 vp.Width, float32 vp.Height
device.Transform.Projection <- Matrix.OrthoLH(w, h, near, far)
device.Clear(allBuffers, Color.White, far, 0)
device.RenderState.Lighting <- false
device.RenderState.CullMode <- Cull.None
device.RenderState.ZBufferEnable <- false
render device
let drawTriangles (device : Device) (vertex : Vertex array) =
if vertex <> [||] then
device.VertexFormat <- Vertex.Format
let prim = PrimitiveType.TriangleList
let n = Array.length vertex / 3
device.DrawUserPrimitives(prim, n, vertex)
//let form =
// let render device =
// [| -100.0, -100.0; 0.0, 100.0; 100.0, -100.0; |]
// |> Array.map (vertex2 Color.BurlyWood)
// |> drawTriangles device
// show2D render
// |> makeViewer "Triangle"
let aspect (device : Device) =
let vp = device.Viewport
float32 vp.Width / float32 vp.Height
type perspective =
{ fov : float32;
aspect : float32;
near : float32;
far : float32;
camera : Vector3;
target : Vector3;
up : Vector3 }
let perspectiveDefault =
{ fov = 0.8f;
aspect = 0.0f;
near = 0.01f;
far = 100.0f;
camera = vec(-1.0, 2.0, -4.0);
target = vec(0.0, 0.0, 0.0);
up = vec(0.0, 1.0, 0.0) }
let perspective p (t : Transforms) =
t.Projection <- Matrix.PerspectiveFovLH(p.fov, p.aspect, p.near, p.far)
t.View <- Matrix.LookAtLH(p.camera, p.target, p.up)
let show3D render (device : Device) =
let p = { perspectiveDefault with aspect = aspect device }
perspective p device.Transform
device.Clear(allBuffers, Color.White, p.far, 0)
device.Lights.[0].Direction <- vec(1.0, -1.0, 2.0)
device.Lights.[0].Enabled <- true
render device
let vertices =
let r, y = sin(Math.PI / 3.0), cos(Math.PI / 3.0)
let f g x = r * g(float x * Math.PI / 5.0)
let aux n y i = vec(f sin (2 * i + n), y, f cos (2 * i + n))
Array.concat
[ [| vec(0.0, 1.0, 0.0) |]
Array.init 5 (aux 0 y)
Array.init 5 (aux 0 (-y))
[| vec(0.0, -1.0, 0.0) |] ]
let faces =
let r1 i = 1 + (1 + i) % 5
let r2 i = 6 + (1 + i) % 5
[ for i in 0 .. 4 -> 0, r1 i, r1(i + 1) ] @
[ for i in 0 .. 4 -> r1(i + 1), r1 i, r2 i ] @
[ for i in 0 .. 4 -> r1(i + 1), r2 i, r2(i + 1) ] @
[ for i in 0 .. 4 -> r2(i + 1), r2 i, 11 ]
let triOfFace (c: Color) (v: Vector3 array) (i, j, k) =
let i, j, k = v.[i], v.[j], v.[k]
let n = Vector3.Normalize(i + j + k)
let v r = new Vertex(r, n, c.ToArgb())
[| v i; v j; v k |]
let triangles =
faces |> List.map (triOfFace Color.BurlyWood vertices)
|> Array.concat
let timer = new System.Diagnostics.Stopwatch()
timer.Start()
let renderIcosahedron (device : Device) =
let t = float32 timer.ElapsedMilliseconds / 1e3f
device.Transform.World <- Matrix.RotationY t
drawTriangles device triangles
//let form =
// show3D renderIcosahedron
// |> makeViewer "Icosahedron"
type scene =
| Triangles of (Vector3 * Vector3 * Vector3) list
| Color of Color * scene
| Transform of Matrix * scene
| Group of scene list
let Triangles = [ vec(-1.0, -1.0, 0.0),
vec(0.0, 1.0, -1.0),
vec(1.0, -1.0, 0.0) ]
let triangle (c : Color) (p0: Vector3, p1: Vector3, p2: Vector3) =
let p01 = p1 - p0
let p02 = p2 - p0
let n = Vector3.Normalize(Vector3.Cross(p01, p02))
Array.map (vertex c (float n.X, float n.Y, float n.Z))
( [| float p0.X, float p0.Y, float p0.Z;
float p01.X, float p01.Y, float p01.Z;
float p02.X, float p02.Y, float p02.Z |] )
let transform (device : Device) color m k scene =
let world = device.Transform.World
device.Transform.World <- Matrix.Multiply(world, m)
try k device color scene finally
device.Transform.World <- world
let rec draw (device : Device) color = function
| Triangles tris ->
Array.concat (List.map (triangle color) tris)
|> drawTriangles device
| Color(color, scene) -> draw device color scene
| Transform(m, scene) -> transform device color m draw scene
| Group ts -> List.iter (draw device color) ts
let form = (fun device -> draw device Color.Black)
|> show3D render scene device // ERROR
|> makeViewer "F# Visualization"
[<STAThread>]
do Application.Run(form)