下载演示项目 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 下物理服务器/VDS/虚拟主机空间订单八折终身优惠(长期有效)一、ZJI官网点击直达ZJI官方网站二、特惠香港日本服务器香港大埔:http://hkdb.speedtest.zji.net/香港葵湾:http://hkkw.speedtest.zji.net/日本大阪:http://jpsk.speedtest.zji.net/日本大阪一型 ...
香港ceranetworks提速啦是成立于2012年的十分老牌的一个商家这次给大家评测的是 香港ceranetworks 8核16G 100M 这款产品 提速啦老板真的是豪气每次都给高配我测试 不像别的商家每次就给1核1G,废话不多说开始跑脚本。香港ceranetworks 2核2G 50G硬盘20M 69元/月30M 99元/月50M 219元/月100M 519元/月香港ceranetwork...
6元虚拟主机是否值得购买?近期各商家都纷纷推出了优质便宜的虚拟主机产品,其中不少6元的虚拟主机,这种主机是否值得购买,下面我们一起来看看。1、百度云6元体验三个月(活动时间有限抓紧体验)体验地址:https://cloud.baidu.com/campaign/experience/index.html?from=bchPromotion20182、Ucloud 10元云主机体验地址:https:...