【问题标题】:Three.JS: Spherical wireframe material /EdgesHelper control三.JS:球形线框材质/EdgesHelper控件
【发布时间】:2015-10-17 02:59:15
【问题描述】:

Three.JS 的新手。大多数情况下,我想知道这是我想做的正确方法。

我正在尝试在简单的球形几何体上渲染某种类型的线框材质。我正在追求这种特殊的外观:

我目前的努力:

Note: Moved to Plunker below

http://plnkr.co/edit/FrCUIwxH1IL3wFKwHSRJ?p=preview

目前我正在使用 EdgesHelper 来获得一个整洁的网格,我不确定如何删除垂直线。

理想情况下,我还需要控制水平线之间的距离和它们的不透明度,但无法通过助手来做到这一点。我的另一个想法是为每条“线”绘制单独的线几何图形,但我认为这有点矫枉过正。任何想法表示赞赏。

【问题讨论】:

  • 你的“其他”想法是最好的。但是使用THREE.LineSegments,这样你就可以在一行中渲染所有的环。也可以使用BufferGeometry。几何图形将是一个 pairs 点数组。请参阅 jsfiddle.net/w67tzfhx 以帮助您入门。

标签: javascript three.js drawing


【解决方案1】:

一个简单的着色器like this 是否足以满足您的需求?

顶点:

varying vec2 vUv;
void main() {
  vUv = uv;
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
}

片段:

uniform vec3 color1;
uniform float alpha1;
uniform vec3 color2;
uniform float alpha2;
uniform float lines;
uniform float linewidth;
varying vec2 vUv;
void main() {
  float p = abs(fract(lines*vUv.y)*2.0-1.0);
  if(p < linewidth / 100.0){
    gl_FragColor = vec4(color1, alpha1);
  }else{
    gl_FragColor = vec4(color2, alpha2);
  }
}

【讨论】:

  • 嗨 2pha,非常感谢您的贡献。尽管阅读了 Three.JS 网站上关于着色器的一些材料,但我并不完全熟悉着色器。你介意向我解释一下这个是如何工作的吗?
  • 只查看页面的来源。它正在使用ShaderMaterial class。查看更多我的shadermaterial experiments here。网上有很多 GLSL 着色器教程。
  • 谢谢 2pha。我有一晚要研究你的例子。接下来是让线条发光。也非常感谢您提供的极其完整的示例 - 控件帮助我掌握了它。
猜你喜欢
  • 2016-09-02
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 2013-06-03
  • 2014-03-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多