首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在任意轴上缩放物体(在3D空间中)

如何在任意轴上缩放物体(在3D空间中)
EN

Stack Overflow用户
提问于 2013-08-11 13:40:12
回答 2查看 3.4K关注 0票数 2

我正在用opengl用c++编写一个物理模拟器,我需要能够沿着相机面对的轴缩放物体(现在大部分是立方体)。

我可以很好地绘制对象,使用它作为我的模型矩阵:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mat4 Model = Translate(cube.Position - float3(gl.Position.x, gl.Position.y, -gl.Position.z)) * Rotate(cube.Rotation) * Scale(cube.Scale);

在gl.Position是凸轮的位置,float3是一个vec3,就像我写的类,等等。

因此,我试图修改该行,使其在所有其他内容之前都包含一个缩放因子(在这里,首先应用末尾的内容):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mat4 Model = Translate(cube.Position - float3(gl.Position.x, gl.Position.y, -gl.Position.z)) * Rotate(cube.Rotation) * Scale(cube.Scale) * (Rotate(float3(gl.Rotation.x, gl.Rotation.y, gl.Rotation.z)) * Scale(float3(1.0f, 1.0f, sqrt(1 - (velocity * velocity)))) * Rotate(float3(tau - gl.Rotation.x, tau - gl.Rotation.y, tau - gl.Rotation.z)));

这是最后一个重要的部分,在这里我旋转物体,缩放它,然后把它旋转回来。sqrt(1 -(速度*速度))是物理部分(洛伦兹收缩),gl.Rotation是一个vec3,其中每个轴都保持凸轮的俯仰、偏航和滚动半径。我的平移,旋转等功能工作正常,但我需要理论上的帮助,建立一个矩阵的规模。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-12 13:49:51

我通过编写这个基于pippin1289 1289的解决方案的函数来解决这个问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mat4 ScaleOnAxis(float3 a)
{
    a = Norm3f(a);

    if(a == x || (a.x == -1.0f && a.y == 0.0f && a.z == 0.0f))
        return Scale(0.2f, 1.0f, 1.0f);

    float3 axis = Cross(a, x);
    float theta = acos(Dot(a, x));

    if(theta > pi / 2)
    {
        axis = axis * -1.0f;
        theta = pi - theta;
    }

    Quaternion ToRotation(axis.x, axis.y, axis.z, theta);
    Quaternion FromRotation(axis.x, axis.y, axis.z, tau - theta);

    return mat4(FromRotation) * (Scale(float3(0.2f, 1.0f, 1.0f)) * mat4(ToRotation));
}

它返回一个矩阵,它将在轴上缩放0.2。

票数 1
EN

Stack Overflow用户

发布于 2013-08-11 13:53:29

缩放矩阵的形式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{s_x, 0, 0, 0},
 {0, s_y, 0, 0},
 {0, 0, s_z, 0},
 {0,  0,  0, 1}}

假设坐标一致。

要应用它们,你需要缩放,然后旋转,然后平移。我建议使用gl函数来做到这一点。假设您希望您的对象位于x,y,z位置,并且它的旋转为四元数{theta,r_x,r_y,r_z}。需要在模型坐标系中进行缩放和旋转。GL以适当的顺序应用转换,因此其代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
glTranslatef(x, y, z);
glRotatef(theta, r_x, r_y, r_z);
glScalef(s_x, s_y, s_z);

//draw my model
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18176983

复制
相关文章
在Android上用AI识别物体
AI其中一个很重要的应用就是物体识别。 今天我们来看看如何在Android上实现这个功能。
PhoenixZheng
2018/12/19
4.4K2
Confluence 6 内容在空间中是如何组织的
你可以将空间考虑为一个容器,在这个容器中保持了有关你项目中所有重要的东西,包括小组,项目或者项目相关的工作。这些东西有很高的自主性,这表示的是每个空间都有自己的的页面,文件,评论以及 RSS 新闻源。
HoneyMoose
2019/01/30
5490
Confluence 6 内容在空间中是如何组织的
在 React 中缩放、裁剪和缩放图像
在本文中,我们将了解如何使用 Cropper.js 在 React Web 应用中裁剪图像。尽管我们不会将这些图像上传到远程服务器进行存储,但是很容易就能完成这个任务。
疯狂的技术宅
2020/02/26
6.4K0
在 React 中缩放、裁剪和缩放图像
在 Java 中如何优雅地判空
  作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException。
芋道源码
2019/11/21
2.4K0
在Java中如何优雅地判空
作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢 NullPointerException。
JAVA葵花宝典
2019/11/15
1.5K0
Three.js基础之变换3D对象 | 《Three.js零基础直通04》
经过上一小节《使用Three.js构建基础3D场景 | 《Three.js零基础直通03》》,基础场景已经有了,现在我们来探索Three.js的一些功能。
大帅老猿
2022/06/06
3.5K0
Three.js基础之变换3D对象 | 《Three.js零基础直通04》
如何通过BDC反序列化在Microsoft SharePoint上执行任意代码
在今年年初,研究人员Markus Wulftange(@mwulftange)曾报告过Microsoft SharePoint中的一个远程代码执行漏洞(RCE),该漏洞的CVE编号为CVE-2019-0604。而在今年的九月初,Markus又在SharePoint中发现了另外三个新的远程代码执行漏洞,即CVE-2019-1295,CVE-2019-1296和CVE-2019-1257。在这篇文章中,我们将对最后一个漏洞,也就是CVE-2019-1257(ZDI-19-812)进行详细分析。目前,所有版本的SharePoint都会受到该漏洞的影响,微软方面也将该漏洞的可利用等级评估为最高等级,这也就意味着在不久的将来,会有很多网络犯罪分子利用该漏洞实施攻击。
FB客服
2019/11/06
1.3K0
如何通过BDC反序列化在Microsoft SharePoint上执行任意代码
CA1050:在命名空间中声明类型
应在命名空间内声明类型以避免名称冲突,并作为一种在对象层次结构中组织相关类型的方式。 任何命名的命名称空间之外的类型均位于无法在代码中引用的全局命名空间中。
呆呆
2022/01/10
4620
【CSS3】CSS3 3D 转换 ① ( CSS3 3D 转换简介 | 3D 物体与 2D 物体区别 | 3D 空间坐标系 | 常用的 3D 转换属性 | 3D 位移转换语法 | 代码示例 )
3D 显示的物体 与 平面 2D 显示的物体有明显的不同 , 3D 显示效果有 近大远小 的 特点 ;
韩曙亮
2023/10/15
2220
【CSS3】CSS3 3D 转换 ① ( CSS3 3D 转换简介 | 3D 物体与 2D 物体区别 | 3D 空间坐标系 | 常用的 3D 转换属性 | 3D 位移转换语法 | 代码示例 )
相机成像的几何原理
为了轻松理解问题,我们假设您在一个房间内部署了一个摄像头。 给定这个房间中的 3D 点 P,我们想在相机拍摄的图像中找到该 3D 点的像素坐标 (u,v)。
为为为什么
2023/04/16
1.3K0
相机成像的几何原理
在vue中如何实现点击变成全屏及缩放
项目中有点击按钮实现全屏功能 目录 方式一:js实现全屏 方式二:使用的是sreenfull插件,执行命令安装 方式一:js实现全屏 <template> <div> <a-button type="primary" @click="screen">全屏</a-button> </div> </template> data: data() { return { fullscreen: false }; }, methods: screen() {
江一铭
2022/06/16
1.5K0
在vue中如何实现点击变成全屏及缩放
一日一技:在Python里面判断多个变量全部/任意不为空
我们在写Python 函数的时候,可能会需要判断传入的多个参数是否同时为空/None/False,或者是否有任何一个不为空/None/False。可能有人会这样写:
青南
2019/05/09
6.8K0
【Unity3D】游戏物体操作 ② ( 3D 原生物体 | 立方体 | 球体 | 平面 | 物体移动 | 沿坐标轴移动 | 沿坐标平面移动 | 在 Inspector 检查器窗口设置坐标属性 )
Unity 中自带的 3D 模型 , 可以通过选择 " 菜单栏 | GameObject | 3D Object " 选项查看 ; Unity 中的 1 单位长度 = 1 米 , 这个长度只是 约定单位 , 不是绝对要求的 , 可以根据实际情况进行修改 ;
韩曙亮
2023/03/30
1.2K0
【Unity3D】游戏物体操作 ② ( 3D 原生物体 | 立方体 | 球体 | 平面 | 物体移动 | 沿坐标轴移动 | 沿坐标平面移动 | 在 Inspector 检查器窗口设置坐标属性 )
Direct3D 11 Tutorial 4: 3D Spaces_Direct3D 11 教程4:3D空间
在上一个教程中,我们在应用程序窗口的中心成功渲染了一个三角形。 我们没有太注意我们在顶点缓冲区中拾取的顶点位置。 在本教程中,我们将深入研究3D位置和转换的细节。
Zoctopus
2018/10/11
1K0
Direct3D 11 Tutorial 4: 3D Spaces_Direct3D 11 教程4:3D空间
Unity3D游戏开发初探—2.初步了解3D模型基础
  简而言之,3D模型就是三维的、立体的模型,D是英文Dimensions的缩写。
Edison Zhou
2018/08/20
1.7K0
Unity3D游戏开发初探—2.初步了解3D模型基础
在 CentOS 7 上如何安装更新
保证你的 CentOS 系统更新到最新是整个系统安全中最重要的部分之一。如果你不经常使用最新的系统安全补丁来更新系统,你的机器将会很容易被攻击。
雪梦科技
2020/05/11
5K0
在 CentOS 7 上如何安装更新
在matplotlib中关闭绘图轴的方法
# Keep making random walks, as long as the program is active
用户7718188
2021/10/08
2.2K0
在Windows上如何后台运行JuiceFS
JuiceFS的Badger引擎改造完成以后,需要在Windows下面进行后台运行。因为现有的JuiceFS中还没有在Windows下的后台运行实现,所以需要通过其他途径解决。
用户1260683
2022/03/30
2.9K0
在Windows上如何后台运行JuiceFS
论文解释:SeFa ,在潜在空间中为 GAN 寻找语义向量
SeFa — Closed-Form Factorization of Latent Semantics in GANs
deephub
2022/04/14
1K0
论文解释:SeFa ,在潜在空间中为 GAN 寻找语义向量
物体可见性信息在3D检测中的探索CVPR2020(oral)
本文是一篇来自Carnegie Mellon大学和Argo AI的合作工作,目前已经被CVPR20接收(oral),该文的主要内容是基于点云的3D目标检测,与以往的研究内容不同的是,本文基于观察发现在BEV视图中无法区分free和unknown区域,如下图中(a)展示的两个红色框所示,在BEV看上去都是不包含点的free space。但是假如通过lidar的扫描的激光对该图重新绘制如图(b),其中绿色表明为激光扫描到的区域,白色为未知的区域,即白色是被前景物体所遮挡的区域,而绿色是真正被扫描到的,因此,我们可以得到的信息是左边的红框区域表示的是未知,而右边实际上是真正的freespace。因此本文的作者正是利用freespace的信息来提高检测精度。
3D视觉工坊
2020/12/11
9310
物体可见性信息在3D检测中的探索CVPR2020(oral)

相似问题

使用矢量使物体在3D空间中减速

12

计算任意轴上物体的世界向上向量(ThreeJS)

10

在3D空间中相对缩放对象集合

22

在二维空间中任意缩放和旋转

25

如何让物体在z轴上整体移动?

213
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文