小编Blu*_*pud的帖子

无需按钮即可在SwiftUI中呈现新视图

所以我想使用SwiftUI呈现一个新视图,而用户不必点击按钮,因为NavigationButton可以使用它。这是一个例子

struct ContentView : View {

    var model: Model

    var body: some View {
        NavigationView {
            Text("Hello World")
        }.onAppear {
            if model.shouldPresent {
                // present a new view
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

onAppearI中,我想包含一些将新视图推送到导航堆栈的代码。

ios swift swiftui

15
推荐指数
1
解决办法
5625
查看次数

OpenGL渐变"条带"工件

最近我一直试图清理我的openGl渲染.我现在已经有这些文物了一段时间,但从来没有真正考虑过它.这是一个屏幕截图: 在此输入图像描述

在此输入图像描述 经过一番研究后,我无法弄清楚它有什么问题.我在OSX上使用OpenGl,但我在其他系统上尝试过,并且会出现相同的工件.

opengl

8
推荐指数
1
解决办法
4100
查看次数

照明应该在视图空间还是世界空间进行

我最近一直在为我的引擎开发一些延迟渲染。我现在几乎已经可以使用了。然而,当我稍微移动相机时,我注意到某些表面上有一些微妙的阴影,但在其他表面上更明显(我没有任何镜面光)。我一直在进行光照计算以及视图空间中的 G 缓冲区渲染。这就提出了一个问题:我应该在世界空间中进行照明吗?我非常确定光线的变化来自视图空间中的法线。如果有影响,我会根据深度图计算视图空间位置。我读过在视图空间中进行计算很好,但是经过一些修改,我无法找出问题所在,并且可能只是诉诸于在视图空间中进行计算。如果有人好奇这里是我的着色器代码:

普通通行证:

varying vec3 normal;
void main(void)
{
    gl_Position =gl_ModelViewProjectionMatrix*gl_Vertex;
    normal = (gl_NormalMatrix*gl_Normal)* 0.5 + 0.5;
}
Run Code Online (Sandbox Code Playgroud)

灯光通行证:

uniform sampler2D positionMap;
uniform sampler2D normalMap;
uniform sampler2D albedoMap;
uniform mat4 iprojMat;
uniform int light;
uniform vec3 lightcolor;
varying vec2 texcoord;

void main()
{
    //get all the G-buffer information
    vec3 normal = ((texture2D(normalMap,texcoord)).rgb * 2.0 - 1.0);
    vec3 color = (texture2D(albedoMap,texcoord)).rgb;
    if (color == vec3(0,0,0))
        discard;
    float z = (texture2D(positionMap,texcoord)).r;
    float x = texcoord.x * 2.0 - 1.0;
    float y …
Run Code Online (Sandbox Code Playgroud)

glsl

5
推荐指数
0
解决办法
5649
查看次数

使用CABasicAnimation切割视图一半

所以我想在看似3D的东西中旋转我的UIView.我做了一个快速搜索,互联网上说:使用核心动画.所以我看了一眼,然后我想出了这个代码,让我的视图旋转

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"];
    animation.fromValue = @(0);
    animation.toValue = @(4 * M_PI);
    animation.repeatCount = INFINITY;
    animation.duration = 5.0;

    [self.layer addAnimation:animation forKey:@"rotation"];

    CATransform3D transform = CATransform3DIdentity;
    transform.m34 = 1.0 / -2000;

    self.layer.transform = transform;

    self.layer.masksToBounds = NO;
Run Code Online (Sandbox Code Playgroud)

实际视图旋转正常,但它会切断视图的一半.这是我在photoshop中制作的快速图片,以显示我的意思在此输入图像描述

我现在已经进行了数小时的搜索,而且我似乎无法弄清楚是什么引起了这种情况.任何帮助或输入将不胜感激.谢谢.

编辑:继承人我是如何创建视图的:

UIView* test = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)];
        test.backgroundColor = [UIColor redColor];
        [self.view addSubview:test];
Run Code Online (Sandbox Code Playgroud)

在界面生成器中创建的视图上尝试后,它工作正常,但我需要以编程方式进行这些操作.

core-animation clipping uiview ios

5
推荐指数
0
解决办法
688
查看次数

在OpenGL中绘制法线的正确方法?

现在我正在OpenGl中编写一个程序.我正在从文件渲染一些复杂的3D图形.在对代码进行三重检查之后,我知道正在读取所有值.唯一表现奇怪的是法线.我是这样画的:

     glVertex3fv(vert1);
     glVertex3fv(vert2);
     glVertex3fv(vert3);


    glNormal3fv(norm1);
    glNormal3fv(norm2);
    glNormal3fv(norm3);
Run Code Online (Sandbox Code Playgroud)

正在从GLFloats中读取值.告诉我正确的方式,或者至少我做错了什么.

opengl objective-c normals

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

在C++中舍入到最近偶数

我想知道C++是否包含了一种舍入到最接近的偶数的方法.我环顾四周,似乎无法找到关于这个主题的任何内容.我可以编写自己的方法,但使用内置方法很可能会更快.

谢谢.

int rounding

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

计算给定控制点的贝塞尔曲线的曲率半径

我正在尝试编写一种以曲率作为优化参数之一的遗传算法。我想根据贝塞尔曲线的控制点计算曲率。我有一个想要优化的最小曲率半径。我一直在引用这篇论文:https ://arxiv.org/pdf/1503.01524.pdf

在论文中,有一个函数可以获取三角形的边长来获取隐含的曲率半径,我已经实现了该函数。这是我当前的代码:

// Computes the curvature implied by 3 control points of a bezier curve
float curvature(float4 p0, float4 p1, float4 p2) {

    // Get the triangle side lengths
    float a = distance(p0, p1);
    float b = distance(p1, p2);
    float c = distance(p2, p0);

    // Do the curvature calculation
    float num = a * b * c;
    float denom = (a + b + c) * (b + c - a) * (a - b + c) * …
Run Code Online (Sandbox Code Playgroud)

bezier

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

2 个 4x4 矩阵之间的插值

对于使用 colladas 的骨骼动画,我需要在 2 个矩阵之间进行线性插值。我在某处看到我可以使用四元数在矩阵之间进行插值,但这仅适用于旋转分量,而且我还需要保留变换。这是我的代码,除了翻译部分外,它都有效:

float total = (orderedBones[i]->Animation->keyFrames[nextKeyFrame] - orderedBones[i]->Animation->keyFrames[nextKeyFrame - 1]) * 100.0;
float progress = orderedBones[i]->Animation->accumTime - orderedBones[i]->Animation->keyFrames[nextKeyFrame - 1] * 100.0;
float interpolation = progress / total;

glm::quat firstQuat = glm::quat_cast(orderedBones[i]->Animation->Matrices[nextKeyFrame - 1]);
glm::quat secondQuat = glm::quat_cast(orderedBones[i]->Animation->Matrices[nextKeyFrame]);
glm::quat finalQuat = glm::slerp(firstQuat, secondQuat, interpolation);

orderedBones[i]->Animation->interpoltaedMatrix = glm::mat4_cast(finalQuat);
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

interpolation matrix quaternions

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