小编Str*_*ers的帖子

SSE与函数的陌生感

我一直在玩D的内联汇编程序和SSE,但发现了一些我不理解的东西.当我尝试在声明后立即添加两个float4向量时,计算是正确的.如果我把计算放在一个单独的函数中,我得到一系列的nans.

//function contents identical to code section in unittest
float4 add(float4 lhs, float4 rhs)
{
    float4 res;
    auto lhs_addr = &lhs;
    auto rhs_addr = &rhs;
    asm
    {
        mov RAX, lhs_addr;
        mov RBX, rhs_addr;
        movups XMM0, [RAX];
        movups XMM1, [RBX];

        addps XMM0, XMM1;
        movups res, XMM0;
    }
    return res;
}

unittest
{
    float4 lhs = {1, 2, 3, 4};
    float4 rhs = {4, 3, 2, 1};

    println(add(lhs, rhs)); //float4(nan, nan, nan, nan)

    //identical code starts here
    float4 res;
    auto …
Run Code Online (Sandbox Code Playgroud)

sse d inline-assembly

6
推荐指数
1
解决办法
116
查看次数

根据 Loop & Blinn 2005 对三次贝塞尔曲线进行分类

我正在尝试展平贝塞尔曲线路径(删除所有交叉点并替换为端点)作为此处描述的渲染算法实现的一部分,并找到了 GPU Gems 3 Ch 中的 Loop 和 Blinn 描述的算法。25,对 $a3$ 的叉积进行校正以检测曲线自相交(循环)。

\n

该算法要求对表达式求值discr=d\xe2\x82\x81\xc2\xb2(3d\xe2\x82\x82\xc2\xb2-4d\xe2\x82\x81d\xe2\x82\x83),使得曲线自相交当且仅当discr < 0

\n

在哪里

\n

d\xe2\x82\x81=a\xe2\x82\x81-2a\xe2\x82\x82+3a\xe2\x82\x83,\n d\xe2\x82\x82=-a\xe2\x82\x82+3a\xe2\x82\x83,\nd\xe2\x82\x83=3a\xe2\x82\x83

\n

a\xe2\x82\x81=b\xe2\x82\x80\xc2\xb7(b\xe2\x82\x83\xe2\xa8\xafb\xe2\x82\x82),\n a\xe2\x82\x82=b\xe2\x82\x81\xc2\xb7(b\xe2\x82\x80\xe2\xa8\xafb\xe2\x82\x83),\na\xe2\x82\x83=b\xe2\x82\x82\xc2\xb7(b\xe2\x82\x81\xe2\xa8\xafb\xe2\x82\x80)

\n

我已经在下面的示例代码中实现了该算法,以及我能找到的其他一些算法。他们谁都不同意,而且全都错了。具体来说,我已经实施了

\n
    \n
  1. GPU Gems 3中描述的算法
  2. \n
  3. 与原始论文中描述的算法相同。
  4. \n
  5. 与 paper.js(问题)(草图)中实现的算法相同。
  6. \n
  7. Pomax' Bezier Primer 中描述的曲线规范化算法
  8. \n
\n

这三种算法的不一致表明存在重大误解。它是什么?(更重要的是)我自己如何识别这样的问题?

\n

我参考了这里这里的问题,以及Loop 和 Blinn 描述他们方法的论文,但没有效果。

\n
\n#[derive(Clone, Copy, Debug, PartialEq)]\nenum Kind {\n    Serpentine,\n …
Run Code Online (Sandbox Code Playgroud)

math graphics bezier 2d rust

6
推荐指数
0
解决办法
291
查看次数

课程的Dlang泛型

第一次海报.我已经使用Java几年了,并决定学习D.在Java中,你可以声明一个具有泛型类的类,并从该类创建一个新对象.喜欢:

public class foo<T>
{
    public foo() { ... }
}
Run Code Online (Sandbox Code Playgroud)

然后简单地打电话foo<String> f = new foo<>();.我尝试在D中实现相同的,但我得到了一个编译错误,如:"class core.collection.RingBuffer.RingBuffer(T)用作类型".看一下D的教程,我发现泛型编程是使用模板实现的.但是,我无法正式编写官方教程/文档.有人可以向我解释一下吗?谢谢.

java generics templates d

2
推荐指数
2
解决办法
366
查看次数

标签 统计

d ×2

2d ×1

bezier ×1

generics ×1

graphics ×1

inline-assembly ×1

java ×1

math ×1

rust ×1

sse ×1

templates ×1