将 3D 模型安装在窗口内

2023-12-11

我想显示适合视图的不同尺寸的模型,以便整个模型在屏幕内可见。
最好的方法是什么? 我尝试使用此公式缩放(使用 glScale)模型

scaleFactor = ( screenSize / (maxModelSize * constant) )

其中尺寸是高度或宽度,取决于哪个更大。
常数是1 / (length of one screen pixel in OpenGL units)
这样做有两个问题:
1.进行一些转换后,我希望能够使用 Identity 返回到此初始比例(模型缩放以适合窗口)。当前调用 Identity 会将模型恢复到其原始尺寸(在“固定”比例之前)。
2.“常数”是我通过反复试验得到的,我觉得方法不对。我还怀疑它根本不是一个常数,并且取决于屏幕分辨率,天知道还有什么。


第 8.070 条:

以下内容来自某网友的发帖 Dave Shreiner 谈如何建立一个基本的 观看系统:

首先,计算边界球 场景中的所有对象。这应该 为您提供两位 信息:球体的中心 (令 (c.x, c.y, c.z ) 为该点) 及其直径(称为“直径”)。

接下来,为 zNear 选择一个值 剪裁平面。一般准则是 选择大于但是 接近1.0。所以,假设你设置了

zNear = 1.0; zFar = zNear + diam; 

在此构造您的矩阵调用 顺序(对于正交 投影):

GLdouble left = c.x - diam; 
GLdouble right = c.x + diam;
GLdouble bottom c.y - diam; 
GLdouble top = c.y + diam; 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(left, right, bottom, top, zNear, zFar); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

这种方法应该集中你的 窗口中间的物体 并拉伸它们以适合(即,它的 假设您使用的是窗口 纵横比 = 1.0)。如果你的 窗口不是正方形,计算左边, 右、下、上,如上,以及 在之前添加以下逻辑 调用 glOrtho():

GLdouble aspect = (GLdouble) windowWidth / windowHeight; 
if ( aspect < 1.0 ) { 
    // window taller than wide 
    bottom /= aspect; 
    top /= aspect; 
} else { 
    left *= aspect; 
    right *= aspect;
} 

上面的代码应该定位 场景中的对象适当地。 如果您打算操纵(即 旋转等),您需要添加一个 观看变换到它。

典型的观看变换将会继续 ModelView 矩阵,可能看起来 像这样:

GluLookAt (0., 0., 2.*diam, c.x, c.y, c.z, 0.0, 1.0, 0.0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 3D 模型安装在窗口内 的相关文章

  • glDeleteTextures在Windows上似乎没有释放纹理内存,有没有解决办法?

    我的 openGL 应用程序内存不足 遇到一些问题 我正在尝试找出我的问题 为此 我创建了一个小型测试程序 它基本上只是从调用 glDeleteTextures 的文件中加载一个巨大的纹理 然后再次加载它 如果我在 OSX 上运行这个测试程
  • Swift 3:绘制矩形

    我刚接触 swift 三天 我正在尝试弄清楚如何绘制矩形 我对这门语言太陌生 不知道要扩展的类和要重写的方法 并且我四处寻找示例代码 但似乎没有任何效果 我将其归因于我对 swift 3 的使用 我现在正在尝试的是 import UIKit
  • GLSL聚光投影体积

    在我的开源项目中 我使用 Qt3D 设置了延迟渲染管道 到目前为止一切顺利 但现在我想通过添加聚光灯投影量来继续前进 例如场景中好像有烟雾 像这样 我正在使用的片段着色器位于问题的末尾 我读过 对于每个片段 我应该从光位置进行光线行进并找到
  • 按像素值偏移 gl_Position 或 gl_Vertex

    我的属性包含像素值 我想用这个属性值来偏移我的 gl vertex 问题是我的 gl vertex 以世界单位为单位 而 offset attribute 以像素为单位 如果我将屏幕尺寸作为统一发送 然后将像素转换为 1 到 1 值 并将其
  • OpenGL - 自动生成 glDrawArrays 的索引/步幅参数

    我正在渲染一个包含大量数据点 gt 1M 的网格结构 我的数据结构如图所示 所以我的索引缓冲区的内容看起来像这样0 100 1 101 2 102 3 103 我对索引缓冲区的巨大尺寸有点恼火 我需要它来定义我的三角形带 是否有可能告诉 O
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • 创建并使用我自己的纹理图集的 mipmap

    我目前正在使用自动 mipmap 生成 C OpenTK GL GenerateMipmap GenerateMipmapTarget Texture2D 我使用的纹理平铺为 16px 的块 所以我的问题是 是否可以使用不会缩小至 1x1
  • 获取包含位图支持的画布的 Android 视图上的点的像素颜色值

    我正在尝试找出获取给定点上像素颜色值的最佳方法View http developer android com reference android view View html 我可以通过三种方式写入视图 我设置了背景图像View setBa
  • 如何使 CSS 动画/过渡以固定速度而不是固定持续时间播放? [复制]

    这个问题在这里已经有答案了 我有一个 CSS 动画 可以使元素沿直线移动未定义的距离 据我所知 动画具有固定的持续时间 因此无论元素必须移动多远 动画始终需要相同的时间来运行 我该如何制作才能使动画没有固定的duration 但有固定的运动
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • 为什么 cudaGLSetGLDevice 失败,即使它是在 main 函数的第一行中调用的

    我想使用 OpenGL 和 CUDA 之间的互操作性 我知道 正如一些教程所说 第一步是选择设备 但是 当我在主函数的第一行中调用 cudaGLSetGLDevice 0 时 程序退出并显示信息 cudaSafeCall 运行时 API 错
  • OpenGL纹理渲染与原始不匹配

    我正在尝试使用 OpenGL 渲染纹理 我用作测试的纹理是白色背景上的一堆黑色矩形 如下所示 然而 在渲染时 纹理似乎被复制并叠加在其自身之上多次 我使用以下方法设置场景 std string vertexSource ShaderLoad
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • Visual C++ MFC 中窗口启动时的事件顺序

    假设我有一个从 CWnd 派生的类 它具有事件处理函数OnPaint OnCreate and OnSize 如您所知 所有这些都是在窗口启动时发生的 但我想看看它们之间的顺序是什么 例如 当我在其中一个中设置断点时 在结束函数后 控制不会
  • 在列标题上绘制矩形

    I m painting rectangle on the column headers in datagridview but on scrolling to right it disappears as in the picture s
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • 使用 OpenGL 渲染 QImage

    与我相关的其他问题 https stackoverflow com questions 20126354 render qimage from sooffscreenrenderer in qglwidget 我认为更核心的问题是 如何渲染
  • 从主模块访问动态功能模块的可绘制文件夹中的图形

    我正在尝试动态模块拆分 API 交付 以便将我的游戏应用程序分解为即时版本和可安装版本 我一直在关注这里的 Codelabs 教程https codelabs developers google com codelabs on demand
  • 如何将CString转换为整数和浮点数? [复制]

    这个问题在这里已经有答案了 我正在尝试转换CStringint 和 float 但无法找到任何 C 库函数来完成此操作 请帮忙 正确的UNICODE 符合规定的方式MFC如下 CString sInt T 10 int n ttoi sIn
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约

随机推荐

  • dotnet 不支持多重继承。但多接口支持吗? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的多重继承 dotnet 不支持多重继承 但多种接口支持 为什么会存在这种行为 有具体原因吗 您可以使用接口模拟多重继承 如果允许类的多重继承 则会导致钻石问题 由于不支持多重继承的原因 我建议
  • IF 条件 - 连接多列

    我需要统计一个术语出现的次数 不幸的是 这些术语组织得不好 因此一个术语可能会出现在多个列中 所以我不能只使用 If A1 HEALTH 1 0 因为HEALTH出现在多个列 A B C 等中 我尝试过嵌套 IF A1 HEALTH 1 I
  • 为什么 TF-IDF 的值与 IDF_ 不同?

    为什么向量化语料的值与通过向量化得到的值不一样idf 属性 不应该idf 属性只是以与语料库矢量化中出现的相同方式返回逆文档频率 IDF from sklearn feature extraction text import TfidfVe
  • 只有一个底层锁的读写锁?

    我已经使用 Python 的并发原语编写了一个读写锁 我认为 我在 SO 或其他地方读到的每个实现似乎都使用 2 个锁 一个用于读取 另一个用于写入 我的实现只包含一个用于读取的监视器 但我可能遗漏了一些重要的东西 任何人都可以确认这会起作
  • 电晕将单选按钮转换为数字文本框(lua)

    我正在尝试创建一个有关医疗保健的移动应用程序 我必须创建一个类似调查的应用程序来筛选患者 现在我已经使用单选按钮完成了调查的一部分 另一部分也看起来像这样 见下图 但我希望单选按钮更改为数字文本框 我的应用程序看起来像这样 现在我想将单选按
  • lapply 代替 for 循环进行随机假设检验 r

    我有一个看起来像这样的 df set seed 42 ID lt sample 1 30 100 rep T Trait lt sample 0 1 100 rep T Year lt sample 1992 1999 100 rep T
  • Rails table_name_prefix 未按预期工作

    我正在使用 Rails 4 我有app models admin rb and app models admin retention email rb有这样的东西 app models admin rb module Admin def s
  • 在 Javascript 中监听我的 Flash 事件

    我正在尝试使用 OVP 播放器构建一个带有播放列表的基本视频播放器 到目前为止 我已经弄清楚如何使用ExternalInterface输入新的视频源 但我不知道如何侦听Flash事件 EVENT END OF ITEM 如何在 Javasc
  • 如何使新添加的复选框与任务一起工作?

    我已在我的 inno 设置任务页面添加了新的复选框 但我不知道如何使它们与任务一起工作 我希望它们与脚本中的 任务 区域一起工作 Tasks Name Newcheckboox1 Description Newcheckbox1 MinVe
  • 使用附件时,Send-MailMessage 会关闭每第二个连接

    我正在尝试编写一个 powershell 脚本来向 30 个人发送带有一些附件的电子邮件 这些电子邮件是个性化的 因此必须单独发送 该脚本无需附件即可正常工作 但是 使用附件时 Send MailMessage 的所有其他实例都会失败 并显
  • 更改悬停时的背景图像

    图像的比例与该问题有关系吗 menu background black width 100 height 45px menu ul text decoration none list style type none menu li text
  • 将 UIImage 转换为 8 位

    我希望将 UIImage 转换为 8 位 我尝试这样做 但我不确定我是否做得正确 因为稍后当我尝试使用图像处理库 leptonica 时收到一条消息 指出它不是 8 位 谁能告诉我我是否正确执行此操作或如何执行此操作的代码 Thanks C
  • 将列表拆分为大小递减的子列表

    假设我有一个列表 list 0 1 2 3 我如何将列表分成类似的内容 new list 0 1 2 3 1 2 3 2 3 3 我尝试过使用 def change list new list for i in range len list
  • rPython 包无法在 R Shinyshinyapps.io 上安装

    shinyapps io 服务器没有安装 python 吗 因为包rPython安装失败 需要安装python 如果答案是否定的 我觉得很奇怪 因为 RStudio 本身有蟒蛇支持 shinyapps io 服务器是否支持 python 或
  • 在 Google Cloud Platform 存储桶上托管静态网站时的 DNS

    抱歉 如果我的问题看起来很混乱 我对 DNS 或托管只有一个基本的了解 故事是这样的 我创建了几个个人网页并注册了一个域名 然后我发现我的几个页面不需要 大 托管 最好在云中托管一个网站 我选择了 GCP 进行托管 发现this教程并遵循以
  • 拖动后标记位于地图中心

    我在我的网站上实现了谷歌地图 用户可以拖动标记并获取坐标 它工作正常 但要求是当用户拖动标记时 拖动标记后应该出现在地图窗口的中心 或者如果用户拖动地图 那么在这种情况下标记也出现在地图窗口的中心 我有以下代码 仅适用于地图上的拖动标记 但
  • 让 Flexbox 中的图像填充所有垂直空间并保持完全可见

    我需要在 div 左侧放置一个图像 并放置该图像 与 div 高度相同 其本身具有非固定的 与内容相关的高度 完全可见 保持其纵横比 Flexbox 似乎非常适合这项工作 但当将图像设置为 100 高度时 其尺寸保留自然宽度 内容会溢出到
  • centos 8,firewalld 错误`COMMAND_FAILED:'python-nftables'失败`[关闭]

    Closed 这个问题是与编程或软件开发无关 目前不接受答案 当我尝试重新加载firewalld时 它告诉我 Error COMMAND FAILED python nftables failed internal 0 0 0 Error
  • appendChild 仅在第一次有效

    我想通过同一页面上的按钮和事件处理程序将相同的内容重复附加到元素 我遇到的问题是它只能在第一次使用 它第一次完全按照我想要的方式执行 然后在后续按下按钮时无法执行任何操作 我查了一下 似乎在第一个追加之后 newstuff innerHTM
  • 将 3D 模型安装在窗口内

    我想显示适合视图的不同尺寸的模型 以便整个模型在屏幕内可见 最好的方法是什么 我尝试使用此公式缩放 使用 glScale 模型 scaleFactor screenSize maxModelSize constant 其中尺寸是高度或宽度