opengl用三角形模拟生成球面[优质文档]

在看OpenGL红皮书,看到生成球体这节,讲了很多,总感觉不如自己动手写一些代码来的实在,用OpenGL中三角形模拟球形生成.主要要点,模型视图变换,多边形表面环绕一致性,矩阵堆栈.先贴上代码.
虽然是用F#写的,但是处理全是过程式的,很好理解.0
1 #r "F:\3D\1.0\Binaries\OpenTK\Debug\OpenTK.dll"0
2 #r "F:\3D\1.0\Binaries\OpenTK\Debug\OpenTK.GLControl.dll"0
30
4open System0
5open System.Collections.Generic0
6open System.Windows.Forms0
7open System.Threading0
8open System.Drawing0
9open System.Drawing.Imaging0
10open OpenTK0
11open OpenTK.Graphics0
12open OpenTK.Graphics.OpenGL0
力矩电机控制器13www.qqtop10
14type loopForm() as form=0
15inherit Form()0
16let mutable x = 5.f0
17let mutable y = 5.f0
18let mutable z = 5.f0
19let offest = 1.f0
20let glControl = new OpenTK.GLControl()0
21let textX= new TextBox()0
22let textY= new TextBox()0
23let textZ= new TextBox()0
24let textLR = new TextBox()0
25let textUD= new TextBox()0
26let textInfo = new TextBox()0
27let labelX= new Label()0
28let labelY= new Label()0
29let labelZ= new Label()0
30let labelLR = new Label()0
31let labelUD= new Label()0
32let mutable first = 00
33let mutable buffer = 00
34let list = 00
35let scale = 3.f0
36do0
37form.SuspendLayout()0
38glControl.Location <- new Point(10,40)0
39glControl.Size <- new Size(400,300)0
40glControl.BackColor <- Color.Red0
41glControl.Resize.size)0
42glControl.Paint.Add(form.paint)0
43form.MouseWheel.Add(form.MouseDown)0
44form.ClientSize <- new Size(600,400)0
45form.Text <- "opengl"0
46form.StartPosition <- FormStartPosition.Manual0 47form.Location <- new Point(1200,600)0
48form.Controls.Add(glControl)0
49form.ResumeLayout(false)0
50labelX.Location <- new Point(420,40)0
51labelY.Location <- new Point(420,70)0
52labelZ.Location <- new Point(420,100)0
53labelLR.Location <- new Point(420,130)0
54labelUD.Location <- new Point(420,160)0
55labelX.Text <- "X:" a.78name0
56labelY.Text <- "Y:"0
57labelZ.Text <- "Z:"0
58labelLR.Text <- "水平:"0
59labelUD.Text <-"上下:"0
60textX.Location <- new Point(460,40)0
61textY.Location <- new Point(460,70)0
62textZ.Location <- new Point(460,100)0
63textLR.Location <- new Point(460,130)0
64textUD.Location <- new Point(460,160)0
65textInfo.Location <- new Point(420,190)0
66textInfo.Width <- 1400
67form.Controls.Add(textX)0
68form.Controls.Add(textY)0
69form.Controls.Add(textZ)0
70form.Controls.Add(textLR)0
71form.Controls.Add(textUD)0
72form.Controls.Add(labelX)0
73form.Controls.Add(labelY)0
74form.Controls.Add(labelZ)0
75form.Controls.Add(labelLR)0
76form.Controls.Add(labelUD)0
77form.Controls.Add(textInfo)0
78//#endregion 0
79override v.OnLoad e =0
80base.OnLoad e0
81GL.ClearColor Color.MidnightBlue0
82Application.Idle.Add(v.AIdle)0
83v.ShowUI 0
84textX.TextChanged.Add(form.TextChange)0
85textY.TextChanged.Add(form.TextChange)0
86textZ.TextChanged.Add(form.TextChange)0
87textLR.TextChanged.Add(form.TextChange)0
88textUD.TextChanged.Add(form.TextChange)0
89//踢除正反面0
90//GL.Enable EnableCap.CullFace0
91//GL.CullFace CullFaceMode.Back0
92//指定正反面0
93GL.FrontFace FrontFaceDirection.Ccw0
94//设置材料面填充模式0
95GL.PolygonMode(MaterialFace.Front,PolygonMode.Fill)0
96GL.PolygonMode(MaterialFace.Back,PolygonMode.Line) 0
97//启用数组功能.0
98GL.EnableClientState(ArrayCap.VertexArray)0
99//GL.EnableClientState(ArrayCap.ColorArray)0
100GL.EnableClientState(ArrayCap.IndexArray)0
101//#region ""0
size (e:EventArgs) =0
103
GL.Viewport(0,0,glControl.ClientSize.Width,glControl.ClientSize.Height) 0
104let aspect = float32 glControl.ClientSize.Width /float32
glControl.ClientSize.Height0
105let mutable projection =
中式汉堡包Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4,aspect,0.1f,64.f) 0
106GL.MatrixMode MatrixMode.Projection0
107GL.LoadMatrix(&projection)0
108member v.paint (e:PaintEventArgs) =0
109v.Render()0
110member v.AIdle (e:EventArgs) =0
111while (glControl.IsIdle) do0
112v.Render()0
113member v.TextChange (e:EventArgs) =0
114x <- v.UIValue(textX)0
115y <- v.UIValue(textY)0
116z <- v.UIValue(textZ)0
117member v.MouseDown(e:MouseEventArgs) =0
118match v.ActiveControl with0
119| :? TextBox as t1 -> 0
120let mutable t = v.UIValue(t1)0
121t <- t + float32 e.Delta * offest * 0.01f0
122t1.Text <- t.ToString()0
123| _ -> 0
124v.Text <- v.ActiveControl.Text0
增量式光电编码器
125let state =float32 e.Delta * offest * 0.01f0
126x<- x+state0
127y<- y + state0
128z <- z + state0
129v.ShowUI0
130member x.UIValue0
131with get (text:TextBox) = 0
132let mutable value = 0.f0
133if System.Single.TryParse(text.Text,&value) then0 134value <- value0
135value0
136and set (text:TextBox) (value:float32) = text.Text<- value.ToString() 0
137member v.ShowUI =0
138textX.Text <- x.ToString()0
139textY.Text <- y.ToString()0
140textZ.Text <- z.ToString()0
141textLR.Text <- v.UIValue(textLR).ToString()0
142textUD.Text <- v.UIValue(textUD).ToString()0
143member v.Normal (c:Vector3) =0
144  c.Normalize() 0
145  c * scale0
146member v.Subdivide (v1:Vector3,v2:Vector3,v3:Vector3) =0 147let vs = ate 6 Vector3.Zero0
148vs.[0] <- v10
149vs.[1] <- v.Normal( Vector3.Lerp(v1,v2,0.5f))0
150vs.[2] <- v.Normal( Vector3.Lerp(v3,v1,0.5f))0
151vs.[3] <- v20
152vs.[4] <- v.Normal( Vector3.Lerp(v2,v3,0.5f))0
153vs.[5] <- v30
154let is = ate 1200
155is.[0] <- 00
156is.[1] <- 10
157is.[2] <- 20
158is.[3] <- 20
159is.[4] <- 10
玩具直升机结构160is.[5] <- 40
161is.[6] <- 40硬件加密设备
162is.[7] <- 10
163is.[8] <- 30
164is.[9] <- 20
165is.[10] <-40
166is.[11] <- 50
167(vs,is)0
168//#endregion 0
169member v.CreatePane (angle:float32,x,y,z) =0
170GL.PushMatrix()0
171GL.Color3(Color.Green)0
172GL.Rotate(angle,x,y,z)0
173let mutable vv =
[|Vector3.UnitY*scale;Vector3.UnitZ*scale;Vector3.UnitX*scale|]0
174let mutable iv = [|0;1;2|]0
175//let show array = printfn "%A" array0
176let mutable t =int (v.UIValue(textInfo))0
177if t > 6then0
178t <- 60
179elif t < 0then0
180t <- 00
181for j in0 .. t do0
182let mutable av = ate 0 Vector3.Zero0
183let mutable ev = ate 000
184for i in0 .. 3 .. iv.Length - 1do0
185let (vvv,iiv) =
v.Subdivide(vv.[iv.[i]],vv.[iv.[i+1]],vv.[iv.[i+2]])0
186let length = av.Length0
187av <- Array.append av vvv0
188let map = iiv |> Array.map (fun p -> p + length)0 189ev <- Array.append ev map0
190vv <- av0
191iv <- ev 0
192//show vv0
led数码管显示屏193//show iv0
194GL.VertexPointer(3,VertexPointerType.Float,0,vv) 0

本文发布于:2024-09-23 01:40:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/166617.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:生成   代码   环绕   表面
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议