小编Han*_*esh的帖子

C#抽象结构

如何在C#中使用结构实现继承(或类似)?我知道抽象结构是不可能的,但我需要实现类似的东西.

我需要它作为结构,因为它必须是一个值类型.我需要继承,因为我需要一个通用数组和方法,我可以保证在那里.

我认为一个例子会有很长的路要走,所以有些代码不能编译,但会显示我想要实现的内容;

    abstract struct Vertex
    {
       abstract int SizeInBytes;
       abstract void SetPointers();
    }
    struct ColorVertex : Vertex
    {
       Vector3 Position;
       Vector4 Color;

       override int SizeInBytes //static
       {
          get { return (3 + 4) * 4; }
       }
       override void SetVertexPointers() //static
       {
           ...
       }
    }

class main
{
   static void main()
   {
      Vertex[] verts = new Vertex[3];
      for(int i = 0; i < 3; i++)
          verts[i] = new ColorVertex();

      verts[0].SetVertexPointers(); //should call ColorVertex.SetVertexPointers

      externalAPIcall(verts);
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我需要值类型的原因是我可以创建它们的数组,并将其作为顶点缓冲区传递给OpenGL.为此,数据需要直接包含在此数组中.

如果这根本无法实现,我会感到惊讶.

c# oop inheritance struct

11
推荐指数
3
解决办法
1万
查看次数

具有未指定类型的泛型类的数组

在C#中是否可以创建一个未指定泛型类型的数组?有点像这样:

ShaderParam<>[] params = new ShaderParam<>[5];
params[0] = new ShaderParam<float>();
Run Code Online (Sandbox Code Playgroud)

或者这是不可能的,因为C#强大的打字?

c# generics typing

9
推荐指数
2
解决办法
1万
查看次数

将3D模型转换为体素场

我需要编写一些代码来将四元组数组转换为体素字段.让它工作应该很容易,但快速实现并不是那么微不足道.

有谁知道我可以使用的任何库或源代码?我敢肯定以前有人必须这样做.

编辑: 算法也需要用体素填充模型的内部.只是一个shell不会这样做.

algorithm 3d model voxel

7
推荐指数
1
解决办法
4138
查看次数

与2 ^ n相反

对于任何b,可以快速计算函数a = 2 ^ b a = 1 << b.那么反过来说,为任何给定的a获得b的值?它应该相对较快,因此日志是不可能.任何不是O(1)的东西也都很糟糕.

我很高兴能不能做到,如果它根本不可能太没有记录或搜索类的事情.

algorithm math bitwise-operators

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

将椭球拟合到3D数据点

我有一大堆3D数据点,我想要适合椭圆体.

我的数学很差,所以我在没有任何数学库的情况下无法实现最小二乘法.

有没有人知道或者有一段代码可以将椭球放到数据中,我可以直接插入到我的项目中?在C中最好,但是从C++,Java,C#,python等转换对我来说应该没问题.

编辑:能够找到该中心也将是一个巨大的帮助.请注意,这些点的间距不均匀,因此取平均值不会产生中心.

math geometry least-squares

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

Ray voxel intersection

我想测试射线与体素场的交叉点.

我可以通过计算与当前体素边缘的光线盒交点来天真地爬过体素场,然后对下一个体素做同样的操作,直到我碰到某个东西.但是没有更快的方法来追踪体素场吗?我正在思考Bresenham的 3D 线条算法,这可以很快地给出给定线条相交的所有单元格.有人这样做过吗?

由于certian限制以及这些光线跟踪不经常发生的事实,我不想构建八叉树或任何其他数据结构.

c# math voxel

5
推荐指数
1
解决办法
2796
查看次数

在C#中实现通用的非托管数组

我正在C#中实现一个非托管数组类,我需要一些OpenGL调用.

这很好,但我遇到了障碍.以下代码无法编译,我理解为什么,但我怎样才能使它工作?

    public T this[int i]
    {
        get { return *((T*)arrayPtr + i); }
        set { *((T*)arrayPtr + i) = value; }
    }
Run Code Online (Sandbox Code Playgroud)

我认为如果我确保T是一个结构,它可能会起作用

unsafe class FixedArray<T> where T : struct
Run Code Online (Sandbox Code Playgroud)

也不起作用......

我怎样才能在功能上等同于我上面要做的事情?

编辑:我正在使用Marshal.AllocHGlobal()的非托管数组,以便我的数组被修复,GC不会移动它.当你调用它时,OpenGL实际上并不处理指令,OpenGL将在函数返回后很长时间内尝试访问数组.

如果有帮助,这就是整个班级:

unsafe class FixedArray<T> where T : struct
{
    IntPtr arrayPtr;

    public T this[int i]
    {
        get { return *((T*)arrayPtr + i); }
        set { *((T*)arrayPtr + i) = value; }
    }
    public FixedArray(int length)
    {
        arrayPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(T)) * length);
    }
    ~FixedArray()
    {
        Marshal.FreeHGlobal(arrayPtr);
    } …
Run Code Online (Sandbox Code Playgroud)

c# arrays generics pinvoke unmanaged

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

没有查找的快速,不准确的sin函数

对于海洋着色器,我需要一个快速函数来计算sin(x)的非常近似的值.唯一的要求是它是周期性的,大致类似于正弦波.

泰勒系列的罪太慢了,因为我需要计算高达x的9次幂才能获得一个完整的时期.

有什么建议?

编辑:对不起,我没有提到,我不能使用查找表,因为这是在顶点着色器上.查找表将涉及纹理样本,其在顶点着色器上比内置的sin函数慢.它不必以任何方式准确,它只是看起来不错.

math shader trigonometry

5
推荐指数
1
解决办法
941
查看次数

是否有更快/更清晰的方法将结构复制到C#中的数组?

我有一个float4x4结构,它只包含16个浮点数:

struct float4x4
{
        public float M11; public float M12; public float M13; public float M14;
        public float M21; public float M22; public float M23; public float M24;
        public float M31; public float M32; public float M33; public float M34;
        public float M41; public float M42; public float M43; public float M44;
}
Run Code Online (Sandbox Code Playgroud)

我想将这些结构的数组复制到一大堆浮点数中.据我所知,这是一块内存的1:1副本

我所知道的是相当丑陋,而不是那么快:

        int n = 0;
        for (int i = 0; i < Length; i++)
        {
            array[n++] = value[i].M11;
            array[n++] = value[i].M12;
            array[n++] = value[i].M13;
            array[n++] = …
Run Code Online (Sandbox Code Playgroud)

c# memory arrays

5
推荐指数
1
解决办法
334
查看次数

Node-soap 中有模式验证吗?

我们使用node-soap创建 SOAP 客户端来与外部 Web 服务交互。

尽管我们包含了包含完整架构的 wsdls,但并未对请求进行任何验证。不幸的是,验证失败时外部服务器的错误消息根本没有帮助。

有没有办法使用 node-soap 根据 wsdl 中定义的模式验证请求?或者我是否必须使用libxml-xsd之类的东西并自己进行验证?

根据这个问题,客户端有一个“Validate”方法,但在最新版本中似乎没有。

xml soap wsdl web-services node.js

5
推荐指数
1
解决办法
1842
查看次数