标签: 3d

在同一平面内具有相同原点的两个3D矢量之间的有符号角度

我需要的是位于同一3D平面内且具有相同原点的两个矢量Va和Vb之间的有符号旋转角度,知道:

  1. 包含两个矢量的平面是任意的,并且不与XY或任何其他基本平面平行
  2. Vn - 平面法线
  3. 两个向量与法线具有相同的原点O = {0,0,0}
  4. Va - 是测量Vn左手旋转的参考

应该以这样的方式测量角度,因此如果平面是XY平面,则Va将代表它的X轴单位矢量.

我想我应该通过使用Va作为X轴并将Vb和Vn的叉积作为Y轴来执行一种坐标空间变换,然后使用像atan2()或其他东西一样的2d方法.有任何想法吗?公式?

math 3d geometry vector

50
推荐指数
5
解决办法
6万
查看次数

为什么3D引擎主要使用三角形来绘制曲面?

为什么三角形总是用于在3D中绘制曲面?为什么不是正方形或其他形状?

3d

49
推荐指数
3
解决办法
2万
查看次数

三种首选的三维模型格式

什么是三维建模软件广泛使用的THREE.JS的三维模型格式(可以导出为该格式).我问这个问题,因为我的3D模型有自己独特的格式,并希望在THREE.JS中使用它们.虽然我可以编写自己的加载器,但我认为将它们转换为标准格式会更好.

3d file-format three.js

48
推荐指数
2
解决办法
4万
查看次数

使用D3.js的3维(X,Y和Z)图

我正在搜索具有3维(x,y和z)并使用D3.js的图.请告诉我,如果有任何数据可视化网站,我可以找到这样的图表,或者如果d3js.org上有一个我错过了某种方式.

javascript 3d svg graph d3.js

48
推荐指数
6
解决办法
6万
查看次数

旋转3D空间中的矢量

我在opengl中制作了一个android项目,它使用加速计来计算特定轴的变化,我的目标是旋转我的类似航天器的物体的运动矢量.问题是我无法理解旋转矩阵背后的数学.默认运动矢量为0,1,0,表示+ y,因此对象在开头向上看.而我正在尝试旋转它的运动矢量,这样我就可以移动它所指向的物体.我可以在手机中收集旋转变化.x轴:旋转[0],y轴:旋转[1],z轴:旋转[2].如何使用旋转矩阵旋转运动矢量?

math 3d vector rotation linear-algebra

47
推荐指数
1
解决办法
14万
查看次数

在R中绘制3D数据

我有一个3D数据集:

data = data.frame(
    x = rep( c(0.1, 0.2, 0.3, 0.4, 0.5), each=5),
    y = rep( c(1, 2, 3, 4, 5), 5)
)

data$z = runif(
    25,
    min = (data$x*data$y - 0.1 * (data$x*data$y)),
    max = (data$x*data$y + 0.1 * (data$x*data$y))
)

data
str(data)
Run Code Online (Sandbox Code Playgroud)

我想绘制它,但R alwyas的内置函数给出了错误

增加'x'和'y'值预期

# ### 3D Plots ######################################################
# built-in function always give the error
#    "increasing 'x' and 'y' values expected"
demo(image)
image(x = data$x, y = data$y, z = data$z)

demo(persp)
persp(data$x,data$y,data$z)

contour(data$x,data$y,data$z)
Run Code Online (Sandbox Code Playgroud)

当我在互联网上搜索时,我发现当X和Y值的组合不唯一时会发生此消息.但在这里他们是独一无二的 …

3d plot r

45
推荐指数
4
解决办法
13万
查看次数

如何计算Tangent和Binormal?

在OpenGL着色语言(GLSL)中讨论凹凸贴图,镜面高光和这些东西

我有:

  • 顶点数组(例如{0.2,0.5,0.1,0.2,0.4,0.5,...})
  • 法线数组(例如{0.0,0.0,1.0,0.0,1.0,0.0,...})
  • 点光源在世界空间中的位置(例如{0.0,1.0,-5.0})
  • 观众在世界空间中的位置(例如{0.0,0.0,0.0})(假设观众位于世界的中心)

现在,我如何计算每个顶点的Binormal和Tangent?我的意思是,计算Binormals的公式是什么,我必须根据这些信息使用什么?和切线相关?

无论如何我都会构建TBN矩阵,所以如果你知道根据这些信息直接构造矩阵的公式会很好!

哦,是的,如果需要,我也有纹理坐标.正如我所说的GLSL,我认为,每个顶点解决方案都是不错的,它不需要一次访问多个顶点信息.

----更新-----

我找到了这个解决方案

vec3 tangent;
vec3 binormal;

vec3 c1 = cross(a_normal, vec3(0.0, 0.0, 1.0));
vec3 c2 = cross(a_normal, vec3(0.0, 1.0, 0.0));

if (length(c1)>length(c2))
{
    tangent = c1;
}
else
{
    tangent = c2;
}

tangent = normalize(tangent);

binormal = cross(v_nglNormal, tangent);
binormal = normalize(binormal);

但我不知道它是否100%正确.

opengl math 3d glsl

43
推荐指数
3
解决办法
4万
查看次数

在OpenGL中有一种方法可以获得着色器程序使用的所有制服和属性的列表吗?

我想得到一个着色器程序对象使用的所有制服和属性的列表. glGetAttribLocation()&glGetUniformLocation()可以用来将字符串映射到一个位置,但我真正想要的是字符串列表而不必解析glsl代码.

注意:在OpenGL 2.0中glGetObjectParameteriv()被替换为glGetProgramiv().而enum是GL_ACTIVE_UNIFORMS&GL_ACTIVE_ATTRIBUTES.

opengl 3d shader glsl

42
推荐指数
3
解决办法
2万
查看次数

与xyz坐标的3d表面图

我希望有经验的人可以帮助我们如何从xyz数据中准备形状文件.虽然没有提供创建形状文件的前面步骤,但可以在这里看到彗星Churyumov-Gerasimenko 的精心准备的数据集的一个很好的例子.

我试图更好地理解如何将曲面应用于给定的XYZ坐标集.使用笛卡尔坐标是直接使用R包"rgl",但是环绕的形状看起来更难.我找到了R包geometry,它提供了QHULL函数的接口.我尝试使用它来计算Delaunay三角剖面,然后我可以用它绘制rgl.我无法弄清楚与该功能相关的一些选项delaunayn,可能控制这些方面的最大距离.我希望这里有人可能对xyz数据改进表面结构有一些想法.

使用"Stanford bunnny"数据集的示例:

library(onion)
library(rgl)
library(geometry)
data(bunny)

#XYZ point plot
open3d()
points3d(bunny, col=8, size=0.1)
#rgl.snapshot("3d_bunny_points.png")

#Facets following Delaunay triangulation
tc.bunny <- delaunayn(bunny)
open3d()
tetramesh(tc.bunny, bunny, alpha=0.25, col=8)
#rgl.snapshot("3d_bunny_facets.png")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这个答案让我相信Qhull的R实现可能存在问题.此外,我现在尝试了各种设置(例如delaunayn(bunny, options="Qt")),效果甚微.Qhull选项在此处列出

编辑:

这是一个额外的(更简单的)球体示例.即使在这里,小平面的计算并不总能找到最近的相邻顶点(如果你旋转球,你会看到一些小平面穿过内部).

library(rgl)
library(geometry)
set.seed(1)
n <- 10
rho <- 1
theta <- seq(0, 2*pi,, n) # azimuthal coordinate running from 0 to 2*pi 
phi <- seq(0, pi,, n) # polar …
Run Code Online (Sandbox Code Playgroud)

3d plot r rgl qhull

42
推荐指数
2
解决办法
4672
查看次数

一套高效的3D交叉算法

任何人都知道一个源,网站,我可以得到一些很好的3D交叉算法实现,如

  • 球体和球体的交叉点
  • 球体/椭球
  • 球体/长方体
  • 椭圆形/椭圆体
  • 椭球体/长方体
  • 长方体/立方体
  • 球/射线
  • 椭球/射线
  • 长方体/射线
  • 三角形/射线
  • 四/射线
  • 三角形/三角形
  • 四/四

c++ math 3d graphics intersection

40
推荐指数
2
解决办法
4万
查看次数