标签: opengl-es

GLSL:iPhone应用程序无法访问内置属性?

我在这里真的很绝望.我正在使用Xcode,尝试在iPhone上实现一些OpenGL内容.我必须为Phong-Lighting写一个Shader.我得到了声明我的几何(顶点,索引,计算等)并将相应的参数作为属性传递给着色器(用GLSL编写).使用这些属性可以正常工作,一些非常基本的着色器程序可以正确编译并提供预期的输出.

现在我试着从一些更先进的计算开始,为此我需要使用GLSL的一些内置属性,即"g​​l_NormalMatrix",但每当我尝试时,程序崩溃,我得到一个"错误:0:3:使用未声明的标识符'gl_NormalMatrix'".每当使用任何内置属性(如gl_Vertex,gl_Normal等)时,它都会发生相同的情况.

这些属性在iPhone上的GLSL中是不可用的,还是我遗漏了什么?也许我还没有完全理解这是如何工作的.如上所述,将我自己的顶点属性传递到着色器工作正常,我也想知道程序应该如何"自己""知道"正确的值 - 所以内置属性的整个概念仍然有点令人困惑我.但每当我尝试运行一些着色器时,我发现在线查看是否有事情发生,我会抛出这些错误,即使其他人似乎在编写着色器时也广泛使用内置属性.

我真的希望有人能够对此有所了解.提前多谢!

朱莉娅

iphone opengl-es glsl ios opengl-es-2.0

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

避免在锁定屏幕上恢复应用程序

我有一个使用OpenGL ES进行渲染的游戏.它需要我在恢复应用程序时重新加载所有纹理.当我按下homekey并退出(暂停应用程序)然后恢复它时,它工作正常.但是,当我使用电源键关闭屏幕然后打开屏幕时,应用程序将自动恢复锁定屏幕(滑动解锁屏幕).无论如何我可以避免这种情况吗?因为简历不合适,如果我在稍微延迟(10秒)后解锁屏幕,游戏将重新加载,我最终看到的只是一个白屏.我想主要是,如果我可以阻止应用程序在锁定屏幕恢复.我希望在解锁屏幕后恢复应用程序.

谢谢阿卡什

android opengl-es android-activity

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

在没有当前上下文的情况下调用OpenGL ES API

当我从我正在显示谷歌地图的网页视图切换到另一个视图时,偶尔只会偶然关闭我的应用程序(没有强制关闭对话框,只需关闭).我在logcat中收到此错误:

E/libEGL(29103):调用没有当前上下文的OpenGL ES API(每个线程记录一次)

有任何想法吗?

我有一个mainActivity,它为每个页面使用不同的"视图".以下是main中用于调用视图的代码:

private void changeCardDisplayed(int index) {
//      Log.i(DEBUG_TAG, "changeCardDisplay index is " + index);
        if (mCardLayout != null){
            mCardLayout.destroy();
        } else {
            mCardLayout = new CardLayout(this);
        }
        if (mMapView != null) mMapView.destroy();
        mCardLayout = null;
        mMapView = null;
        mCardContainer.removeAllViews();
        mMapsContainer.removeAllViews();
        if (mWD != null) {
            mAdView.makeAdRequest(mWD.cityId, mWD.iconCode);
        }
        System.gc();
        switch (index) {
        case ACCUWX.Views.CURRENT_VIEW:
            mCardLayout = new CurrentView(this);
            break;
        case ACCUWX.Views.FORECAST_VIEW:
            mCardLayout = new ForecastView(this);
            break;
        case ACCUWX.Views.HOURLY_VIEW:
            mCardLayout = new HourlyListView(this);
            break;
        case ACCUWX.Views.LIFESTYLE_VIEW: …
Run Code Online (Sandbox Code Playgroud)

android opengl-es

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

Android系统.AndEngine.使用透明度的图像工件

我正在使用AndEngine(基于2D OpenGL的引擎).当我使用具有透明度的纹理(PNG图像)时,我在图像上的边框上有图像伪像.我需要帮助解决这个问题.我附上了2张图片.首先,我只使用某种字体显示文本.在第二个,您可以看到圆角,但在纹理的角落,您也可以看到工件.请注意,这仅在REAL设备上发生.在模拟器上一切都OK.我的设备是三星i5700 Galaxy Spica运行Android 2.1
角落与神器http://i44.tinypic.com/2crttlx.png 文本与神器http://i39.tinypic.com/10r4yn9.png

android opengl-es andengine

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

WebGL中的多个程序不起作用

我正在尝试在webgl中使用多个着色器程序,但仍然会遇到问题.

似乎如果我在程序中有不同数量的顶点着色器属性,那么我没有得到任何没有错误的渲染.是否有一些约束意味着程序必须具有相同数量的属性?更改程序时是否需要禁用/启用属性位置?

似乎只是创建多个程序导致问题(我甚至不必使用第二个着色器,只是它被创建的事实导致问题).

要创建属性,我正在使用以下代码段(当所有程序中的属性数相同时,工作正常):

for ( var i=0 ; i<vertexAttributes.length ; i++ )
{
   shaderProgram[vertexAttributes[i].name] = gl.getAttribLocation(shaderProgram,vertexAttributes[i].name);
   gl.enableVertexAttribArray(shaderProgram[vertexAttributes[i].name]);
}
Run Code Online (Sandbox Code Playgroud)

很抱歉发布了如此大量的代码,但这最能说明问题所在.这是来自learningwebgl.com教程之一的代码,我所做的就是添加第二对着色器("shader2-fs"和"shader2-vs")和一个名为initShaders2的新函数.如果在webGLStart()中调用initShaders2(因为它在代码中),那么什么都没有被绘制?我很困惑!

<script type="text/javascript" src="two_files/glMatrix-0.js"></script>
<script type="text/javascript" src="two_files/webgl-utils.js"></script>

<script id="shader-fs" type="x-shader/x-fragment">
    precision mediump float;

    varying vec4 vColor;

    void main(void) {
        gl_FragColor = vColor;
    }
</script>

<script id="shader-vs" type="x-shader/x-vertex">
    attribute vec3 aVertexPosition;
    attribute vec4 aVertexColor;

    uniform mat4 uMVMatrix;
    uniform mat4 uPMatrix;

    varying vec4 vColor;

    void main(void) {
        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
        vColor = aVertexColor;
    }
</script>

<script id="shader2-fs" type="x-shader/x-fragment"> …
Run Code Online (Sandbox Code Playgroud)

javascript shader opengl-es glsl webgl

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

我们如何在libGDX中删除背面纹理?

private Texture  druidTexture;
private SpriteBatch batch;    
Sprite sprite;
@Override
public void create() {
druidTexture = new Texture(Gdx.files.internal("star-large.gif"));    
sprite = new Sprite(druidTexture);
batch = new SpriteBatch(); 
}
@Override
public void dispose() {

}

@Override
public void pause() {

}

@Override
public void render() {
    batch.begin();
    sprite.rotate(45);
    float x=sprite.getX();
    float y=sprite.getY(); 
    float newx=x+1;
    System.out.println(newx);
    float newy=y+1;
    sprite.setX(newx);
    sprite.draw(batch);
    batch.end();
}

@Override
public void resize(int arg0, int arg1) {

}

@Override
public void resume() {

}

}
Run Code Online (Sandbox Code Playgroud)

我正在获取上述代码的输出 在此输入图像描述

但是我需要移除后面的星星,对于每个星星,我该怎么办?

java android opengl-es libgdx

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

在iPhone中将OpenGL与UIKit混合时的确切性能成本是多少?

我需要做出如何处理需要在图像纹理上渲染少量3D对象的应用程序的设计决策.结果需要呈现并保存为UIImage.图形设计(客户端)期望标准UIKit控件操纵3D世界.

OpenGL视图(CAEAGLLayer层)需要在UIScrollView内部进行廉价和自然的滚动和缩放实现.只有很少的额外控制来操纵旋转比例和几个3D对象的过渡.预期的三角形数量不多(最多100-200个)和2-3个纹理(1个模板).它甚至不必经常刷新,只是在某些变换和缩放发生变化时.CAEAGLLayer不需要是不透明的.

我会选择Core Animation解决方案,但不支持将3D转换的CALayers渲染为CGContextRef(也不支持屏蔽).

将CAEAGLLayer放入UIScrollView并将其与少量UIKit视图混合时,实际性能成本是多少?我可以期望以平滑的帧速率(每秒30fps)呈现每秒多少三角形,这样我可以做出最好的决定吗?

我知道已有类似的问题,但没有一个答案提供具体的数字,这可能有助于估计预期的渲染结果.

iphone opengl-es uiscrollview uikit

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

OpenGL ES - 全局上下文错误中的无效限定符

在我的opengl片段中添加一个float属性时(我想稍后找到它),当我编译时,我得到:

ERROR: 0:1: Invalid qualifiers 'attribute' in global variable context
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

const char * sChromaKeyFragment = _STRINGIFY(
                                             attribute float threshold;

                                             varying highp vec2 coordinate;
                                             precision mediump float;

                                             uniform sampler2D videoframe;
                                             uniform sampler2D videosprite;
                                             uniform vec4 mask;



                                             vec3 normalize(vec3 color, float meanr)
{
    return color*vec3(0.75 + meanr, 1., 1. - meanr);
}

                                             void main()
{
} 
Run Code Online (Sandbox Code Playgroud)

OpenGL新手.任何帮助都会很棒.谢谢!

iphone opengl-es ios

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

OPEN GL ES 2.0 - glGetAttribLocation返回-1

我有这个代码:

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    GLES20.glClearColor(0, 0, 0, 1.0f);

    int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER,
            getVertexShader());
    int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER,
            getFragmentShader());
    mProgram = GLES20.glCreateProgram();
    GLES20.glAttachShader(mProgram, vertexShader);
    GLES20.glAttachShader(mProgram, fragmentShader);
    GLES20.glLinkProgram(mProgram);

    Matrix.setIdentityM(mMMatrix, 0);

    **maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");**

}
Run Code Online (Sandbox Code Playgroud)

在标记的行之后,由于某种原因,maPositionHandle为-1.

这是我的vert着色器:

uniform mat4 uTMatrix;
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
attribute vec2 aTextureCoord;
varying vec2 vTextureCoord;

void main() {
    gl_Position = uMVPMatrix * uTMatrix * gl_Position;
    vTextureCoord = aTextureCoord;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,有一个名为aPosition的属性,但我得到了-1,我在屏幕上没有得到绘图输出.我该如何解决?谢谢.

android opengl-es glsl opengl-es-2.0

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

OpenGL:gluUnProject返回错误的坐标

我设置了我的场景(Android应用程序,OpenGL ES),如下所示:

GLU.gluPerspective(gl, 60, viewRatio, 0.1f, 1000.0f);
// ...
GLU.gluLookAt(gl, cameraX, cameraY, cameraZ, cameraX, cameraY, cameraZ - 1f, 0f, 1f, 0f);
// Scene scaled down because object positions are in [-10000..10000] for x & y
gl.glScalef(0.001f, 0.001f, 1.0f);
Run Code Online (Sandbox Code Playgroud)

场景渲染得很好,它包含z = -10处的四边形和z = -30处的一个巨型背景四边形.我现在正在尝试实现光线拾取,就像这样(取自这个线程:

public float[] unproject(float rx, float ry, float rz) {
    float[] xyzw = {0, 0, 0, 0};
    int[] viewport = {0, 0, mDisplayWidth, mDisplayHeight};
    android.opengl.GLU.gluUnProject(rx, ry, rz, mMatrixGrabber.mModelView, 0, mMatrixGrabber.mProjection, 0, viewport, 0, xyzw, 0);
    xyzw[0] …
Run Code Online (Sandbox Code Playgroud)

android opengl-es ray-picking

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