当前位置: 首页 > 面试题库 >

具有SceneKit线图元类型的笔划宽度

松桐
2023-03-14
问题内容

具有SceneKit线图元类型的笔划宽度(http://beesandbombs.tumblr.com/post/96195652814/cube))
using scene kit.

我试图立刻解决具体是如何编辑的笔画宽度的SCNGeometryPrimitiveType.Line元素。

我创建线条的基本方法是这样的:

private func squareVertices(length: Float) -> [SCNVector3] {
    let m = length/Float(2)

    let topLeft =       SCNVector3Make(-m-q,  m+q, m+q)
    let topRight =      SCNVector3Make( m+q,  m+q, m+q)
    let bottomLeft =    SCNVector3Make(-m-q, -m-q, m+q)
    let bottomRight =   SCNVector3Make( m+q, -m-q, m+q)

    return [topLeft, topRight, bottomLeft, bottomRight]
}

private func cubeFace() -> SCNGeometry {

    let vertices : [SCNVector3] = squareVertices(l)
    let geoSrc = SCNGeometrySource(vertices: UnsafePointer<SCNVector3>(vertices), count: vertices.count)

    // index buffer
    let idx1 : [Int32] = [0, 3]
    let data1 = NSData(bytes: idx1, length: (sizeof(Int32) * idx1.count))
    let geoElements1 = SCNGeometryElement(data: data1, primitiveType: SCNGeometryPrimitiveType.Line, primitiveCount: idx1.count, bytesPerIndex: sizeof(Int32))

    let idx2 : [Int32] = [1, 2]
    let data2 = NSData(bytes: idx2, length: (sizeof(Int32) * idx2.count))
    let geoElements2 = SCNGeometryElement(data: data2, primitiveType: SCNGeometryPrimitiveType.Line, primitiveCount: idx2.count, bytesPerIndex: sizeof(Int32))

    let geo = SCNGeometry(sources: [geoSrc], elements: [geoElements1, geoElements2])

    return geo
}

    private func setupFaceNodes() {
    // sides
    for i in 0..<4 {
        let face = SCNNode(geometry: cubeFace())
        face.rotation = SCNVector4Make(0, 1, 0, Float(i) * Float(M_PI_2))
        rootNode.addChildNode(face)
    }
    // top/bottom
    for i in [1, 3] {
        let face = SCNNode(geometry: cubeFace())
        face.rotation = SCNVector4Make(1, 0, 0, Float(i) * Float(M_PI_2))
        rootNode.addChildNode(face)
    }
}

但我不知道如何增加使用SceneKit 绘制的线条的宽度。我该如何实现?

对于那些感兴趣的人,这里 是一个示例项目


问题答案:

SceneKit对此不提供控件。但是,SceneKit使用OpenGL ES进行绘制。

在GL_LINES模式下使用GL绘制时,glLineWidth调用会
更改线宽。(请注意:该参数以实际像素为单位,而不是以UI
布局点为单位,因此,如果您不希望在视网膜显示屏上使用超细的细线,则需要的宽度要比您想象的要大。)

那么,您在SceneKit应用程序中该怎么称呼它?您在那里有一些选择。在像您这样的简单场景中,您只渲染一件事,您可以在场景渲染之前进行设置。 为您的视图设置一个
委托,然后在其中实现 并调用。renderer:willRenderSceneAtTime:glLineWidth

但是,OpenGL线条渲染非常有限-如果要自定义
更多渲染,则需要使用其他方法。哪种方法
最有效取决于您要做什么,所以这里有一些想法可供您
研究:

从狭窄的三角形条上制作“线条”
根据原始SCN几何形状(例如盒子和圆柱体)制作它们
保持简单的立方体几何体,但使用片段着色器(或着色器修改器片段)仅在每个多边形的边缘附近绘制



 类似资料:
  • 我正在尝试绘制一个只有线条但笔画宽度不同的对象。这可能吗? 我的尝试: 不成功,最后一个笔画宽度用于整个< code >路径。

  • 我正在处理需要细垂直线的可视化。理想情况下,我希望它们是1px宽。当我使用默认的“range()”线性缩放宽度定位它们时,它们看起来具有不同的宽度,因为它们的计算位置并不总是整数个像素。不过,其中一些看起来正好是1像素宽(那些更亮)。 然而,当我在线性刻度上使用时,所有线条都具有相同的表观宽度,但它是2px,即使我明确指定了1px的描边宽度。使用 舍入会得到相同的结果。当我尝试使用0.5的笔画宽度

  • 我的代码基本上来自此示例(http://corner.squareup.com/2010/07/smooth-signatures.html)和Google API(FingerPaint),但现在我想使用,以便根据手指的速度更改笔画宽度。 我想我可以把一条路径分成更小的部分,但我没有找到任何例子。还有第二篇文章(http://corner.squareup.com/2012/07/smoothe

  • 我有一个自定义视图,我可以在其中画线,我也可以选择线的宽度。我还有一个统计数据,在另一个片段中,我应该显示每一个笔画画了多少行。 所以我想创建一个自定义的监听器,它应该对不同的笔划宽度做出反应。每当笔划发生变化时,统计数据应显示所选笔划的新计数。。。 我用界面尝试了一下,但我真的不知道如何前进。我该怎么做?

  • 问题内容: 谁能描述我如何使用opencv或simplecv在python中实现SWT? 问题答案: 好的,这里是这样: 该链接包含有关实现的详细信息,底部的代码下载链接:SWT 为了完整起见,还提到SWT或Stroke Width Transform由Epshtein等人在2010年设计,迄今为止已成为最成功的文本检测方法之一。它不使用机器学习或详尽的测试。基本上在对输入图像进行Canny边缘检

  • 有没有办法告诉Java不要试图从使用基元类型的方法引用中推断类型? 这是我写的一个方法,原因现在无关紧要: 现在,如果您将方法引用传递给返回原始类型的“isEquals”,该怎么办? 这一切都很好,但Java也会接受这种奇怪的用法: 这是因为编译器将推断类型参数T为"