标签: voxel

Ray voxel intersection

我想测试射线与体素场的交叉点.

我可以通过计算与当前体素边缘的光线盒交点来天真地爬过体素场,然后对下一个体素做同样的操作,直到我碰到某个东西.但是没有更快的方法来追踪体素场吗?我正在思考Bresenham的 3D 线条算法,这可以很快地给出给定线条相交的所有单元格.有人这样做过吗?

由于certian限制以及这些光线跟踪不经常发生的事实,我不想构建八叉树或任何其他数据结构.

c# math voxel

5
推荐指数
1
解决办法
2796
查看次数

在 3D 体素空间中绘制通过 3D 线的所有体素

我想画一条3D体素化线,即找到一条线经过的所有体素。3D Bresenham 总是会跳过一些体素。如图所示,3D bresenham生成的体素不能完全包含起始体素和目标体素之间的线。

3D bresenham 生成的 3D 线

这个链接中的算法:Algorithm for Drawing a 4-connected line可以解决我在2D平面上的问题,但我未能将其改进为3D。

3d graphics voxel bresenham

5
推荐指数
1
解决办法
2246
查看次数

为什么我的 PCA 对旋转和轴交换不是不变的?

我有一个大小为 3x3x3 的体素(np.array),填充了一些值,这个设置对我来说是必不可少的。我想要它的旋转不变表示。对于这种情况,我决定尝试 PCA 表示,它被认为对正交变换不变的其他

为简单起见,我进行了一些轴交换,但万一我弄错了,可以有np.rot90.

我已经将我的 3d 体素解释为一组加权的 3d 立方体点向量,我错误地将其称为“基础”,总共 27 个(所以这是空间中的一些 3d 点,由向量表示,从立方体点获得,由体素缩放值)。

import numpy as np

voxel1 = np.random.normal(size=(3,3,3))
voxel2 =  np.transpose(voxel1, (1,0,2)) #np.rot90(voxel1) #


basis = []
for i in range(3):
    for j in range(3):
        for k in range(3):
            basis.append([i+1, j+1, k+1]) # avoid 0
basis = np.array(basis)


voxel1 = voxel1.reshape((27,1))
voxel2 = voxel2.reshape((27,1))

voxel1 = voxel1*basis # weighted basis vectors
voxel2 = voxel2*basis
Run Code Online (Sandbox Code Playgroud)
print(voxel1.shape)
(27, 3)
Run Code Online (Sandbox Code Playgroud)

然后我对那 27 …

python math numpy voxel pca

5
推荐指数
1
解决办法
359
查看次数

如何使用八叉树数据结构查找相邻/邻居立方体?

我为闭合曲面创建了一个边界八叉树。所有包含表面的八叉树立方体都被划分到相同的级别。因此所有叶节点的大小相同。我需要帮助找出每个终端立方体的邻居。我尝试参考不同的论文,但无法弄清楚如何在 Matlab 中实际实现它。现在,我将所有终端立方体视为体素立方体(不使用八叉树数据结构),并使用强力找出 26 个可能的邻居中的哪些位于构成表面的立方体列表中。需要很长时间才能获得输出。我是编程新手,所以如果有人能提出更有效地找到叶节点邻居的方法以及如何通过在 matlab 中编码来实现该方法,我将非常感激。谢谢!!

3d voxel nodes octree

4
推荐指数
1
解决办法
4190
查看次数

在R中绘制体素图像

您知道 R 中是否存在用于绘制体素对象(3D 数组)的库或函数吗?我找到了可以执行 3D 散点图的 rgl 包,但我实际上正在寻找与 3D 数组一起使用的函数“image”的等效函数。谢谢

3d r voxel rgl

4
推荐指数
1
解决办法
1831
查看次数

从体素中进行清晰的等值面提取

我需要从同时支持圆角和尖锐几何体的八叉树或阵列中的体素块生成等值面。我搜索了似乎能够完成此任务的算法,并发现了几种算法,包括双重轮廓,扩展行进立方体和双重行进立方体。但是,前两个要求的Hermite数据似乎消耗大量内存。此外,我找不到这些中任何一个的实际算法,只能找到期刊和模糊描述中的方程式。任何能找到解决我的问题的算法的帮助将不胜感激。

c++ voxel marching-cubes

4
推荐指数
1
解决办法
2490
查看次数

在 OpenGL 中使用纹理图集作为纹理数组

我现在正在构建一个体素游戏。一开始,我使用一个存储所有体素纹理的纹理图集,它工作正常。之后,我决定在我的游戏中使用 Greedy Meshing,因此纹理图集不再有用。我读了一些文章,说应该改用纹理数组。然后我尝试阅读并使用纹理数组技术进行纹理化。然而,我得到的结果在我的游戏中全黑。那么我错过了什么?

这是我的纹理图集 (600 x 600)

我的纹理图集

这是我的 Texture2DArray,我使用这个类来读取和保存一个纹理数组

Texture2DArray::Texture2DArray() : Internal_Format(GL_RGBA8), Image_Format(GL_RGBA), Wrap_S(GL_REPEAT), Wrap_T(GL_REPEAT), Wrap_R(GL_REPEAT), Filter_Min(GL_NEAREST), Filter_Max(GL_NEAREST), Width(0), Height(0)
{
   glGenTextures(1, &this->ID);
}

void Texture2DArray::Generate(GLuint width, GLuint height, unsigned char* data)
{
   this->Width = width;
   this->Height = height;

   glBindTexture(GL_TEXTURE_2D_ARRAY, this->ID);

   // I cannot decide what the texture array layer (depth) should be (I put here is 1 for layer number)
   //Can anyone explain to me how to decide the texture layer here? 
   glTexImage3D(GL_TEXTURE_2D_ARRAY, 1, this->Internal_Format, this->Width, this->Height, 0, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl texture-mapping voxel opengl-3

4
推荐指数
1
解决办法
2795
查看次数

对于类似Minecraft的游戏,在每侧渲染具有不同纹理的立方体的有效方法?

我试图决定在类似Minecraft的游戏中渲染一堆具有不同纹理的立方体的最有效方法是什么.

我发现了实例渲染.我所做的是我创建了一个单独的"立方体模型",它存储了立方体的所有顶点,法线和纹理坐标,我创建了一个数组缓冲区并将其传递给GPU一次.然后我创建了一个(平移矢量,纹理索引)结构数组,我使用实例渲染来反复重绘同一个立方体,每次翻译并使用适当的纹理.

(希望Notch不介意我使用他的纹理,直到我自己做)

问题是,并非所有6个边都将具有相同的纹理,并且我试图弄清楚如何使它们对于每个块类型都不同.我提出的两个解决方案是:

  1. 为每种块类型使用不同的模型.这样我就可以在每个顶点上指定不同的纹理坐标.我仍然可以使用实例渲染,但我会为每个块类型执行单独的传递.
  2. 传递6个"纹理索引"(每个面1个)而不是每个块1个.

第二种解决方案需要传递更多,可能是冗余的数据.我不确定实例化渲染的好处有多大......所以我不知道是否会更好,例如,最多256个"通过"(每个块类型1个)或"一个大"传递"包含所有数据,并在一次拍摄中渲染每个块.

或许还有另一种我不知道的方法?

opengl 3d textures voxel

3
推荐指数
1
解决办法
4990
查看次数

保存数据以便在体素编辑器中重复使用的最佳方法

我正计划构建一个供个人使用的体素编辑器(c ++和opengl),我想重新使用我在以后的项目中构建的对象.我遇到的问题是,我不确定什么是将体素数据保存到文件的最佳方法.我搜索了许多网站,并且遇到了"另存为八叉树"和"另存为BSP树",您认为哪一个更好,为什么?

提前致谢.

c++ opengl voxel

3
推荐指数
1
解决办法
551
查看次数

如何存储体素数据?

我一直在网上查看,使用体素数据的功能给我留下了深刻的印象,特别是对于地形构建和操作。问题是,在我访问过的任何网站上都没有清楚地解释体素或如何使用/实现它们。我发现体素是体积数据。请提供更完整的答案;什么是体积数据。这似乎是一个简单的问题,但我仍然不确定。

另外,您将如何实现体素数据?(我的目标是将其实现到 C++ 程序中。)您将使用哪种数据类型来存储体素数据,以便我能够在运行时尽快修改内容。我在网上查看过,但找不到任何解释如何存储数据的内容。对象列表、数组等...

你如何使用体素?

编辑:由于我刚刚开始使用体素,因此我可能会首先使用它来仅对简单对象进行建模,但最终我将使用它来渲染地形和世界对象。

c++ voxel

3
推荐指数
1
解决办法
7904
查看次数

标签 统计

voxel ×10

3d ×4

c++ ×4

opengl ×3

math ×2

bresenham ×1

c# ×1

graphics ×1

marching-cubes ×1

nodes ×1

numpy ×1

octree ×1

opengl-3 ×1

pca ×1

python ×1

r ×1

rgl ×1

texture-mapping ×1

textures ×1