渐近线的错误:水平黑线

渐近线的错误:水平黑线

我在使用 Asymptote(Windows 上的最新版本)时遇到了这个错误:

在此处输入图片描述

这些水平线不是来自我的代码,它们是不明显地出现的。

我发现只有此链接报告同样的问题,但没有给出答案(我已尝试该选项-glOptions=-indirect,按照评论中的建议,但它并不能防止该错误)。

有什么想法吗?我的代码如下。

settings.render=4;
settings.outformat="pdf";

// -----------------------------------------------------------------------------
import three;
import solids;

// -----------------------------------------------------------------------------
real[] circumsphere(triple p1, triple p2, triple p3, triple p4){
  real a = orient(p1,p2,p3,p4);
  real q1 = p1.x*p1.x + p1.y*p1.y + p1.z*p1.z;
  real q2 = p2.x*p2.x + p2.y*p2.y + p2.z*p2.z;
  real q3 = p3.x*p3.x + p3.y*p3.y + p3.z*p3.z;
  real q4 = p4.x*p4.x + p4.y*p4.y + p4.z*p4.z;
  real Dx = orient((q1,p1.y,p1.z),(q2,p2.y,p2.z),(q3,p3.y,p3.z),(q4,p4.y,p4.z));
  real Dy = orient((q1,p1.x,p1.z),(q2,p2.x,p2.z),(q3,p3.x,p3.z),(q4,p4.x,p4.z));
  real Dz = orient((q1,p1.x,p1.y),(q2,p2.x,p2.y),(q3,p3.x,p3.y),(q4,p4.x,p4.y));
  triple center = 0.5/a * (Dx,-Dy,Dz);
  real r = length(p1-center);
  real[] out = {center.x,center.y,center.z,r};
  return out;
}

// -----------------------------------------------------------------------------
triple inversion(triple pnt, real r, triple center){
  triple omega = (2*r, 0, 0);
  real k = 3*r*r;
  triple v = pnt - omega - center;
  return omega + center - k/(v.x*v.x+v.y*v.y+v.z*v.z)*v;
}

// -----------------------------------------------------------------------------
real[] oneSphere(triple center, real r, real beta){
  triple pnt = center + (r*cos(beta)*2/3, r*sin(beta)*2/3, 0);
  real thRadius = r/3;
  triple p1 = pnt + (thRadius,0,0);
  triple p2 = pnt + (0,thRadius,0);
  triple p3 = pnt + (-thRadius,0,0);
  triple p4 = pnt + (0,0,thRadius);
  triple q1 = inversion(p1, r, center);
  triple q2 = inversion(p2, r, center);
  triple q3 = inversion(p3, r, center);
  triple q4 = inversion(p4, r, center);
  real[] cs = circumsphere(q1,q2,q3,q4);
  cs[0] = cs[0] - 4*r;
  return cs;
}

// -----------------------------------------------------------------------------
void hexlet(){
  for(int i=0; i<6; ++i){
    real[] s = oneSphere((0,0,0), 1, i*pi/3);
    draw(surface(sphere((s[0],s[1],s[2]), s[3])), red);
  }
}

// -----------------------------------------------------------------------------
currentprojection=orthographic(0,0,6);
viewportmargin=(10,10);
size(10cm);
currentlight=((0,0,100));

hexlet(); 

答案1

这个错误很常见,与一些驱动程序问题有关。研究“渐近线黑线”返回了很多链接。文档中写道该选项-glOptions=-indirect可以提供帮助。然而,有时它似乎不起作用,就像这里或使用 Asymptote 2.38 绘制 3D 晶格

另一种可能性是使用-maxtile选项(与渲染图块大小有关)。事实上,要渲染大型场景,OpenGl 会使用图块将场景切成几部分。默认情况下,该值为 (1024,768)。asy -maxtile "(256,256)"(较小的值)可能会有所帮助。

我必须承认,我-maxtile纯粹是偶然做出这个选择的!

编辑:实际上,-maxtile解决方法是在文档、three.asy模块部分、3D 渲染器的第二选择中!

奥格

相关内容