<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://groupkos.com/dev/index.php?action=history&amp;feed=atom&amp;title=VB6_QuasiVisual3D.frm</id>
	<title>VB6 QuasiVisual3D.frm - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://groupkos.com/dev/index.php?action=history&amp;feed=atom&amp;title=VB6_QuasiVisual3D.frm"/>
	<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;action=history"/>
	<updated>2026-04-15T08:43:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2956&amp;oldid=prev</id>
		<title>XenoEngineer at 14:04, 1 January 2024</title>
		<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2956&amp;oldid=prev"/>
		<updated>2024-01-01T14:04:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;amp;diff=2956&amp;amp;oldid=2947&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>XenoEngineer</name></author>
	</entry>
	<entry>
		<id>http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2947&amp;oldid=prev</id>
		<title>XenoEngineer: XenoEngineer moved page VB6 Dex3D.frm to VB6 QuasiVisual3D.frm without leaving a redirect</title>
		<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2947&amp;oldid=prev"/>
		<updated>2024-01-01T12:42:09Z</updated>

		<summary type="html">&lt;p&gt;XenoEngineer moved page &lt;a href=&quot;/dev/index.php/VB6_Dex3D.frm&quot; title=&quot;VB6 Dex3D.frm&quot;&gt;VB6 Dex3D.frm&lt;/a&gt; to &lt;a href=&quot;/dev/index.php/VB6_QuasiVisual3D.frm&quot; title=&quot;VB6 QuasiVisual3D.frm&quot;&gt;VB6 QuasiVisual3D.frm&lt;/a&gt; without leaving a redirect&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:42, 1 January 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>XenoEngineer</name></author>
	</entry>
	<entry>
		<id>http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2942&amp;oldid=prev</id>
		<title>XenoEngineer at 09:31, 1 January 2024</title>
		<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2942&amp;oldid=prev"/>
		<updated>2024-01-01T09:31:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:31, 1 January 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;headerDex3D&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;headerQuasiDex3D&lt;/ins&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;background:#333; color:lime; margin:0 auto; max-width:880px; padding:20px; &amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;background:#333; color:lime; margin:0 auto; max-width:880px; padding:20px; &amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Private mboLoading As Boolean&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Private mboLoading As Boolean&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>XenoEngineer</name></author>
	</entry>
	<entry>
		<id>http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2937&amp;oldid=prev</id>
		<title>XenoEngineer: Created page with &quot;{{headerDex3D}} &lt;pre style=&quot;background:#333; color:lime; margin:0 auto; max-width:880px; padding:20px; &quot;&gt; Private mboLoading As Boolean  Private Sub Form_Activate()     Debug.Print &quot;Beginning Form_Activate()&quot;          Dim FrameRate As Single          If BeginRenderLoop = True Then         &#039;&#039;  Run render loop once  &#039;&#039;         BeginRenderLoop = False                  Do Until (RenderLoopCanceled) &#039;Or Not Me.Visible)             If RefreshScene = True Then                 R...&quot;</title>
		<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=VB6_QuasiVisual3D.frm&amp;diff=2937&amp;oldid=prev"/>
		<updated>2024-01-01T09:24:33Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{headerDex3D}} &amp;lt;pre style=&amp;quot;background:#333; color:lime; margin:0 auto; max-width:880px; padding:20px; &amp;quot;&amp;gt; Private mboLoading As Boolean  Private Sub Form_Activate()     Debug.Print &amp;quot;Beginning Form_Activate()&amp;quot;          Dim FrameRate As Single          If BeginRenderLoop = True Then         &amp;#039;&amp;#039;  Run render loop once  &amp;#039;&amp;#039;         BeginRenderLoop = False                  Do Until (RenderLoopCanceled) &amp;#039;Or Not Me.Visible)             If RefreshScene = True Then                 R...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{headerDex3D}}&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:#333; color:lime; margin:0 auto; max-width:880px; padding:20px; &amp;quot;&amp;gt;&lt;br /&gt;
Private mboLoading As Boolean&lt;br /&gt;
&lt;br /&gt;
Private Sub Form_Activate()&lt;br /&gt;
    Debug.Print &amp;quot;Beginning Form_Activate()&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    Dim FrameRate As Single&lt;br /&gt;
    &lt;br /&gt;
    If BeginRenderLoop = True Then&lt;br /&gt;
        &amp;#039;&amp;#039;  Run render loop once  &amp;#039;&amp;#039;&lt;br /&gt;
        BeginRenderLoop = False&lt;br /&gt;
        &lt;br /&gt;
        Do Until (RenderLoopCanceled) &amp;#039;Or Not Me.Visible)&lt;br /&gt;
            If RefreshScene = True Then&lt;br /&gt;
                RefreshScene = False&lt;br /&gt;
                If TickCount &amp;lt; 10 Then&lt;br /&gt;
                    TickCount = TickCount + 1&lt;br /&gt;
                Else&lt;br /&gt;
                    FinishTime = Timer&lt;br /&gt;
                    If FinishTime &amp;lt;&amp;gt; BeginTime Then&lt;br /&gt;
                        FrameRate = TickCount / (FinishTime - BeginTime)&lt;br /&gt;
                        Me.Caption = App.Title &amp;amp; &amp;quot; - &amp;quot; &amp;amp; Format(FrameRate, &amp;quot;0.00&amp;quot;) &amp;amp; &amp;quot; fps&amp;quot;&lt;br /&gt;
                        TickCount = 0&lt;br /&gt;
                        BeginTime = Timer&lt;br /&gt;
                    End If&lt;br /&gt;
                End If&lt;br /&gt;
                LastFaceOver = 0&lt;br /&gt;
                If LockCamera = True Then&lt;br /&gt;
                    VLight(MyLight).Origin = _&lt;br /&gt;
                        VectorAdd( _&lt;br /&gt;
                            VectorNull, _&lt;br /&gt;
                            VectorScale( _&lt;br /&gt;
                                OrientationToVector(OrientationInput(0, OrbitLatitude, -OrbitLongitude)), _&lt;br /&gt;
                                -OrbitRadius _&lt;br /&gt;
                            ) _&lt;br /&gt;
                        )&lt;br /&gt;
                    If CameraModel &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
                        VMesh(CameraModel).Origin = VLight(MyLight).Origin&lt;br /&gt;
                        VMesh(CameraModel).Angles.Pitch = OrbitLatitude&lt;br /&gt;
                        VMesh(CameraModel).Angles.Yaw = -OrbitLongitude&lt;br /&gt;
                        VMesh(CameraModel).UpdateTransformation = True&lt;br /&gt;
                    End If&lt;br /&gt;
                Else&lt;br /&gt;
                    Call OrbitCamera(MyCamera, VectorNull, OrbitRadius, OrbitLongitude, OrbitLatitude)&lt;br /&gt;
                    VLight(MyLight).Origin = VCamera(MyCamera).Origin&lt;br /&gt;
                End If&lt;br /&gt;
                &lt;br /&gt;
                Picture1.Cls&lt;br /&gt;
                Call RenderImage(Picture1, MyCamera)&lt;br /&gt;
                Picture1.ForeColor = vbWhite&lt;br /&gt;
                Picture1.Print &amp;quot;Longitude: &amp;quot; &amp;amp; Int(RadianToDegree(OrbitLongitude))&lt;br /&gt;
                Picture1.Print &amp;quot;Latitude: &amp;quot; &amp;amp; Int(RadianToDegree(OrbitLatitude))&lt;br /&gt;
                Picture1.Print &amp;quot;Radius: &amp;quot; &amp;amp; Int(OrbitRadius)&lt;br /&gt;
                Picture1.Print&lt;br /&gt;
                Picture1.Print &amp;quot;Name: &amp;quot; &amp;amp; VMesh(MyMesh).Tag&lt;br /&gt;
                Picture1.Print &amp;quot;Vertices: &amp;quot; &amp;amp; VMesh(MyMesh).Vertices.Length&lt;br /&gt;
                Picture1.Print &amp;quot;Faces: &amp;quot; &amp;amp; VMesh(MyMesh).Faces.Length&lt;br /&gt;
            End If&lt;br /&gt;
            &lt;br /&gt;
            DoEvents&lt;br /&gt;
        Loop&lt;br /&gt;
        &lt;br /&gt;
    End If&lt;br /&gt;
    Debug.Print &amp;quot;Ending Form_Activate()&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Sub paintCanvas(C As PictureBox)&lt;br /&gt;
    C.Cls&lt;br /&gt;
    RenderImage C, MyCamera&lt;br /&gt;
    &lt;br /&gt;
    LastFaceOver = 0&lt;br /&gt;
    If LockCamera = True Then&lt;br /&gt;
        VLight(MyLight).Origin = _&lt;br /&gt;
            VectorAdd( _&lt;br /&gt;
                VectorNull, _&lt;br /&gt;
                VectorScale( _&lt;br /&gt;
                    OrientationToVector(OrientationInput(0, OrbitLatitude, -OrbitLongitude)), _&lt;br /&gt;
                    -OrbitRadius _&lt;br /&gt;
                ) _&lt;br /&gt;
            )&lt;br /&gt;
        If CameraModel &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
            VMesh(CameraModel).Origin = VLight(MyLight).Origin&lt;br /&gt;
            VMesh(CameraModel).Angles.Pitch = OrbitLatitude&lt;br /&gt;
            VMesh(CameraModel).Angles.Yaw = -OrbitLongitude&lt;br /&gt;
            VMesh(CameraModel).UpdateTransformation = True&lt;br /&gt;
        End If&lt;br /&gt;
    Else&lt;br /&gt;
        Call OrbitCamera(MyCamera, VectorNull, OrbitRadius, OrbitLongitude, OrbitLatitude)&lt;br /&gt;
        VLight(MyLight).Origin = VCamera(MyCamera).Origin&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
    Picture1.Cls&lt;br /&gt;
    RenderImage Picture1, MyCamera&lt;br /&gt;
    &lt;br /&gt;
    Picture1.ForeColor = vbWhite&lt;br /&gt;
    Picture1.Print &amp;quot;Longitude: &amp;quot; &amp;amp; Int(RadianToDegree(OrbitLongitude))&lt;br /&gt;
    Picture1.Print &amp;quot;Latitude: &amp;quot; &amp;amp; Int(RadianToDegree(OrbitLatitude))&lt;br /&gt;
    Picture1.Print &amp;quot;Radius: &amp;quot; &amp;amp; Int(OrbitRadius)&lt;br /&gt;
    Picture1.Print&lt;br /&gt;
    Picture1.Print &amp;quot;Name: &amp;quot; &amp;amp; VMesh(MyMesh).Tag&lt;br /&gt;
    Picture1.Print &amp;quot;Vertices: &amp;quot; &amp;amp; VMesh(MyMesh).Vertices.Length&lt;br /&gt;
    Picture1.Print &amp;quot;Faces: &amp;quot; &amp;amp; VMesh(MyMesh).Faces.Length&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Form_KeyPress(KeyAscii As Integer)&lt;br /&gt;
    If KeyAscii = vbKeyEscape Then&lt;br /&gt;
        mnuExit_Click&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Form_Load()&lt;br /&gt;
    Debug.Print &amp;quot;Form_Load&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    Dim Extension As String&lt;br /&gt;
    &lt;br /&gt;
    On Error Resume Next&lt;br /&gt;
    mboLoading = True       &amp;#039;&amp;#039;  Anti-recurssion flag (tested in change events)&lt;br /&gt;
    Me.KeyPreview = True    &amp;#039;&amp;#039;  Added -XenoEngineer, for forever-loop cancellation &amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    CommonDialog1.CancelError = True&lt;br /&gt;
    &lt;br /&gt;
    InitializeScene&lt;br /&gt;
    &lt;br /&gt;
    InitializeCanvas Picture1, borderStyle:=vbTransparent, backcolor:=vbBlack&lt;br /&gt;
    InitializeCanvas Picture2, borderStyle:=vbTransparent, backcolor:=vbBlack&lt;br /&gt;
    InitializeCanvas Picture3, borderStyle:=vbTransparent, backcolor:=vbBlack&lt;br /&gt;
        &lt;br /&gt;
    mboLoading = False&lt;br /&gt;
    &lt;br /&gt;
    TickCount = 10&lt;br /&gt;
    &lt;br /&gt;
    MyCamera = AddCamera&lt;br /&gt;
    VCamera(MyCamera).Zoom = 1&lt;br /&gt;
    VCamera(MyCamera).DrawStyle = 2&lt;br /&gt;
    mnuDrawStyleOption(2).Checked = True&lt;br /&gt;
    &lt;br /&gt;
    MyLight = AddLight&lt;br /&gt;
    mnuLight.Checked = True&lt;br /&gt;
    &lt;br /&gt;
    OrbitRadius = 200&lt;br /&gt;
    OrbitSpeed = 0.01&lt;br /&gt;
    DollySpeed = 1&lt;br /&gt;
    &lt;br /&gt;
    &amp;#039;&amp;#039;  Load dex or 3ds files if on the command line  &amp;#039;&amp;#039;&lt;br /&gt;
    If Command &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;
        Extension = LCase(Right(Command, 3))&lt;br /&gt;
        If Extension = &amp;quot;dex&amp;quot; Then MyMesh = LoadDexMesh(Command)&lt;br /&gt;
        If Extension = &amp;quot;3ds&amp;quot; Then&lt;br /&gt;
            MyMesh = 0&lt;br /&gt;
            Load3dsFile Command&lt;br /&gt;
            SetSceneColor ColorLongToRGB(vbWhite), 0.5&lt;br /&gt;
        End If&lt;br /&gt;
        &lt;br /&gt;
        Call CenterMesh(MyMesh)&lt;br /&gt;
        RefreshScene = True&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
    BeginRenderLoop = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Form_Resize()&lt;br /&gt;
    Debug.Print &amp;quot;Form_Resize()&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    If mboLoading Then Exit Sub&lt;br /&gt;
    &lt;br /&gt;
    Dim PaletteWidth As Integer&lt;br /&gt;
    &lt;br /&gt;
    PaletteWidth = Me.ScaleHeight / 20&lt;br /&gt;
    &lt;br /&gt;
    Picture1.Move 0, 0, Me.ScaleWidth - PaletteWidth, Me.ScaleHeight - PaletteWidth&lt;br /&gt;
    Picture2.Move Me.ScaleWidth - PaletteWidth, 0, PaletteWidth, Me.ScaleHeight - PaletteWidth&lt;br /&gt;
    Picture3.Move 0, Me.ScaleHeight - PaletteWidth, Me.ScaleWidth, PaletteWidth&lt;br /&gt;
    &lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Form_Unload(Cancel As Integer)&lt;br /&gt;
    Debug.Print &amp;quot;Form_Unload()    &amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    RenderLoopCanceled = True&lt;br /&gt;
    &lt;br /&gt;
    DoEvents&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub mnuAbout_Click()&lt;br /&gt;
&lt;br /&gt;
    Call ShowAbout&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub mnuBasicOption_Click(Index As Integer)&lt;br /&gt;
&lt;br /&gt;
    Randomize&lt;br /&gt;
    &lt;br /&gt;
    Call ResetScene(0, MyCamera, MyLight)&lt;br /&gt;
    Select Case Index&lt;br /&gt;
        Case 0&lt;br /&gt;
            MyMesh = AddMeshBox(VectorInput(40, 40, 40))&lt;br /&gt;
        Case 1&lt;br /&gt;
            MyMesh = AddMeshGrid(80, 80, 4, 4, False)&lt;br /&gt;
        Case 2&lt;br /&gt;
            MyMesh = AddMeshSphere(40, 16, 8)&lt;br /&gt;
        Case 3&lt;br /&gt;
            MyMesh = AddMeshHemisphere(40, 16, 4)&lt;br /&gt;
        Case 4&lt;br /&gt;
            MyMesh = AddMeshCone(40, 60, 16)&lt;br /&gt;
        Case 5&lt;br /&gt;
            MyMesh = AddMeshCylinder(40, 60, 16)&lt;br /&gt;
        Case 6&lt;br /&gt;
            MyMesh = AddMeshPie(80, 20, 0, 60, 32)&lt;br /&gt;
        Case 7&lt;br /&gt;
            MyMesh = AddMeshTetrahedron(40)&lt;br /&gt;
        Case 8&lt;br /&gt;
            MyMesh = AddMeshSphere(40, 4, 2)&lt;br /&gt;
        Case 9&lt;br /&gt;
            MyMesh = AddMeshGeoSphere(40, 2)&lt;br /&gt;
        Case 10&lt;br /&gt;
            MyMesh = AddMeshTorus(10, 68.541, 13, 8)&lt;br /&gt;
    End Select&lt;br /&gt;
    Call CenterMesh(MyMesh)&lt;br /&gt;
    Call SetMeshColor(MyMesh, ColorRandom, 0.5)&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuColorOption_Click(Index As Integer)&lt;br /&gt;
&lt;br /&gt;
    Select Case Index&lt;br /&gt;
        Case 0&lt;br /&gt;
            Call SetMeshColor(MyMesh, ColorLongToRGB(vbWhite), 0.5)&lt;br /&gt;
        Case 1&lt;br /&gt;
            Call SetMeshColorRandom(MyMesh)&lt;br /&gt;
        Case 2&lt;br /&gt;
            Call _&lt;br /&gt;
                SetMeshColorGradient( _&lt;br /&gt;
                    MyMesh, _&lt;br /&gt;
                    2, _&lt;br /&gt;
                    ColorLongToRGB(vbBlue), _&lt;br /&gt;
                    ColorLongToRGB(vbRed), _&lt;br /&gt;
                    0.5 _&lt;br /&gt;
                )&lt;br /&gt;
    End Select&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuComboOption_Click(Index As Integer)&lt;br /&gt;
&lt;br /&gt;
    Dim A As Integer&lt;br /&gt;
    Dim B As Integer&lt;br /&gt;
    Dim C As Integer&lt;br /&gt;
    Dim D() As Single&lt;br /&gt;
    Dim E() As Long&lt;br /&gt;
    &lt;br /&gt;
    Randomize&lt;br /&gt;
    &lt;br /&gt;
    Call ResetScene(0, MyCamera, MyLight)&lt;br /&gt;
    Select Case Index&lt;br /&gt;
        Case 0&lt;br /&gt;
            ReDim D(1 To 18)&lt;br /&gt;
            ReDim E(1 To 18)&lt;br /&gt;
            C = 1&lt;br /&gt;
            For A = 1 To 3&lt;br /&gt;
                For B = 1 To 6&lt;br /&gt;
                    D(C) = Rnd&lt;br /&gt;
                    E(C) = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd)&lt;br /&gt;
                    C = C + 1&lt;br /&gt;
                Next B&lt;br /&gt;
            Next A&lt;br /&gt;
            MyMesh = AddMeshBarGraph(6, 3, VectorInput(80, 40, 40), 5, D(), E())&lt;br /&gt;
        Case 1&lt;br /&gt;
            ReDim D(1 To 25)&lt;br /&gt;
            ReDim E(1 To 25)&lt;br /&gt;
            C = 1&lt;br /&gt;
            For A = 1 To 5&lt;br /&gt;
                For B = 1 To 5&lt;br /&gt;
                    D(C) = Rnd&lt;br /&gt;
                    E(C) = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd)&lt;br /&gt;
                    C = C + 1&lt;br /&gt;
                Next B&lt;br /&gt;
            Next A&lt;br /&gt;
            MyMesh = AddMeshGridGraph(5, 5, VectorInput(80, 40, 80), D(), vbBlue, vbRed, False)&lt;br /&gt;
        Case 2&lt;br /&gt;
            ReDim D(1 To 4)&lt;br /&gt;
            ReDim E(1 To 4)&lt;br /&gt;
            For A = 1 To 4&lt;br /&gt;
                D(A) = Rnd&lt;br /&gt;
                E(A) = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd)&lt;br /&gt;
            Next A&lt;br /&gt;
            MyMesh = AddMeshPieGraph(40, 10, 16, D(), E())&lt;br /&gt;
    End Select&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuDrawModeOption_Click(Index As Integer)&lt;br /&gt;
&lt;br /&gt;
    mnuDrawModeOption(Index).Checked = Not mnuDrawModeOption(Index).Checked&lt;br /&gt;
    Select Case Index&lt;br /&gt;
        Case 0&lt;br /&gt;
            VCamera(MyCamera).DoubleSided = mnuDrawModeOption(Index).Checked&lt;br /&gt;
        Case 1&lt;br /&gt;
            VCamera(MyCamera).Metallic = mnuDrawModeOption(Index).Checked&lt;br /&gt;
        Case 2&lt;br /&gt;
            VCamera(MyCamera).Atmosphere = mnuDrawModeOption(Index).Checked&lt;br /&gt;
        Case 3&lt;br /&gt;
            VCamera(MyCamera).ColorCorrect = mnuDrawModeOption(Index).Checked&lt;br /&gt;
    End Select&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuDrawStyleOption_Click(Index As Integer)&lt;br /&gt;
&lt;br /&gt;
    mnuDrawStyleOption(VCamera(MyCamera).DrawStyle).Checked = False&lt;br /&gt;
    mnuDrawStyleOption(Index).Checked = True&lt;br /&gt;
    VCamera(MyCamera).DrawStyle = Index&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuExit_Click()&lt;br /&gt;
    Debug.Print &amp;quot;mnuExit_Click&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    Unload Me&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub mnuHomepage_Click()&lt;br /&gt;
&lt;br /&gt;
    Explore &amp;quot;https://groupkos.com/dev/index.php/Dex3D_Graphics&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuLight_Click()&lt;br /&gt;
&lt;br /&gt;
    mnuLight.Checked = Not mnuLight.Checked&lt;br /&gt;
    VLight(MyLight).Enabled = mnuLight.Checked&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuLoad_Click()&lt;br /&gt;
&lt;br /&gt;
    Dim Extension As String&lt;br /&gt;
    &lt;br /&gt;
    On Error Resume Next&lt;br /&gt;
    &lt;br /&gt;
    CommonDialog1.Filter = _&lt;br /&gt;
        &amp;quot;Dex3D Files (*.dex)|*.dex|3D Studio Files (*.3ds)|*.3ds|All Files (*.*)|*.*&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
    CommonDialog1.ShowOpen&lt;br /&gt;
    &lt;br /&gt;
    If Err = 0 Then&lt;br /&gt;
        Call ResetScene(0, MyCamera, MyLight)&lt;br /&gt;
        Extension = LCase(Right(CommonDialog1.Filename, 3))&lt;br /&gt;
        If Extension = &amp;quot;dex&amp;quot; Then MyMesh = LoadDexMesh(CommonDialog1.Filename)&lt;br /&gt;
        If Extension = &amp;quot;3ds&amp;quot; Then&lt;br /&gt;
            MyMesh = 1&lt;br /&gt;
            Call Load3dsFile(CommonDialog1.Filename)&lt;br /&gt;
            Call SetSceneColor(ColorLongToRGB(vbWhite), 0.5)&lt;br /&gt;
        End If&lt;br /&gt;
        RefreshScene = True&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuNew_Click()&lt;br /&gt;
&lt;br /&gt;
    Call ResetScene(0, MyCamera, MyLight)&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub mnuOrthographic_Click()&lt;br /&gt;
&lt;br /&gt;
    mnuOrthographic.Checked = Not mnuOrthographic.Checked&lt;br /&gt;
    VCamera(MyCamera).Orthographic = mnuOrthographic.Checked&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuOtherOption_Click()&lt;br /&gt;
&lt;br /&gt;
    Call ResetScene(0, MyCamera, MyLight)&lt;br /&gt;
    MyMesh = AddMeshGrid(80, 80, 10, 10, False)&lt;br /&gt;
    Call CenterMesh(MyMesh)&lt;br /&gt;
    Call RippleMesh(MyMesh, 40, 20, 0)&lt;br /&gt;
    Call SetMeshColorGradient(MyMesh, 2, ColorLongToRGB(vbBlue), ColorLongToRGB(vbRed), 0.5)&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuRename_Click()&lt;br /&gt;
&lt;br /&gt;
    VMesh(MyMesh).Tag = InputBox(&amp;quot;Enter new name:&amp;quot;, &amp;quot;Rename&amp;quot;, VMesh(MyMesh).Tag)&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuSave_Click()&lt;br /&gt;
&lt;br /&gt;
    On Error Resume Next&lt;br /&gt;
    &lt;br /&gt;
    CommonDialog1.Filter = &amp;quot;Dex3D Files (*.dex)|*.dex|All Files (*.*)|*.*&amp;quot;&lt;br /&gt;
    CommonDialog1.ShowSave&lt;br /&gt;
    If Err = 0 Then Call SaveDexMesh(MyMesh, CommonDialog1.Filename)&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuSpecialOption_Click(Index As Integer)&lt;br /&gt;
&lt;br /&gt;
    Dim A As Integer&lt;br /&gt;
    &lt;br /&gt;
    Randomize&lt;br /&gt;
    &lt;br /&gt;
    Call ResetScene(0, MyCamera, MyLight)&lt;br /&gt;
    Select Case Index&lt;br /&gt;
        Case 0&lt;br /&gt;
            For A = 1 To 40&lt;br /&gt;
                MyMesh = AddMeshPoint(VectorScale(VectorRandom, 40))&lt;br /&gt;
                Call SetMeshColorRandom(MyMesh)&lt;br /&gt;
            Next A&lt;br /&gt;
        Case 1&lt;br /&gt;
            For A = 1 To 10&lt;br /&gt;
                MyMesh = _&lt;br /&gt;
                    AddMeshLine( _&lt;br /&gt;
                        VectorScale(VectorRandom, 40), _&lt;br /&gt;
                        VectorScale(VectorRandom, 40) _&lt;br /&gt;
                    )&lt;br /&gt;
                Call SetMeshColorRandom(MyMesh)&lt;br /&gt;
            Next A&lt;br /&gt;
        Case 2&lt;br /&gt;
            For A = 1 To 20&lt;br /&gt;
                MyMesh = AddMeshText(&amp;quot;3D&amp;quot;, VectorScale(VectorRandom, 40))&lt;br /&gt;
                Call SetMeshColorRandom(MyMesh)&lt;br /&gt;
            Next A&lt;br /&gt;
        Case 3&lt;br /&gt;
            For A = 1 To 10&lt;br /&gt;
                MyMesh = _&lt;br /&gt;
                    AddMeshCurve( _&lt;br /&gt;
                        VectorScale(VectorRandom, 40), _&lt;br /&gt;
                        VectorScale(VectorRandom, 40), _&lt;br /&gt;
                        VectorScale(VectorRandom, 40), _&lt;br /&gt;
                        VectorScale(VectorRandom, 40) _&lt;br /&gt;
                    )&lt;br /&gt;
                Call SetMeshColorRandom(MyMesh)&lt;br /&gt;
            Next A&lt;br /&gt;
    End Select&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub mnuTessellationOption_Click(Index As Integer)&lt;br /&gt;
&lt;br /&gt;
    Select Case Index&lt;br /&gt;
        Case 0&lt;br /&gt;
            Call TessellateMeshByFace(MyMesh, 1)&lt;br /&gt;
        Case 1&lt;br /&gt;
            Call TessellateMeshByEdge(MyMesh, 1)&lt;br /&gt;
    End Select&lt;br /&gt;
    Call SetMeshColor(MyMesh, ColorLongToRGB(vbWhite), 0.5)&lt;br /&gt;
    RefreshScene = True&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)&lt;br /&gt;
&lt;br /&gt;
    If KeyCode = CShift Then&lt;br /&gt;
        LockCamera = True&lt;br /&gt;
        If CameraModel = 0 Then&lt;br /&gt;
            CameraModel = AddMeshCone(10, 20, 4)&lt;br /&gt;
            Call CenterMesh(CameraModel)&lt;br /&gt;
            Call TransformMesh(CameraModel, TransformationTranslate(VectorInput(0, 20, 0)))&lt;br /&gt;
            Call TransformMesh(CameraModel, TransformationRotate(1, -Pi / 2))&lt;br /&gt;
            Call TransformMesh(CameraModel, TransformationRotate(3, Pi / 4))&lt;br /&gt;
            Call SetMeshColor(CameraModel, ColorLongToRGB(vbRed), 0.5)&lt;br /&gt;
            Me.mnuFile.Enabled = False&lt;br /&gt;
            Me.mnuEdit.Enabled = False&lt;br /&gt;
            Me.mnuView.Enabled = False&lt;br /&gt;
            Me.mnuObject.Enabled = False&lt;br /&gt;
            Me.mnuHelp.Enabled = False&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As Integer)&lt;br /&gt;
&lt;br /&gt;
    If KeyCode = CShift Then&lt;br /&gt;
        LockCamera = False&lt;br /&gt;
        If CameraModel &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
            Call RemoveMesh(CameraModel)&lt;br /&gt;
            CameraModel = 0&lt;br /&gt;
            Me.mnuFile.Enabled = True&lt;br /&gt;
            Me.mnuEdit.Enabled = True&lt;br /&gt;
            Me.mnuView.Enabled = True&lt;br /&gt;
            Me.mnuObject.Enabled = True&lt;br /&gt;
            Me.mnuHelp.Enabled = True&lt;br /&gt;
        End If&lt;br /&gt;
        RefreshScene = True&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;br /&gt;
&lt;br /&gt;
    If FaceOver &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
        If CameraModel = 0 Then&lt;br /&gt;
            Select Case Button&lt;br /&gt;
                Case 1&lt;br /&gt;
                    VFace(FaceOver).Color = ColorLongToRGB(BrushColor)&lt;br /&gt;
                    VFace(FaceOver).Alpha = BrushAlpha&lt;br /&gt;
                    RefreshScene = True&lt;br /&gt;
                Case 2&lt;br /&gt;
                    BrushColor = ColorRGBToLong(VFace(FaceOver).Color)&lt;br /&gt;
                    BrushAlpha = VFace(FaceOver).Alpha&lt;br /&gt;
                    Call Picture3_Resize&lt;br /&gt;
            End Select&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;br /&gt;
&lt;br /&gt;
    If Button &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
        Select Case Button&lt;br /&gt;
            Case 1 &amp;#039;orbit&lt;br /&gt;
                Picture1.MousePointer = 15&lt;br /&gt;
                OrbitLongitude = OrbitLongitude - (X - LastMousePosition.X) * OrbitSpeed&lt;br /&gt;
                OrbitLatitude = OrbitLatitude + (Y - LastMousePosition.Y) * OrbitSpeed&lt;br /&gt;
                If OrbitLongitude &amp;gt; Pi Then OrbitLongitude = OrbitLongitude - (2 * Pi)&lt;br /&gt;
                If OrbitLongitude &amp;lt; -Pi Then OrbitLongitude = OrbitLongitude + (2 * Pi)&lt;br /&gt;
                If OrbitLatitude &amp;gt; (Pi / 2) Then OrbitLatitude = (Pi / 2)&lt;br /&gt;
                If OrbitLatitude &amp;lt; -(Pi / 2) Then OrbitLatitude = -(Pi / 2)&lt;br /&gt;
            Case 2 &amp;#039;dolly&lt;br /&gt;
                Picture1.MousePointer = 7&lt;br /&gt;
                OrbitRadius = OrbitRadius + (Y - LastMousePosition.Y) * DollySpeed&lt;br /&gt;
                If OrbitRadius &amp;lt; 0 Then OrbitRadius = 0&lt;br /&gt;
        End Select&lt;br /&gt;
        RefreshScene = True&lt;br /&gt;
    Else&lt;br /&gt;
        If CameraModel = 0 Then&lt;br /&gt;
            FaceOver = FaceByPoint(POINTAPIInput(Int(X), Int(Y)))&lt;br /&gt;
            If FaceOver &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
                Picture1.MousePointer = 2&lt;br /&gt;
            Else&lt;br /&gt;
                Picture1.MousePointer = 0&lt;br /&gt;
            End If&lt;br /&gt;
            If FaceOver &amp;lt;&amp;gt; LastFaceOver Then&lt;br /&gt;
                Picture1.DrawMode = 6&lt;br /&gt;
                Picture1.DrawStyle = 0&lt;br /&gt;
                Picture1.FillStyle = 1&lt;br /&gt;
                If LastFaceOver &amp;lt;&amp;gt; 0 Then Call DrawFace(Picture1, LastFaceOver, ColorNull)&lt;br /&gt;
                LastFaceOver = FaceOver&lt;br /&gt;
                Call DrawFace(Picture1, FaceOver, ColorNull)&lt;br /&gt;
                Picture1.Refresh&lt;br /&gt;
            End If&lt;br /&gt;
        Else&lt;br /&gt;
            Picture1.MousePointer = 0&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
    LastMousePosition.X = X&lt;br /&gt;
    LastMousePosition.Y = Y&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;br /&gt;
&lt;br /&gt;
    Call Picture2_MouseMove(Button, Shift, X, Y)&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;br /&gt;
&lt;br /&gt;
    Picture2.MousePointer = 2&lt;br /&gt;
    &lt;br /&gt;
    If Button &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
        PaletteColor = GetPixel(Picture2.hdc, X, Y)&lt;br /&gt;
        If PaletteColor &amp;lt;&amp;gt; -1 Then BrushColor = PaletteColor&lt;br /&gt;
        Call Picture3_Resize&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Picture2_Resize()&lt;br /&gt;
    If mboLoading Then Exit Sub&lt;br /&gt;
    &lt;br /&gt;
    Picture2.Cls&lt;br /&gt;
    DrawColorSpectrum Picture2, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, 2&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Picture3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;br /&gt;
&lt;br /&gt;
    Call Picture3_MouseMove(Button, Shift, X, Y)&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Picture3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;br /&gt;
&lt;br /&gt;
    Picture3.MousePointer = 9&lt;br /&gt;
    &lt;br /&gt;
    If Button &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
        BrushAlpha = Abs(X - Picture3.ScaleWidth / 2) / (Picture3.ScaleWidth / 2)&lt;br /&gt;
        If BrushAlpha &amp;gt; 1 Then BrushAlpha = 1&lt;br /&gt;
        Picture3_Resize&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Picture3_Resize()&lt;br /&gt;
    If mboLoading = True Then Exit Sub&lt;br /&gt;
    &lt;br /&gt;
    Picture3.Cls&lt;br /&gt;
    DrawColorShades Picture3, 0, 0, Picture3.ScaleWidth, Picture3.ScaleHeight, 1, BrushColor&lt;br /&gt;
    DrawArrow _&lt;br /&gt;
            Picture3, _&lt;br /&gt;
            Picture3.ScaleWidth / 2 + BrushAlpha * Picture3.ScaleWidth / 2, _&lt;br /&gt;
            0, _&lt;br /&gt;
            1, _&lt;br /&gt;
            Picture3.Height, _&lt;br /&gt;
            vbWhite, _&lt;br /&gt;
             5&lt;br /&gt;
        &lt;br /&gt;
        DrawArrow _&lt;br /&gt;
            Picture3, _&lt;br /&gt;
            Picture3.ScaleWidth / 2 - BrushAlpha * Picture3.ScaleWidth / 2, _&lt;br /&gt;
            0, _&lt;br /&gt;
            1, _&lt;br /&gt;
            Picture3.Height, _&lt;br /&gt;
            vbWhite, _&lt;br /&gt;
            5&lt;br /&gt;
        &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>XenoEngineer</name></author>
	</entry>
</feed>