OpenGL VB.docx

上传人:b****6 文档编号:3600400 上传时间:2022-11-24 格式:DOCX 页数:16 大小:54KB
下载 相关 举报
OpenGL VB.docx_第1页
第1页 / 共16页
OpenGL VB.docx_第2页
第2页 / 共16页
OpenGL VB.docx_第3页
第3页 / 共16页
OpenGL VB.docx_第4页
第4页 / 共16页
OpenGL VB.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

OpenGL VB.docx

《OpenGL VB.docx》由会员分享,可在线阅读,更多相关《OpenGL VB.docx(16页珍藏版)》请在冰豆网上搜索。

OpenGL VB.docx

OpenGLVB

求OPENGLVBSTL文件制作方法?

悬赏分:

40-提问时间2007-5-2216:

32

+++++++++++++++++++++引用别人的文章+++++++

三维模型的显示

目前对三维图形程序的开发大多是基于OpenGL来实现的,OpenGL实际上是一个独立于窗口系统和操作系统的开放式三维图形标准,得到了众多计算机厂商的支持。

作为一个优秀的三维图形接口,OpenGL提供了丰富的绘图命令,利用这些命令能够开发出高性能、交互式的三维图形应用程序。

它与VC有着紧密的开发接口,但由于VC对于一般非计算机专业的工程技术人员来说难以掌握,因而给工程领域的仿真程序设计带来了很大的不便。

但目前支持VB等开发工具的OpenGL开发库也开始出现。

本文就是基于VBOpenGL(vbogl.tlb)库来实现的,这是一个可免费使用的第三方库,它封装了大量的底层OpenGL库函数,很大程度上简化了开发工作。

在VB中建立三维图形环境之前,首先要在“工程”菜单下通过“引用”子菜单下加入VBOpenGL库,然后在窗体上加入一个PictureBox控件作为三维模型的显示和操作区域。

[[[[作为工程应用的虚拟设计或仿真程序,其三维模型可通过一般的三维造型软件如Solidworks来设计,然后通过软件提供的图形接口输出为中性文件。

目前主流的三维造型软件都支持多种标准文件格式,其中STL文件是一种可读性较强的文件格式,适合在工程仿真程序中使用。

STL文件格式最早是作为快速成型领域中的接口标准,已被广泛应用于各种三维软件中,很多主流的商用三维软件都支持STL文件的输入输出。

STL模型是以三角形集合来表示物体外轮廓形状的几何模型,其中每个三角形面片有四个数据项表示,即三角形的三个顶点坐标和三角形面片的外法线矢量,STL文件即为多个三角形面片的集合。

因此在VB环境中可通过读入STL文件并在绘图空间中重现的方法来显示三维模型。

首先对读入的STL文件按行分解,从中解析出每个面元,并存储到结构体数组中,接下来的工作就是通过VBOpenGL中的glColor3d函数对每个面元进行渲染和着色,并把渲染的结果以图形的形式填充到PictureBox控件的绘图区中,最终实现整个模型的显示。

需要说明的是在显示三维模型之前,必须对VBOpenGL中的初始环境进行定义。

]]]]]]

+++++++++++我现在看了后有很多的不明白一个是保存后的STL文件怎么导入还有在正确导入OPENGL后怎么做才能让做好模型进行运动?

我目的是做个机械手的运动仿真[我打算做个独立程序]

我个人的思路是在SOLIDWORKS中建立好模型并装配好

然后把他保存成STL文件导入VB中进行编辑

最后做菜单等

最大的问题:

1不知道怎么导入

2导入后怎么进行编辑

3OPENGL怎么进行运动仿真

如何制作三维空间vb

悬赏分:

20-解决时间:

2007-12-209:

53

我不想研究那麻烦的三维转二维的公式,vb中有没有什么方法,有没有一个对象,可以直接画三维图形(即知道一个在三维上的点,在屏幕上显示出来)

用dx如果行的话,请具体给出,谢谢。

三维模型的显示

目前对三维图形程序的开发大多是基于OpenGL来实现的,OpenGL实际上是一个独立于窗口系统和操作系统的开放式三维图形标准,得到了众多计算机厂商的支持。

作为一个优秀的三维图形接口,OpenGL提供了丰富的绘图命令,利用这些命令能够开发出高性能、交互式的三维图形应用程序。

它与VC有着紧密的开发接口,但由于VC对于一般非计算机专业的工程技术人员来说难以掌握,因而给工程领域的仿真程序设计带来了很大的不便。

但目前支持VB等开发工具的OpenGL开发库也开始出现。

本文就是基于VBOpenGL(vbogl.tlb)库来实现的,这是一个可免费使用的第三方库,它封装了大量的底层OpenGL库函数,很大程度上简化了开发工作。

在VB中建立三维图形环境之前,首先要在“工程”菜单下通过“引用”子菜单下加入VBOpenGL库,然后在窗体上加入一个PictureBox控件作为三维模型的显示和操作区域。

[[[[作为工程应用的虚拟设计或仿真程序,其三维模型可通过一般的三维造型软件如Solidworks来设计,然后通过软件提供的图形接口输出为中性文件。

目前主流的三维造型软件都支持多种标准文件格式,其中STL文件是一种可读性较强的文件格式,适合在工程仿真程序中使用。

STL文件格式最早是作为快速成型领域中的接口标准,已被广泛应用于各种三维软件中,很多主流的商用三维软件都支持STL文件的输入输出。

STL模型是以三角形集合来表示物体外轮廓形状的几何模型,其中每个三角形面片有四个数据项表示,即三角形的三个顶点坐标和三角形面片的外法线矢量,STL文件即为多个三角形面片的集合。

因此在VB环境中可通过读入STL文件并在绘图空间中重现的方法来显示三维模型。

首先对读入的STL文件按行分解,从中解析出每个面元,并存储到结构体数组中,接下来的工作就是通过VBOpenGL中的glColor3d函数对每个面元进行渲染和着色,并把渲染的结果以图形的形式填充到PictureBox控件的绘图区中,最终实现整个模型的显示。

需要说明的是在显示三维模型之前,必须对VBOpenGL中的初始环境进行定义。

]]]]]]

+++++++++++我现在看了后有很多的不明白一个是保存后的STL文件怎么导入还有在正确导入OPENGL后怎么做才能让做好模型进行运动?

我目的是做个机械手的运动仿真[我打算做个独立程序]

我个人的思路是在SOLIDWORKS中建立好模型并装配好

然后把他保存成STL文件导入VB中进行编辑

最后做菜单等

用VB画圆、正方形、长方形、球、正方体、长方体

悬赏分:

50-解决时间:

2008-3-322:

20

要编程的内容过程

问题补充:

最好编程简单点否则以我的程度怕看不懂

画圆

VERSION5.00

BeginVB.FormFMain

BorderStyle=1'FixedSingle

Caption="Form1"

ClientHeight=5205

ClientLeft=45

ClientTop=330

ClientWidth=7035

LinkTopic="Form1"

MaxButton=0'False

MinButton=0'False

ScaleHeight=5205

ScaleWidth=7035

StartUpPosition=2'屏幕中心

BeginVB.CheckBoxchkA

Caption="自动反转"

Height=375

Left=5280

TabIndex=5

Top=3600

Width=1695

End

BeginVB.CheckBoxchkAuto

Caption="自动旋转"

Height=255

Left=5280

TabIndex=4

Top=3240

Width=1575

End

BeginVB.TimertmrTurn

Enabled=0'False

Interval=100

Left=5280

Top=4080

End

BeginVB.PictureBoxpicDraw

Height=5000

Left=120

ScaleHeight=4935

ScaleWidth=4935

TabIndex=3

Top=120

Width=5000

End

BeginVB.CommandButtoncmdTurnAnti

Caption="正向"

Height=495

Left=5280

TabIndex=2

Top=1200

Width=1575

End

BeginVB.TextBoxtxtAngle

Height=375

Left=5280

TabIndex=1

Text="30"

Top=120

Width=1575

End

BeginVB.CommandButtoncmdTurn

Caption="反向"

Height=495

Left=5280

TabIndex=0

Top=600

Width=1575

End

End

AttributeVB_Name="FMain"

AttributeVB_GlobalNameSpace=False

AttributeVB_Creatable=False

AttributeVB_PredeclaredId=True

AttributeVB_Exposed=False

OptionExplicit

PrivateConstrPIAsSingle=3.14159265358979

PrivateiAngleAsInteger'转过角度

PrivateSubchkAuto_Click()

tmrTurn.Enabled=chkAuto.Value

EndSub

PrivateSubcmdTurn_Click()

iAngle=iAngle+Val(txtAngle.Text)

CallDraw

EndSub

PrivateSubcmdTurnAnti_Click()

iAngle=iAngle-Val(txtAngle.Text)

CallDraw

EndSub

PrivateSubForm_Load()

picDraw.Scale(-1,1)-(1,-1)'中心设为原点

picDraw.DrawWidth=5'加粗

EndSub

PrivateSubDraw()

picDraw.Cls

picDraw.Line(0,0)-(Cos(iAngle/180*rPI),Sin(iAngle/180*rPI))

EndSub

PrivateSubtmrTurn_Timer()

IfchkA.Value=0Then

CallcmdTurnAnti_Click

Else

CallcmdTurn_Click

EndIf

EndSub

矩形

PublicSubDrawRectangle(ByValWidthAsLong,ByValHeightAsLong,OptionalTopAsLong,OptionalLeftAsLong)

Line(Left,Top)-(Left+Width,Top)

Line(Left,Top)-(Left,Top+Height)

Line(Left,Top+Height)-(Left+Width,Top+Height)

Line(Left+Width,Top)-(Left+Width,Top+Height)

EndSub

定义一个数组记录某一个值是不是已经被使用

比如有10个数供选择,那就定义a[10],赋初值0,表示没有使用,当抽取一个号码后,比如是5,那就令a[5-1]=1,求救已经使用,每次取数时判断一下取得的数i对应的a[i]是否等于0就可以了.

长方体

PrivateTypexyz'定义3D坐标类型

yAsSingle

zAsSingle

EndType

Privatexyz1()Asxyz

Publicx0AsSingle,y0AsSingle,x1AsSingle,y1AsSingle

PrivateSubCheck1_Click()

Ifx1=0Ory1=0Then

ExitSub

EndIf

IfCheck1.Value=1Then'如果选择显示空间坐标轴,就画出空间坐标轴

Line(x1,y1)-(x1,y1-6400)

Line(x1,y1)-(x1+6400,y1)

Line(x1,y1)-(x1-4050,y1+4050)

Line(x1,y1-6400)-(x1-200,y1-6200)

Line(x1,y1-6400)-(x1+200,y1-6200)

Line(x1+6400,y1)-(x1+6200,y1+200)

Line(x1+6400,y1)-(x1+6200,y1-200)

Line(x1-4050,y1+4050)-(x1-4050,y1+3850)

Line(x1-4050,y1+4050)-(x1-3850,y1+4050)

Else

Cls

EndIf

EndSub

PrivateSubCommand1_Click()

drawpntVal(Text1.Text),Val(Text2.Text),Val(Text3.Text)'这是在三维空间画点的事件

EndSub

PrivateSubCommand2_Click()

CallVScroll1_Change(0)'画长方体

EndSub

PrivateSubCommand3_Click()

dmove0,500,0'移动

EndSub

PrivateSubCommand4_Click()

dmove-500,0,0'移动

EndSub

PrivateSubCommand5_Click()

dmove500,0,0'移动

EndSub

PrivateSubCommand6_Click()

dmove0,-500,0'移动

EndSub

PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)

Cls

x0=x

y0=y

x1=x

y1=y

CallCheck1_Click

ReDimxyz1(0To1)

xyz1(0).y=x

xyz1(0).z=y

PSet(x,y)

'在程序上点击鼠标画出空间坐标轴,并记录原点

EndSub

Subdrawpnt(dxAsSingle,dyAsSingle,dzAsSingle)

DimdxyAsSingle

dxy=Fix(dx*Sqr

(2)/2)

xyz1(0).y=x0-dxy+dy

xyz1(0).z=y0+dxy-dz

PSet(xyz1(0).y,xyz1(0).z)

'画点的过程

EndSub

Subdline(dx1AsSingle,dy1AsSingle,dz1AsSingle,dx2AsSingle,dy2AsSingle,dz2AsSingle)

Dimdxy1AsSingle,dxy2AsSingle

dxy1=Fix(dx1*Sqr

(2)/2)

dxy2=Fix(dx2*Sqr

(2)/2)

xyz1(0).y=x0-dxy1+dy1

xyz1(0).z=y0+dxy1-dz1

xyz1

(1).y=x0-dxy2+dy2

xyz1

(1).z=y0+dxy2-dz2

Line(xyz1(0).y,xyz1(0).z)-(xyz1

(1).y,xyz1

(1).z)

'划线的过程

EndSub

PrivateSubVScroll1_Change(indexAsInteger)

Ifx0=0Ory0=0Then

ExitSub

EndIf

Cls

CallCheck1_Click

DimaAsSingle,bAsSingle,cAsSingle

a=VScroll1(0).Value*900

b=VScroll1

(1).Value*900

c=VScroll1

(2).Value*900

squarea,b,c

'根据a,b,c(长,宽,高)来画长方体的过程

EndSub

Subsquare(aAsSingle,bAsSingle,cAsSingle)

dline0,0,0,a,0,0

dline0,0,0,0,b,0

dline0,0,0,0,0,c

dlinea,0,0,a,b,0

dlinea,0,0,a,0,c

dline0,b,0,a,b,0

dline0,b,0,0,b,c

dline0,0,c,a,0,c

dline0,0,c,0,b,c

dlinea,b,c,a,b,0

dlinea,b,c,a,0,c

dlinea,b,c,0,b,c

EndSub

Subdmove(dxAsSingle,dyAsSingle,dzAsSingle)

Ifx0=0Ory0=0Then

ExitSub

EndIf

Cls

CallCheck1_Click

x0=x0+dx

y0=y0-dy

CallVScroll1_Change(0)

'移动长方体的过程

EndSub

正方体和长方体的原理一样,写不动啦!

在VB环境中操作三维模型的实现方法

目前在虚拟设计和数控仿真程序的设计中,多采用VC和三维造型核心来实现对三维模型的显示和动态操作。

由于VC较难掌握,涉及到图形渲染和操作的部分更是如此,而且三维造型核心一般需要从国外购买,对于一般的开发应用来说因成本太高而缺乏可行性。

而VB作为一种完全面向对象的开发工具,在界面设计和数据库方面具有相当的优势,一般的设计人员也能够学习掌握,但是,在图形设计尤其是三维模型的显示和操作方面的研究和应用却不多。

因此研究利用VB来实现三维模型的图形设计,将会在虚拟设计和仿真程序中发挥巨大的作用。

   三维模型的显示

  目前对三维图形程序的开发大多是基于OpenGL来实现的,OpenGL实际上是一个独立于窗口系统和操作系统的开放式三维图形标准,得到了众多计算机厂商的支持。

作为一个优秀的三维图形接口,OpenGL提供了丰富的绘图命令,利用这些命令能够开发出高性能、交互式的三维图形应用程序。

它与VC有着紧密的开发接口,但由于VC对于一般非计算机专业的工程技术人员来说难以掌握,因而给工程领域的仿真程序设计带来了很大的不便。

但目前支持VB等开发工具的OpenGL开发库也开始出现。

本文就是基于VBOpenGL(vbogl.tlb)库来实现的,这是一个可免费使用的第三方库,它封装了大量的底层OpenGL库函数,很大程度上简化了开发工作。

   在VB中建立三维图形环境之前,首先要在“工程”菜单下通过“引用”子菜单下加入VBOpenGL库,然后在窗体上加入一个PictureBox控件作为三维模型的显示和操作区域。

   作为工程应用的虚拟设计或仿真程序,其三维模型可通过一般的三维造型软件如Solidworks来设计,然后通过软件提供的图形接口输出为中性文件。

目前主流的三维造型软件都支持多种标准文件格式,其中STL 文件是一种可读性较强的文件格式,适合在工程仿真程序中使用。

STL 文件格式最早是作为快速成型领域中的接口标准,已被广泛应用于各种三维软件中,很多主流的商用三维软件都支持STL 文件的输入输出。

STL模型是以三角形集合来表示物体外轮廓形状的几何模型,其中每个三角形面片有四个数据项表示,即三角形的三个顶点坐标和三角形面片的外法线矢量,STL 文件即为多个三角形面片的集合。

   因此在VB环境中可通过读入STL 文件并在绘图空间中重现的方法来显示三维模型。

首先对读入的STL 文件按行分解,从中解析出每个面元,并存储到结构体数组中,接下来的工作就是通过VBOpenGL中的glColor3d函数对每个面元进行渲染和着色,并把渲染的结果以图形的形式填充到PictureBox控件的绘图区中,最终实现整个模型的显示。

需要说明的是在显示三维模型之前,必须对VBOpenGL中的初始环境进行定义。

   三维模型的操作方法

   

(1)放大和缩小操作 对三维模型的操作一般包括放大、缩小、旋转和平移等操作,其中放大、缩小操作可通过同一个鼠标事件来驱动,例如当光标向上移动时使模型缩小,而光标向下移动时则使模型放大。

这可以通过调整Opengl环境中的景深来实现。

其中SVposY是光标移动过程中的上一个位置的纵坐标,而Y为当前光标的纵坐标,Zoom为模型的景深,step_zoom为光标移动一个基本单位时景深的变化值,它可通过程序的实际需要来设定。

以下是放大缩小操作的程序代码。

If Y < SposY Then

  Zoom = Zoom - step_zoom ‘缩小

Else

  Zoom = Zoom + step_zoom ‘放大

End If 

If Zoom < 0 Then Zoom = 0.0001 

   

(2)旋转操作 旋转操作是通过对模型场景视角的法向量按照一定的步幅来调整实现的。

下面的代码是鼠标事件中模型旋转操作的调整过程,当光标左右移动时,模型向左或向右反转,而当光标上下移动时,模型向上或向下反转,其旋转的速度可通过改变步幅来实现。

这里取步幅为0.005,它是以弧度为单位的一个角度值,首先要通过光标的当前位置和上次位置差的绝对值来判断光标的移动方向,然后根据判断出的光标方向给视角法向量的分量ym和xm增加或者减去一个步幅,从而实现模型在三维空间中的旋转操作,其中法向量的分量zm保持初始值不变。

diffx = Abs(SposX - X)

diffy = Abs(SposY - Y) 

If diffx > diffy T

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1