小编mic*_*rus的帖子

在OpenGL中进行深度测试的Z-fighting解决方案 - 它们如何工作?

描述

我在OpenGL中遇到了Z-Fighting的主要问题,我花了很长时间才找到解决这个问题的方法.我发现的一些,我理解并不喜欢:

  • 移动多边形彼此远离(如OpenGL中的glPolygonOffset)
  • 根据Z坐标划分场景,并使用单独的干净z缓冲区绘制场景的部分.

那些我不明白的:

我已经在我的程序中实现了第二个,只需将它放入球的顶点着色器(它与地面z-fight):

float C = 1.0; 
float far = 2000.0; 
   gl_Position = u_projView * a_position;      
gl_Position.z = 2.0*log(gl_Position.w*C + 1.0)/log(far*C + 1.0) - 1.0;
gl_Position.z *= gl_Position.w;
Run Code Online (Sandbox Code Playgroud)

它工作了!

实际问题

  1. 任何人都可以解释我是如何在顶点着色器中更改顶点的Z坐标解决了问题而没有将顶点明显地移动到我身上?(场景看起来与人眼相同).它是如何改变z深度值的分布的?我猜我错过了一些关于渲染管道的知识.
  2. 任何人都可以向我解释我们如何使用Projection Matrix来解决问题?它是如何工作的?
  3. 是否还有其他类似的有效方法来解决z-fighting问题?

谢谢!

opengl graphics shader rendering glsl

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

为什么使用DI进行模拟比在objective-c中模拟对象更好?

这篇博客文章说:

虽然有时候有一些明智的方法可以在没有DI的情况下模拟对象(通常是通过模拟类方法,如上面的OCMock示例所示),但它通常是不可能的.即使有可能,测试设置的复杂性也可能超过其好处.如果你一直使用依赖注入,你会发现使用存根编写测试并且模拟会更容易.

但它没有解释原因.id在简单的OCMockito 中,DI(注入符合协议的对象)在Objective-C中更适合模拟的可能场景是什么?

[given([mockArray objectAtIndex:0]) willReturn:@"first"];
 [verifyCount(mockArray, times(1)) objectAtIndex:];
Run Code Online (Sandbox Code Playgroud)

unit-testing dependency-injection mocking objective-c ios

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

全局范围附加依赖属性

我想在普通编程中做一些类似静态变量的事情,只能在使用依赖属性的 XAML 中。

这意味着我希望该物业:

  • 成为一个实例
  • 每个元素都可见
  • 可绑定

我怎么做 ?

c# wpf dependency-properties mvvm

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

区域监控背景中的信标区域不工作

当应用程序处于后台时,我遇到了区域监控问题.如果应用程序位于前台,则区域进入和退出会被调用,但在后台时则不会被调用(有时它们会触发但非常罕见).

信标区域监控如何适用于iOS 8.1.1?当在背景中处于Beacon接近时,区域是否应立即进入/退出?

我该怎么做才能确保它有效?

Background Modes:Location Updates或者Uses Bluetooth LE accessories必须进行背景信标监控才能工作?GeoFencing在没有这些的情况下为我工作.

我已经做了什么:

  • 为每个地区设置这些:

    beaconRegion.notifyOnExit=YES; beaconRegion.notifyOnEntry=YES; beaconRegion.notifyEntryStateOnDisplay = YES;

  • 确保设置中的所有内容都有序(应用程序刷新等)

编辑:

我已经创建了一个新项目但它仍然无效.这是代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {



_locationManager = [[CLLocationManager alloc] init];
_locationManager.pausesLocationUpdatesAutomatically = NO;
_locationManager.desiredAccuracy = 25;
_locationManager.delegate = self;
[_locationManager requestAlwaysAuthorization];
[_locationManager startUpdatingLocation];

CLBeaconRegion* reg =[self prepareBeacon:@"here i put my UUID" :446 :2196];
[_locationManager startMonitoringForRegion:reg];
[_locationManager startRangingBeaconsInRegion:reg];

return YES;
}

-(CLBeaconRegion*)prepareBeacon:(NSString*)uuid :(int)maj :(int)min
{

NSString* identifier = [NSString stringWithFormat:@"%@,%d,%d", uuid, maj, min];

CLBeaconRegion …
Run Code Online (Sandbox Code Playgroud)

iphone core-location ios

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

依赖倒置原则是否意味着我必须为每个模块创建一个接口?

如果我希望我的代码遵循SOLID原则,特别是依赖性反转原则,这是否意味着我必须为每个模块创建一个接口(抽象),即使它只有一个实现?

在我看来,并根据这些帖子:

http://josdejong.com/blog/2015/01/06/code-reuse/

http://blog.ploeh.dk/2010/12/02/Interfacesarenotabstractions/

为每个模块创建"抽象"是代码混乱并违反了YAGNI原则.

我的经验法则是:不要使用依赖注入,或者为模块创建接口,除非它有多个实现(第二个实现可以是用于数据库/服务器/文件模块的单元测试的模拟类).

有人可以为我清楚这一点吗?SOLID是否意味着我必须注入每个模块并对其进行抽象?如果是的话,是不是只是在很多时候我们根本不会使用它?

architecture dependency-injection solid-principles dependency-inversion

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

iOS CBCentralManager“打开蓝牙”提示和 CBCentralManagerOptionShowPowerAlertKey 默认值

iOS 文档CBCentralManagerOptionShowPowerAlertKey默认值是NO.

实例化时我没有指定任何选项CBCentralManager

[[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];
Run Code Online (Sandbox Code Playgroud)

但它仍然显示“打开蓝牙以允许...”提示。

这是文档中的错误,还是我做错了什么?

编辑:

我发现了这个:

http://chris.cm/define-whether-bluetooth-is-enabled-on-ios-passively/

和这个:

iOS CoreBluetooth 被动检查蓝牙是否已启用,而不提示用户打开蓝牙

这似乎表明您必须显式设置CBCentralManagerOptionShowPowerAlertKeyto NO,这表明文档中存在错误?我只是想找人确认一下

编辑2:

CBCentralManagerOptionShowPowerAlertKey设置后0问题似乎解决了。但我仍在寻找一些解释,因为文档说的是一套,程序却是另一套,这似乎非常不合逻辑。

cocoa bluetooth ios

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