小编use*_*704的帖子

简单的GLSL卷积着色器非常慢

我正在尝试在iOS的OpenGL ES2.0中实现2D轮廓着色器.这太疯狂了.如在5fps慢.我已将其跟踪到texture2D()调用.但是,如果没有这些,任何卷积着色器都是可撤消的.我尝试过使用lowp而不是mediump,但是一切都只是黑色,虽然它确实给了另外5fps,但它仍然无法使用.

这是我的片段着色器.

    varying mediump vec4 colorVarying;
    varying mediump vec2 texCoord;

    uniform bool enableTexture;
    uniform sampler2D texture;

    uniform mediump float k;

    void main() {

        const mediump float step_w = 3.0/128.0;
        const mediump float step_h = 3.0/128.0;
        const mediump vec4 b = vec4(0.0, 0.0, 0.0, 1.0);
        const mediump vec4 one = vec4(1.0, 1.0, 1.0, 1.0);

        mediump vec2 offset[9];
        mediump float kernel[9];
        offset[0] = vec2(-step_w, step_h);
        offset[1] = vec2(-step_w, 0.0);
        offset[2] = vec2(-step_w, -step_h);
        offset[3] = vec2(0.0, step_h);
        offset[4] = vec2(0.0, 0.0); …
Run Code Online (Sandbox Code Playgroud)

opengl-es glsl filter convolution opengl-es-2.0

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

OpenGL ES2.0 Modelview矩阵2D

为了2D目的(正交)从OpenGL ES1.1迁移到2.0,我在确定如何应用转换(矩阵乘法顺序)时遇到了一些麻烦.我只需要在Z轴上旋转,并在X和Y上进行缩放,这是总是相同的值,因此这应该显着简化.我目前使用的方法(ES1.1)具有虚拟相机,位于与对象相同的绝对坐标空间中.

在每一帧的开头,我首先通过调用来进行相机的变换

    glRotatef(angle, 0.0f, 0.0f, 1.0f);
    glScalef(zoom, zoom, 0.0f);
    glTranslatef(-pos.x, -pos.y, 0.0f); // negative position to shift everything back to the center of the view
Run Code Online (Sandbox Code Playgroud)

对于对象,它看起来像这样(省略纹理和绘图调用).

   glPushMatrix(); // to preserve camera transform
   glTranslatef(pos.x, pos.y, 0.0f);
   glScalef(scale, scale, 0.0f);
   glRotatef(angle, 0.0f, 0.0f, 1.0f);
   // drawing done here
   glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

我试图在ES2.0中获得相同的功能,但所有矩阵操作都必须手动执行.

这个链接我发现多种选择的正确顺序应该是((Scale*Rotation)*翻译)

接下来,我提出了一个结合所有这些的单矩阵公式,因为2D更简单.我还包括一个正交投影矩阵.对于测试着色器,我有这个:

   attribute vec4 position;
   attribute vec4 color;

   varying vec4 colorVarying;

   uniform vec2 translate;
   uniform float rotate;
   uniform float scale;
   uniform vec4 camera; // x, y, z = …
Run Code Online (Sandbox Code Playgroud)

camera matrix model-view opengl-es-2.0 opengl-es-1.1

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

视图不会在iPad上全屏显示

简单地说.我正在开发一款不使用.xib文件加载的iPhone(iOS)游戏.窗口和视图以编程方式创建.它会自动检测分辨率和视网膜显示并进行相应调整.

然而,当运行和iPad(仅适用于iPad的模拟器)时,它显示在与iPhone分辨率相同大小的迷你窗口中,右下角有一个小的2x按钮.我希望它以全分辨率加载全屏(比手机更大的分辨率).所有东西都会相应缩放,所以看起来和手机一样,看起来一样清脆.

为什么会这样?为什么窗口不会像在iPhone上那样自动占据全屏?

经过多次搜索,我找到了这个模板:https://github.com/ryanscott/rcloudlib/blob/master/Samples/clean_universal_app_template.zip

它可以在iPhone和iPad上正确加载.

然而,看一下代码,它与我正在做的事情没什么不同.它所做的只是检查正在使用的设备,并加载相应的应用程序委托,在这种情况下包含完全相同的代码,尽管是背景颜色.这显然是针对那些想要在iPhone和iPad上拥有不同视图负载,同时避免使用笔尖的人.我想在所有设备上使用SAME视图,因此我不需要使用多个委托等.

无论设备如何,我如何强制应用代表使用全屏?

iphone objective-c ipad ios

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