识别特定视点可见顶点的最有效方法是什么?
我有一个由几个3D模型组成的场景.我想将标识符附加到每个顶点(ModelID,VertexID),然后从各个视点生成2D图像,并为每个图像生成可见顶点标识符的列表(实际上这是用于图像处理应用程序).
最初我想在顶点法线和摄像机视图矢量之间执行点积,以确定顶点是否面向摄像机,但是如果模型被另一个对象遮挡,则此测试将不起作用.
提前致谢
我正在使用OpenTK编写自己的引擎(基本上只是用于C#的OpenGL绑定,gl*变成GL.*)并且我将存储许多顶点缓冲区,每个顶点缓冲区中有数千个顶点.因此我需要自己的自定义顶点格式,因为带有浮点数的Vec3会占用太多空间.(我在这里谈论数百万个顶点)
我想要做的是用这个布局创建我自己的顶点格式:
Byte 0: Position X
Byte 1: Position Y
Byte 2: Position Z
Byte 3: Texture Coordinate X
Byte 4: Color R
Byte 5: Color G
Byte 6: Color B
Byte 7: Texture Coordinate Y
Run Code Online (Sandbox Code Playgroud)
以下是顶点C#中的代码:
public struct SmallBlockVertex
{
public byte PositionX;
public byte PositionY;
public byte PositionZ;
public byte TextureX;
public byte ColorR;
public byte ColorG;
public byte ColorB;
public byte TextureY;
}
Run Code Online (Sandbox Code Playgroud)
作为每个轴的位置的字节是充足的,因为我只需要32 ^ 3个唯一位置.
我编写了自己的顶点着色器,它将两个vec4作为输入,为每组字节打开.我的顶点着色器是这样的:
attribute vec4 pos_data;
attribute vec4 col_data;
uniform mat4 projection_mat;
uniform …Run Code Online (Sandbox Code Playgroud) 我需要制作一个超过8个顶点的体,我得到了错误.
AL lib: (EE) alc_cleanup: 1 device not closed
Assertion failed!
Program: C:\Program Files\Java\jre7\bin\javaw.exe
File: /var/lib/jenkins/workspace/libgdx/gdx/jni/Box2D/Collision/Shapes/b2PolygonShape.cpp, Line 122
Expression: 3 <= count && count <= 8
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变那个常数?
我找到了这个文件https://github.com/libgdx/libgdx/blob/master/gdx/jni/Box2D/Common/b2Settings.h
我在这里看到了
#define b2_maxPolygonVertices 8
Run Code Online (Sandbox Code Playgroud)
如何从libGDX更改它?
我想在一个图形工具图中存储一个类的实例,每个节点一个对象(或者作为图形工具调用它们的"顶点").我试图使用顶点属性,因为这似乎是这样做的方式.
class MyClass(object):
def __init__(self, title):
self.title = title
graph = Graph()
my_obj = MyClass('some title')
vertex = graph.add_vertex()
vprop = graph.new_vertex_property('object')
vprop[vertex] = my_obj
Run Code Online (Sandbox Code Playgroud)
现在我想读回我的类对象,例如迭代所有节点/顶点并打印它们的标题:
for vertex in self.graph.vertices():
# TODO: how to access titles ? this just prints
# "<Vertex object with index '0' at 0xb1e4bac>"
print repr(vertex) + '\n'
Run Code Online (Sandbox Code Playgroud)
另外,如何从图形中获取具有特定标题的类对象?一种方法似乎是创建一个顶点过滤器使用graph.set_edge_filter(...)并应用它 - 这似乎是一个相当昂贵的操作,考虑到我想要的只是获得一个单个对象.我真的不想将我自己的对象标题/顶点索引映射维护为IMO,这是图的任务之一.
我错过了一些基本的东西吗?
我一直在研究Gremlin图语言,它看起来非常强大。但是,在研究如何根据需求进行评估时,我遇到了一个我似乎无法完成的案例。
假设已启动Gremlin,并使用其示例数据库:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
...
gremlin> g.V.out('knows')
==>v[2]
==>v[4]
Run Code Online (Sandbox Code Playgroud)
因此,这显示了具有“已知”边缘的顶点。
但是,我想找到不具有“已知”边缘的顶点。就像是:
gremlin> g.V.outNot('knows')
==>v[3]
==>v[5]
==>v[6]
Run Code Online (Sandbox Code Playgroud)
如何找到这些顶点?
(编辑以使输出正确)
我正在研究 OpenGL API,我想问你是否可以在将它传递给 OpenGL 后删除一个浮点数组顶点。
示例代码:
GLuint VBO;
float *vertices = new float[2];
vertices[0] = 0.0f;
vertices[1] = 1.0f;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
delete[] vertices;
Run Code Online (Sandbox Code Playgroud)
你能告诉我这样做的后果吗?
我可以使用 python-igraph 创建一个非常简单的图形...
import igraph
g=igraph.Graph.TupleList([("a", "b", 3.0), ("c", "d", 4.0), ("a", "c", 5.0)], weights=True)
print( igraph.summary(g, full=True) )
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
IGRAPH UNW- 4 3 --
+ attr: name (v), weight (e)
+ edges (vertex names):
edge weight
[0] a--b 3
[1] c--d 4
[2] a--c 5
Run Code Online (Sandbox Code Playgroud)
找到最短路径很容易!
source = g.vs[0] // vertex "a"
target = g.vs[len(g.vs)-1] // vertex "d"
g.shortest_paths(source=source, target=target, weights='weight')
Run Code Online (Sandbox Code Playgroud)
打印结果:
[[9.0]]
Run Code Online (Sandbox Code Playgroud)
我很高兴最短路径的边权重为 9.0。但是,我想获得构成图形最短路径的实际顶点和边。得到一个看起来像这样的对象会很好:
shortestPath = [("a", "c", 5.0), ("c", "d", 4.0)]
Run Code Online (Sandbox Code Playgroud)
python-igraph 可以向我提供这个吗?我在没有运气的情况下搜索了文档......
当我第一次向缓冲区添加一些顶点时,这些是我正在调用的相关函数
// Create and bind the object's Vertex Array Object:
glGenVertexArrays(1, &_vao);
glBindVertexArray(_vao);
// Create and load vertex data into a Vertex Buffer Object:
glGenBuffers(1, &_vbo);
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_STATIC_DRAW);
// Tells OpenGL that there is vertex data in this buffer object and what form that vertex data takes:
// Obtain attribute handles:
_posAttrib = glGetAttribLocation(program, "position");
glEnableVertexAttribArray(_posAttrib);
glVertexAttribPointer(_posAttrib, // attribute handle
4, // number of scalars per vertex
GL_FLOAT, // scalar type
GL_FALSE,
0,
0); …Run Code Online (Sandbox Code Playgroud) 我有一个包含数百个 STL 网格的文件夹,我想使用 flatten 命令将它们合并到 meshlab 中。
我使用的是常规 GUI,当我打开文件并选择所有这些 STL 文件时,如果我想“统一重复顶点”,系统会提示我输入每个文件。
由于我有数百个,这是不可接受的。有没有办法配置软件以将我的“是”应用于它打开的所有模型?
太棒了!
我正在使用Google Cloud Vision API的“ TEXT_DETECTION”选项对某些图像进行OCR。
单个字符周围的边界框有时准确,有时不准确,通常在同一图像内。
这是视觉算法的概率性质的正常副作用,视觉API中的错误,还是我解释响应方式的问题?
这是特定于字母“ a”的响应部分,我将从中提取边界框。
stdClass Object
(
[property] => stdClass Object
(
[detectedLanguages] => Array
(
[0] => stdClass Object
(
[languageCode] => en
)
)
)
[boundingBox] => stdClass Object
(
[vertices] => Array
(
[0] => stdClass Object
(
[x] => 419
[y] => 304
)
[1] => stdClass Object
(
[x] => 479
[y] => 304
)
[2] => stdClass Object
(
[x] => 479
[y] => 397
)
[3] => stdClass …Run Code Online (Sandbox Code Playgroud)