Articles of 球体

在生成的球面上切线

我很难理解法线贴图的切线/颠覆性概念,或者说它们的计算。 我用OpenGL红皮书http://www.glprogramming.com/red/chapter05.html中的代码绘制了一个球体。 我使用立方体贴图来渲染球体。 现在,几乎所有的网页链接http://www.terathon.com/code/tangent.html 。 但在该algorithm中,他们使用纹理坐标u和v,我没有这样做,因为我的纹理贴图是3D … 任何指向我如何计算切线和bitangents与此设置? 另外,切线是不是正交于球体上一个点的法线的vector? 对我来说似乎可以有一个更简单的方法.. 编辑:据我所知,我需要这些值能够“正常”从法线地图到球体上的点。 (我不确定这里有什么正确的math术语)。 换句话说,基于法线映射来偏离球体上任何点的法线。 我将法线计算为point_on_surface – center_of_sphere(在模型空间中,当中心是(0,0,0)时,就是point_on_surface)

相机与球体表面alignment

我正在编写一个星球渲染器,并遇到了一个真正限制程序可用性的问题。 当我在地球上(除了北极的任何地方),我不能像在平面上那样将摄像机向左或向右转动。 相反,我只能移动,就好像我与一架普通的平面飞机一样。 这让我感到尴尬观看如下所示: 这限制了我只能直视镜头前方,直视镜头。 我画了这个试图说明这个问题: 将相机的向上向量设置为我所在的球体上的点归一化缓解了这个问题? 我在这里是一个死胡同,任何想法将不胜感激。 谢谢。

在3D地形上移动3D物体

我试图控制一个3D对象(只是一个盒子),在一个球形的3D行星上移动,我使用Ray来find对象下面的球体中的三角形。 我正在计算表面法线,它的工作目前为止,但现在我想要旋转的对象或只是被迫根据从球体三角形的表面法线alignment,使对象的向下的vector将在相同的角度作为表面法线vector,使其与表面成直角。 我search了互联网,但几个星期后还没有成功。 当我在地球/球体周围自由移动时,我怎样才能让自己的物体与地表正常alignment? 我正在试着像一辆汽车在一个球体的表面上行驶。 问题是,如何将对象与曲面法线alignment? 我目前的代码是find盒子下面的三角形,现在我想把对象与它alignment。 我在C#VS Studio 2017中使用Monogame

球弹跳在3d

我无法得到我的反弹方程式。 我有2个领域,可以在任何角度colide。 一个永远静止不动,另一个正在移动空间。 我有移动球的X,Y,Z速度和固定球方向上的正常vector。 明显的想法是 ballSpeedX * = -1; ballSpeedY * = -1; ballSpeedZ * = -1; 当然,只有在面对面的情况下才会头痛,但是在面对面的情况下,它会朝错误的方向反弹。 ballSpeedX * = -vectorX; ballSpeedY * = -vectorY; ballSpeedZ * = -vectorZ; 也错:D

使对象面对球体上的另一个对象

我在Unity里面有一个游戏,在随机位置上有一个球体上有两个物体(和随机的旋转)。 我希望其中一个物体始终旋转,这样如果它发射子弹(最终目标),它将沿着球体周围的最短弧线在另一个物体上发射。 我面临的问题是我不知道如何创建一个球体表面上的对象的旋转,并指向另一个对象。 在这之后,我也可以看到一个问题,我需要它在最短的距离上指向另一个对象,因为总是会有两个指向的方向。 有没有人做过这样的事情? 肯定停留在这一个。

子弹方向在球体周围不正确

这里有一个关于如何设置我的游戏对象的小背景,以及旋转和发射子弹是如何工作的。 我正在Unity的这个游戏上工作。 我有两个围绕着一个球体的游戏对象(为了简单起见,我们可以说玩家是太空飞船,而敌人是UFO)。 UFO在球体周围以球形方式射击(至less我的意图是)。 船和UFO都有一个父游戏对象,位于球体的中心,每个都在Z轴上移动10个单位。 所有的运动旋转被应用到母枢轴点,这使得两个物体随着枢轴点旋转而在任何方向上自由地运转。 在之前的这个问题中,我得到了一些帮助,让我的子弹从UFO飞向船上。 所提供的解决scheme效果很好,UFO总是在船飞行时向船上发射子弹。 一旦两个物体移动到球体的相对侧(距离原始起点180度),发射子弹的方向似乎是镜像的。 当船飞行时,子弹向镜面方向飞行。 这里是我如何旋转项目符号(注意:我也使用与上述项目符号相同的枢轴点技术): 当我射击一颗子弹时,首先产生一个方向vector,如下所示: var ufoSpoke = ufo.transform.position – Vector3.zero; var shipSpoke = ship.transform.position – Vector3.zero; var pointOut = Quaternion.LookRotation(ufoSpoke, -shipSpoke); var pointOnShortestArc = pointOut * Quaternion.Euler(90f, 0, 0); var direction = (pointOnShortestArc * Vector3.right).normalized * 50f; 现在在子弹中心点的更新方法中,我在这个方向上旋转中心对象: transform.Rotate(direction.y * Time.deltaTime, -direction.x * Time.deltaTime, 0f); 这一切都很好,直到船和UFO开始在球体周围移动。 最终计算出的子弹方向从稍微偏离,在球体的背面镜像一次。如果我将飞船飞回原始起点,子弹方向会适当地返回。 […]

OpenGL计算UV球体顶点

我正在尝试在C ++中实现一个类Sphere 。 因此,我想计算类的构造函数中的顶点(或在一个单独的函数..)。 虽然我读了大量有关以不同方式创建球体的文章(UV Sphere,Quad Sphere,Icosphere等),但我不知道如何为我的缓冲区对象创建顶点。 我决定使用UV Sphere,因为它很容易映射纹理。 从这个意义上说,“紫外球体”就是(四边形)边缘像经线和纬线那样运行,纹理像等量矩形投影那样映射到球体。 ( 由Strebe通过维基共享资源,CC BY-SA 3.0获得Equirectangular Earth texture ) 但我怎样才能计算所有的顶点位置和纹理坐标? 对于我的顶点我使用一个Vertex结构: struct Vertex { glm::vec3 position; glm::vec2 texture; };

Unity3D – 确定球面物体是否使用光线投射

我正在制作围绕空间移动球的游戏。 我的比赛有一个跳跃机制,所以我需要知道什么时候我接地,以确定何时能跳。 最好的方法来检查这是从球的起源设置raycast,并使其不断面朝下。 然而,我遇到了一个令人尴尬的问题:球继续旋转,所以我无法find一个恒定的向下射线来寻找地面。 我开始制作类似于这个对象的局部变换的代码: bool grounded = false; Ray ray = new Ray(transform.position, -transform.up); RaycastHit hit; if(Physics.Raycast(ray, out hit)){ //determine if object is on ground grounded = true; } 这就引起了我之前提到的问题,即光线会向下指向,而不是相对于目标的当前旋转。 换句话说,如果球倒过来,射线会朝上。 我现在的代码与这个看起来很相似,现在使用世界空间来确定什么是'down': bool grounded = false; Ray ray = new Ray(transform.position, -Vector3.up); RaycastHit hit; if(Physics.Raycast(ray, out hit)){ //determine if object is on ground grounded […]

错误的交叉点:Bounding Sphere和Ray

XNA中的BoundingSphere和Ray s有一个很大的问题,我真的不知道如何解决这个问题。 问题: foreach (BoundingSphere s1 in GetCollisionHullBoundingSpheres()) if (ray.Intersects(s1) != null) { System.Console.WriteLine("Sphere: " + s1.Center + " Radius: " + s1.Radius); System.Console.WriteLine("Ray: " + ray.Position + " Direction: " + ray.Direction); System.Console.WriteLine("Ray: " + ray.Intersects(s1).Value + "\n"); return true; } 碰撞包围球是网格中的球体,射线是通过使用playerposition和vector(0,-5,0)作为方向来计算的。 这是输出: Sphere: {X:-16,52211 Y:-3,34731 Z:-15,66445} Radius: 5,077909 Ray: {X:75,29767 Y:29,15445 Z:-45,73476} Direction: […]

3D球体一代

我已经在一个封闭的游戏引擎中find了一个3D球体,我真的很喜欢它的外观,并且希望在我自己的3D引擎中有类似的东西。 这就是在程序/游戏开始时,在游戏引擎中创建球体时的样子: 在程序启动时,调用名为CreateSphere的函数,用户可以select3D位置和球体的半径。 这就是我所知道的关于这个function,因为引擎是封闭的源。 任何人有任何想法如何可以以编程方式生成这个领域? 我已经检查了讨论球体的其他post/站点,但是没有一个球体的图像中有球体的外观。 编辑:删除了一些不必要的信息,以达到我需要帮助的地步。