小编Eta*_*tan的帖子

以有效的方式将C字符串转换为std :: vector <byte>

我想将C风格的字符串转换为字节向量.一个可行的解决方案是手动转换每个字符并将其推送到矢量上.但是,我对这个解决方案并不满意,并希望找到一种更优雅的方式.

我的一次尝试如下:

std::vector<byte> myVector;
&myVector[0] = (byte)"MyString";
Run Code Online (Sandbox Code Playgroud)

哪些错误并让我得到一个

错误C2106:'=':左操作数必须是l值

这样做的正确方法是什么?

c++ vector

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

分数大

我需要一些可以处理大整数(128位)的除法算法.我已经问过如何通过位移操作符来做到这一点.但是,我目前的实施似乎要求更好的方法

基本上,我将数字存储为long long unsigned int格式中的两个

A * 2 ^ 64 + BB < 2 ^ 64.

这个数字可以被整除24,我想将它除以24.

我目前的做法是改变它

A * 2 ^ 64 + B     A             B
--------------  = ---- * 2^64 + ----
      24           24            24

           A               A mod 24                    B         B mod 24
= floor( ---- ) * 2^64 +  ---------- * 2^64 + floor( ---- ) +   ----------
           24               24.0                      24           24.0
Run Code Online (Sandbox Code Playgroud)

然而,这是错误的.

(需要注意的是地板A / 24,并且 …

c++ biginteger division

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

如何在光线从嵌套对象内部开始时处理折射

我正在为教育目的构建一个简单的光线跟踪器,并希望为对象添加折射.使用Snells Law,我能够在交叉点处递归地创建新的光线.光线跟踪器目前仅支持球体,我使用的场景中我有多个球体嵌套在彼此内部,具有不同的折射率.

如果我从球体外部开始射线,一切看起来都很简单.从场景的折射率开始,一旦击中第一个球体,使用前面的折射率和球体材质的折射率折射光线,直到你击中下一个球体,依此类推.使用交点的法线我可以确定我是进入还是离开球体.

但是,我不明白我应该如何处理球体叶子以及如果光线不在场景的外部开始该怎么办.

  • 我可以只拿一叠折射率并在离开球体时立即上一层吗?
  • 如果我从球体内部开始,我如何确定我必须开始的折射率?

你有三个球体,从外到内的折射率分别为0.9,1.1和0.8.空气指数为1.0

  • 您的相机位于球体外部并指向球体的中心:

    • 起始索引是1.0,你首先用指数0.9击中外部球体并从1.0到0.9折射并保存你的射线现在是0.9材质
    • 你击中了中间球体并注意到材料常数为1.1,因为你已经保存了0.9,你知道你必须折射0.9到1.1然后保存1.1除了0.9之外
    • 你击中内部球体并从1.1折射到0.8并且你已经保存到现在0.9,1.1和0.8
    • 你再次击中内部球体(这次你退出它,所以你检查你保存的值,并知道你必须切换回1.1)
    • ......直到你在外面
  • 现在问题,当相机在球体内时.您不知道必须切换的折射率.

graphics raytracing

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

在OpenGL中渲染火焰

我想基于粒子模拟在OpenGL中渲染一个火焰效果.我有数百个具有位置和温度(因此颜色)以及所有其他属性的粒子.简单地渲染solidSphere使用过剩看起来不太现实,因为粒子传播得太宽.如何根据粒子信息绘制火焰?

c++ opengl graphics glut particles

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

使用OpenGL ES纹理缓存而不是glReadPixels来获取纹理数据

在iOS 5中,引入了OpenGL ES Texture缓存,以提供从摄像机视频数据到OpenGL的直接方式,而无需复制缓冲区.会话414中简要介绍了纹理缓存--Windows 2011中iOS 5的OpenGL ES的进展.

我发现了一篇有趣的文章,最后进一步滥用了这个概念,并glReadPixels通过简单地锁定纹理,然后直接访问缓冲区来绕过调用.

glReadPixels由于iPad 2中使用的基于图块的渲染器(即使只使用1x1纹理),因此速度非常慢.但是,所描述的方法似乎处理得比glReadPixels.

文章中提出的方法是否有效,是否可以用于提升依赖的应用程序glReadPixels

由于OpenGL与CPU并行处理图形数据,因此在CVPixelBufferLockBaseAddress不与OpenGL交谈的情况下,如何在完成渲染时知道调用?

glreadpixels core-video ios opengl-es-2.0

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

64位iOS(A64)上的汇编器

我正在尝试将某些方法替换为asm实现。目标是iOS(iPhone 5S或更高版本)上的arm64。我想使用一个专用的汇编文件,因为内联汇编程序会带来额外的开销,并且与A64内存偏移量一起使用非常麻烦

互联网上没有太多的文档,因此我不确定该怎么做。因此,我将描述将功能移至ASM所遵循的过程。


该问题的候选函数是256位整数比较函数。

UInt256.h

@import Foundation;

typedef struct {
    uint64_t value[4];
} UInt256;

bool eq256(const UInt256 *lhs, const UInt256 *rhs);
Run Code Online (Sandbox Code Playgroud)

Bridging-Header.h

#import "UInt256.h"
Run Code Online (Sandbox Code Playgroud)

Reference implementation (Swift)

let result = x.value.0 == y.value.0
          && x.value.1 == y.value.1
          && x.value.2 == y.value.2
          && x.value.3 == y.value.3
Run Code Online (Sandbox Code Playgroud)

UInt256.s

.globl _eq256
.align 2
_eq256:
    ldp        x9, x10, [x0]
    ldp       x11, x12, [x1]
    cmp        x9, x11
    ccmp      x10, x12, 0, eq
    ldp        x9, x10, [x0, 16]
    ldp       x11, x12, [x1, …
Run Code Online (Sandbox Code Playgroud)

assembly calling-convention ios arm64 swift

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

如何为 macOS 构建可移植的静态 C 库

我想构建一个可移植的静态 C 库,无论 macOS 版本如何,都可以链接到 macOS 二进制文件。C 库没有任何依赖项(即没有 stdlib,没有特定于操作系统的调用)。唯一的依赖是 CPU,它必须是 x86_64。

当提取相关的编译器三元组时,我得到x86_64-apple-darwin16.7.0了 Sierra 和x86_64-apple-darwin17.2.0High Sierra。另外,当我在 High Sierra 上构建时,如果我使用 Sierra 的静态库(即使我指定--target x86_64-apple-darwin16.7.0为 clang),则会出现警告。

  • 如何为 macOS 构建真正可移植的静态库?如果不可能的话,有什么办法呢?每个主要 macOS 版本都有一个从同一版本构建的不同版本?是否存在从过时的 Xcode 版本中复制 SDK 的黑客行为?请记住,我的库是完全可移植的,并且不以任何方式依赖于 macOS 或 stdlib。

  • 编译器三元组末尾的版本部分重要吗?

c macos portability cross-compiling static-libraries

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

在QueueUserAPC中指定的回调不会被调用

在我的代码中,我用它QueueUserAPC中断当前工作中的主线程,以便在回到之前的工作之前先调用一些回调.

std::string buffer;
std::tr1::shared_ptr<void> hMainThread;
VOID CALLBACK myCallback (ULONG_PTR dwParam) {
    FILE * f = fopen("somefile", "a");
    fprintf(f, "CALLBACK WAS INVOKED!\n");
    fclose(f);
}
void AdditionalThread () {
    // download some file using synchronous wininet and store the
    // HTTP response in buffer
    QueueUserAPC(myCallback, hMainThread.get(), (ULONG_PTR)0);
}
void storeHandle () {
    HANDLE hUnsafe;
    DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), 
        GetCurrentProcess(), &hUnsafe, 0, FALSE, DUPLICATE_SAME_ACCESS);
    hMainThread.reset(hUnsafe, CloseHandle);
}
void startSecondThread () {
    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)AdditionalThread, 0, 0, NULL);
}
Run Code Online (Sandbox Code Playgroud)

storeHandlestartSecondThread …

c++ windows multithreading signals interrupt

4
推荐指数
1
解决办法
2507
查看次数

10.11 NSCollectionView:"无法在bundle NSBundle中加载nibName:NSCollectionViewItem"

我想根据https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/#10_11CollectionView使用来自Swift的新API模型的NSCollectionView .由于我更喜欢​​在IB中尽可能多地做,我想使用内容绑定,并在链接页面上按照绑定内容部分到NSCollectionView(自WWDC种子以来新增).

我已经从对象库中将NSCollectionView拖入我的故事板,然后通过连接检查器删除了另外生成的原型 segue,并删除了生成的NSCollectionViewItem.然后,我将Collection View的布局设置为Flow,并将集合视图连接到视图控制器的插座.

接下来,我使用Xcode的视图模板创建了一个单独的.xib文件,并放入必要的视图.我还引入了"Collection View Item"对象.

然后,我调整了视图控制器的viewDidLoad方法,用集合视图注册nib.

override func viewDidLoad() {
    super.viewDidLoad()

    let nib = NSNib(nibNamed: "Item", bundle: nil)!
    collectionView.registerNib(nib, forItemWithIdentifier: "")
}
Run Code Online (Sandbox Code Playgroud)

最后,我将我的数组控制器连接到NSCollectionView的Content绑定.

但是,当我尝试启动应用程序时,会抛出异常:

[NSNib _initWithNibNamed:bundle:options:]无法在bundle NSBundle中加载nibName:NSCollectionViewItem

仅当我的数组具有实际内容时才会发生异常,因此仅当需要实例化CollectionViewItem时.

我在这做错了什么?

示例项目:https://scriptreactor.com/collectionviewtest.zip

macos nib cocoa-bindings nscollectionview xcode7

4
推荐指数
1
解决办法
4824
查看次数

在openGL中绘制具有透明度的实心球体

我想glutSolidSphere用一些透明度来绘制,但它似乎不起作用.

glColor4f(1, 0, 0, 0); // should be completely invisible
glPushMatrix();
glTranslatef(position.x, position.y, position.z);
glutSolidSphere(3, 5, 5);
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

在我的main函数中,我使用以下显示模式初始化:

glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA);
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

c++ opengl graphics transparency glut

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