网格导出到封装的postscript

postscript教程  时间:2021-01-27  阅读:()

 下载演示项目 230 KB

 下载EPS示例418 KB

内容

 抽象

 简介

 应用程序应用程序

 导出到封装的postscript ( EPS )

 导出到Windows增强图元文件剪贴板( EMF ) 。

 导出到设备独立位图( DIB )剪贴板

 网格细分工具

 下载

 确认工具

 引用

 历史记录

抽象

This换句话说 /mfc程序生成的3D网格的分辨率独立版本如何将渲染结果导出到向量格式例如封装的postscript ( EPS )和Windows增强型图元文件( EMF )格式。 主要的目标是能够生成矢量图形来编辑。打印和说明目的。我们假设网格模型存储在97文件中这些文件通过3D Studio max导出。阅读本文并下载完整项目后你将能够

 在MFC MDI应用程序中使用OpenGL显示3D三角网格

 更改渲染选项如线框。平滑阴影。灯光和剔除等。

 将当前网格的渲染结果导出为封装的postscript ( EPS )格式

 通过剪贴板导出到Windows增强的图元文件( EMF )格式

 使用DIB格式将渲染图像复制到剪贴板中

 应用均匀循环细分方案[实现网格细分1 ] 。

尽管本文围绕Surface细分设计了一个小型3D库但它特别关注导出特性。特别是 VRML解析器是一个非常简单的实现插图目的并且不支持。 图概述了本文提供的导出功能。

图1.从左至右 在导出模型后 postscript浏览器ghostview显示三角网格并将模型导出为封装的postscript ( EPS )格式 PowerPoint显示剪贴板设备独立位图格式内容后 PowerPoint显示模型。

简介

每英寸1200个点。这是你最后一个高端激光打印机打印机所声称的图形分辨率。用如此精细的分辨率渲染高度详细的3D网格会很好。 例如渲染图像的打印结果 即使是最高的打印机分辨率也会导致大量内存空间。 一个非常好的解决方案是输出一个分辨率独立格式的网格 比如(封装的PostScript )或者EMF ( Windows增强型图元文件) 用true打印机分辨率。

感谢OpenGL提供的强大反馈机制 postscript输出问题可以发布。 这篇文章来自马克。 J 。 为了使它在mfc/mdi应用程序中运行 Kilgard和

Frederic Delhoume运行了它。 这是我从这里开始的文章。

使用gluProject命令。三角形项的z排序和GDI 2D绘图函数发出EMF格式。 本文还介绍了如何将相应的EMF流推到剪贴板 以便让我们在你喜欢的绘图工具中制作"粘贴"。

为了解决一些图形卡的问题本文还提出了一种低但鲁棒的DIB格式的输出用于一些图形卡的修复。 文章) 。

为了获得高分辨率打印的说明 Loop细分方案。 这个函数允许我们从粗糙的网格生成高度细节的网格作为示例文件的示例文件提供。

让我们来看看所提供的应用程序。

应用程序应用程序

应用程序是基于MDI MFC架构和图形库OpenGL的。 它提供了打开。显示和转换3D个三角形网格到EPS 。 EMF和DIB格式的最小特性集。 图形2描述应用程序工具栏 图形3演示了nefertiti网格上的几种渲染模式 图4显示了应用程序的附加快照已经打开四个网格。

图2.应用程序工具栏。 从左至右分别为每个带批注的按钮组 通过编辑可以将当前图形渲染到剪贴板中并根据当前投影矩阵生成一个EPS文件 由当前渲染过程生成一个EPS文件。 渲染模式对应顶点线条和三角形填充而主选项是平滑() 阴影边叠和光切换。 剔除选项也可以通过OpenGL菜单进行切换。 颜色按钮组允许更改网格面和顶点颜色 以根据y坐标(这里菜单已经添加到WMF演示目的中)应用彩虹颜色坡度(例如) 。 background颜色) 。

图3 。使用网格nefertiti.wrl.顶线条绘制了几种渲染模式 顶点。线条和面模式。 底线具有光滑阴影的面模式与每个顶点的y坐标和彩虹斜坡相同的叠加边和网格。 除了叠加的每个模式外都可以导出为封装的postscript格式。

图4.应用程序快照。打开和渲染四个网格这些选项由图detailed 。 3 NMT(数值模型地形)的颜色与海拔一致。

导出到封装的Postscript

目标是从当前视点所使用的3D个网格中生成一个EPS文件。 因此我们从3D提供的GL_FEEDBACK渲染模式中提取2D个基本元素在调用postscript2D绘图函数之前。 相应的几何图元可能是圆。笔画和填充具体取决于所选的OpenGL渲染模式(分别为顶点。直线或者面) 。 为了调试 SGI实现了GL_FEEDBACK渲染模式并输出了由浮点缓冲区中的呈现过程产生的2D个几何原始图元。 postscript渲染引擎(下面称为CPsRenderer )从这个缓冲区中提取几何原语并在一个EPS文件中输出相应的绘图函数(单击以下是下载示例EPS文件的示例 。 C++类CPsRenderer封装了由Mark J编写的C代码。Kilgard和Frederic Delhoume [ 3 ] 。

下面的伪代码总结了顺序

1. pFeedbackBuffer = new float [size]

2. glFeedbackBuffer(size,GL_3D_COLOR,pFeedbackBuffer)

3. glRenderMode(GL_FEEDBACK)

4. scene.Render() // immediate mode

5. NbValues = glRenderMode(GL_RENDER) // go back to rendering mode

6. PsRenderer.Run(pFilename,pFeedbackBuffer,NbValues,TRUE)

7. delete[] pFeedbackBuffer

注意这个代码对于单色基元(点。三角形和线段)运行非常好 当光滑阴影/着色被剪切时换句话说 。 平滑呈现效果是由三角形和线段元素的递归细分引发的直到颜色差小于PsRender.h.文件大小。

想尝试导出为EPS格式的示例 应用以下顺序

 启动bin/网格应用程序

 将venus.wrl文件拖到上面

 使用right/left/twice鼠标按钮改变视点

 选择菜单导出/eps 

 输入文件名

 启动GhostView并检查结果

 使用OpenGL菜单更改渲染选项(注意不导出边缘叠加选项并且

GhostView选项中的四个位深图显示。 不要担心这一点 因为它将被删

除在印刷

 从步骤3中重播序列。

对于需要你著名1200 dpi postscript激光打印机的非常密集的网格的black和白色渲染请应用以下顺序

 启动bin/网格应用程序

 将venus.wrl文件拖到上面

 使用right/left/twice鼠标按钮改变视点

 利用菜单网格/环细分(或者按Ctrl+L键)对均匀循环细分应用三次迭

代

 选择一个白色background (菜单opengl/清除颜色)

 选择black网格颜色(菜单Mesh/Color/Choose) ;

 检查线条渲染模式(菜单opengl/线条) 

 取消选中灯光选项(工具栏上的小太阳) 

 选择你的剔除选项偏好(菜单opengl/剔除)

 选择菜单导出/eps 

 输入文件名

 启动GhostView并检查结果

 将你的EPS文件插入你的LaTeX文档中

 检查文档。

下面是在视图派生类中定义的EPS导出函数

/*********************************

/OnExportEps

/*********************************void CMeshView: :OnExportEps()

{static char BASED_CODE filter[] ="EPS Files (*. eps) |*. eps";CFileDialog SaveDlg(FALSE, "*. eps", "mesh. eps",

OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,f i lter) ;if(SaveDlg.DoModal () == IDOK)

{

CString string = SaveDlg.GetPathName() ;char *pFilename = string.GetBuffer(MAX_PATH) ;

//Allocation

//no way to predict this, you may change it

//for large meshes.const int size = (int)6e6;

GLfloat *pFeedbackBuffer = new GLfloat[size] ;

ASSERT(pFeedbackBuffer) ;

CDC *pDC = GetDC() ;

//Useful in multidoc templates

: :wglMakeCurrent(pDC->m_hDC,m_hGLContext) ;

//Set feedback mode

: :glFeedbackBuffer(size,GL_3D_COLOR,pFeedbackBuffer) ;: :glRenderMode(GL_FEEDBACK) ;

//Render

: :glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;

//Position/translation/scale

: :glPushMatrix() ;

: :glTranslated(m_xTranslation,m_yTranslation,m_zTranslation) ;: :glRotatef(m_xRotation, 1.0, 0.0, 0.0) ;

: :glRotatef(m_yRotation, 0.0, 1.0, 0.0) ;

: :glRotatef(m_zRotation, 0.0, 0.0, 1.0) ;

: :glScalef(m_xScaling,m_yScaling,m_zScaling) ;

//Start rendering

CMeshDoc *pDoc = GetDocument() ;

//Std rendering (no superimposed lines anyway)

//do not use display lists here!pDoc->m_SceneGraph.glDrawDirect() ;

ZJI-全场八折优惠,香港服务器 600元起,还有日本/美国/韩国服务器

月付/年付优惠码:zji  下物理服务器/VDS/虚拟主机空间订单八折终身优惠(长期有效)一、ZJI官网点击直达ZJI官方网站二、特惠香港日本服务器香港大埔:http://hkdb.speedtest.zji.net/香港葵湾:http://hkkw.speedtest.zji.net/日本大阪:http://jpsk.speedtest.zji.net/日本大阪一型 ...

香港ceranetworks(69元/月) 2核2G 50G硬盘 20M 50M 100M 不限流量

香港ceranetworks提速啦是成立于2012年的十分老牌的一个商家这次给大家评测的是 香港ceranetworks 8核16G 100M 这款产品 提速啦老板真的是豪气每次都给高配我测试 不像别的商家每次就给1核1G,废话不多说开始跑脚本。香港ceranetworks 2核2G 50G硬盘20M 69元/月30M 99元/月50M 219元/月100M 519元/月香港ceranetwork...

6元虚拟主机是否值得购买

6元虚拟主机是否值得购买?近期各商家都纷纷推出了优质便宜的虚拟主机产品,其中不少6元的虚拟主机,这种主机是否值得购买,下面我们一起来看看。1、百度云6元体验三个月(活动时间有限抓紧体验)体验地址:https://cloud.baidu.com/campaign/experience/index.html?from=bchPromotion20182、Ucloud 10元云主机体验地址:https:...

postscript教程为你推荐
手机内存卡数据恢复如何恢复手机内存卡数据?笔记本内存价格笔记本更换运行内存多少钱???可爱桌面背景图片求好看的桌面背景图片涡轮增压和自然吸气哪个好发动机涡轮增压好还是自然吸气好炒股软件哪个好用玩股票哪个软件好?电陶炉和电磁炉哪个好电陶炉和电磁炉哪个好oppo和vivo哪个好OPPO手机和vivo手机哪个好?雅思和托福哪个好考雅思和托福哪个好考一点360云盘网页版登陆360云盘要求登录网页版是怎么回事360云存储360网盘目前最大空间是多少
vps交流 私服服务器 表单样式 sub-process 轻博 debian6 web服务器的架设 怎样建立邮箱 me空间社区 广州服务器 免费申请网站 卡巴斯基破解版 如何注册阿里云邮箱 789电视剧 宏讯 登陆qq空间 服务器硬件配置 双十二促销 register.com 建站技术 更多