标签: opengl-es

GLSL着色器用于纹理'烟雾'效果

我环顾四周,没有找到任何相关的东西.我正在创建一个着色器以提供纹理烟雾效果动画,如下所示:

例

不要求完整/完整的解决方案(虽然那会很棒)但是我可以开始实现这种效果的任何指针.我是否需要为绘图设置顶点?如果我只有纹理,这是否可能?

opengl-es glsl opengl-es-2.0

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

WebGL元素阵列缓冲区无法正常工作

我正在学习带有haxe的WebGL,并且我坚持使用描述元素数组的部分.什么被认为是一个广场没有出现,我不知道为什么?

var verticesArray = [   
                             0.5, 0.5,      
                             0.5,-0.5,  
                            -0.5,-0.5, 
                            -0.5, 0.5   
                        ];

    var indicesArray = [0, 1, 3, 1, 2, 3];

    var VBO = GL.createBuffer();
    GL.bindBuffer(GL.ARRAY_BUFFER, VBO);
    GL.bufferData(GL.ARRAY_BUFFER,new Float32Array(verticesArray), GL.STATIC_DRAW);

    var EBO = GL.createBuffer();
    GL.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, EBO);
    GL.bufferData(GL.ELEMENT_ARRAY_BUFFER,  new UInt16Array(indicesArray), GL.STATIC_DRAW);

    GL.vertexAttribPointer(0, 2, GL.FLOAT, false, 0, 0);
    GL.enableVertexAttribArray(0);

    GL.useProgram(shaderProgram);


    GL.drawElements(GL.TRIANGLES, 6, GL.UNSIGNED_INT, 0);

    GL.bindBuffer(GL.ARRAY_BUFFER, null);
    GL.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
Run Code Online (Sandbox Code Playgroud)

这里是所有想要绘制正方形的代码我已经得到了着色器编程工作

haxe opengl-es webgl

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

WebGL:INVALID_OPERATION:vertexAttribPointer:stride或offset对类型无效

我学习WebGL.

当我尝试绘制三个点时,我会得到一些错误,每个点都有自己的位置,大小和颜色.我尝试通过相同的缓冲区来完成它.

// To draw three points. Each of this has own location, size and color.
function start(gl){
  if(!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)){
    console.log('Failes shaders initialization.');
    return;
  }
  var a_Position = gl.getAttribLocation(gl.program, 'a_Position');
  if(a_Position < 0){
    console.log('The "a_Position" variable was not found in the shader code.');
    return;
  }
  var a_PointSize = gl.getAttribLocation(gl.program, 'a_PointSize');
  if(a_PointSize < 0){
    console.log('The "a_PointSize" variable was not found in the shader code.');
    return;
  }

  var a_FragColor = gl.getAttribLocation(gl.program, 'a_FragColor');
  if(a_FragColor < 0){
    console.log('The "a_FragColor" variable was not found …
Run Code Online (Sandbox Code Playgroud)

opengl-es webgl opengl-es-2.0

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

为什么在片段着色器中无法访问纹理lod

我试图在OpenGL ES 2.0片段着色器中与mipmap纹理的细节水平达成一致.

根据这个答案,不可能使用bias参数texture2D来访问片段着色器中的特定细节级别.根据该帖子,相反,细节水平是从相邻片段的并行执行中自动计算的.我必须相信这就是事情的运作方式.

我无法理解的是它的原因.为什么不能访问特定级别的细节,这样做的确非常简单?为什么人们必须依赖复杂的固定功能呢?

对我来说,这似乎非常违反直觉.毕竟,整个OpenGL相关的东西从固定功能演变而来.OpenGL ES旨在涵盖比OpenGL更广泛的硬件,因此只支持更多简单版本的东西.因此,我完全理解规范的开发人员是否已经确定LOD参数是强制性的(可能默认为零),并且由着色器程序员以他认为合适的任何方式计算出适当的LOD.添加一个自动执行该计算的函数似乎是我在桌面OpenGL中所期望的.

无论我如何看待它,不提供对特定级别的直接访问对我来说都没有任何意义.特别是因为该bias参数表明我们确实允许调整细节级别,所以显然这不是关于从内存中获取数据仅用于并行处理的一堆片段的单个级别.我想不出任何其他原因.


当然,为什么问题往往会吸引意见.但由于Stack Overflow不接受基于意见的答案,请将您的意见仅作为评论发布.另一方面,答案应该基于可验证的事实,例如具有明确知识的人的陈述.如果有任何开发者讨论这个事实的记录,那将是完美的.如果有人在讨论这个问题时有博客文章,那仍然会非常好.

由于Stack Overflow问题应该处理真正的编程问题,有人可能会争辩说要求理由是个坏问题.得到答案不会突然出现明确的lod访问,因此无法帮助我解决我的直接问题.但我觉得这里的原因可能是由于OpenGL ES如何工作的一些重要方面,到目前为止我还没有掌握.如果是这样的话,那么了解这一决定背后的动机将有助于我和其他人更好地理解OpenGL ES作为一个整体,从而在性能,准确性,可移植性等方面更好地利用它. .因此,我可能已经将这个问题称为"我错过了什么?",这对我来说当然是一个非常真实的编程问题.

opengl-es texture2d level-of-detail fragment-shader glsles

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

如何使用openGL和贝塞尔曲线创建拼图块?

我正在尝试创建一个拼图游戏演示,我想知道在不使用蒙版的情况下创建拼图的替代方法.目前我通过拍摄完整的图像拼图碎片,将图像分成四个部分(假设拼图是2x2),然后存储并对每个部分应用遮罩.它看起来像下面

    // create standard puzzle pieces
    arryPieceEndPos = new int[mCols][mRows];
    arryPieceImg = new Bitmap[mCols * mRows];
    arryIsPieceLocked = new boolean[mCols * mRows];

    int pos = 0;
    for (int c = 0; c < mCols; c++) {
        for (int r = 0; r < mRows; r++) {
            arryPieceImg[pos] = Bitmap.createBitmap(mBitmap,
            c * mPieceWidth, r * mPieceHeight,
            mPieceWidth, mPieceHeight);

            arryIsPieceLocked[pos] = false;
            arryPieceEndPos[c][r] = pos;
            pos++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我使用辅助方法将遮罩应用于每个部分

private Bitmap maskMethod(Bitmap bmpOriginal, Bitmap bmpMask) {

    // adjust mask bitmap if size …
Run Code Online (Sandbox Code Playgroud)

java android bezier opengl-es

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

使用Android OpenGL ES 2.0创建3D立方体

我想在我的场景上制作3D立方体.不幸的是,在结合来自不同网站的一些代码之后,我仍然无法制作多维数

有人可以看看我的代码,并建议我做错了什么?我的想法是让一个立方体的每个面都有不同的颜色,一切都以屏幕为中心.

import android.opengl.GLES20;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;

import javax.microedition.khronos.opengles.GL10;

public class Cube {
    private FloatBuffer vertexBuffer;  // Buffer for vertex-array
    private ShortBuffer indexBuffer;
    private int numFaces = 6;
    private int colorHandle;
    private final String vertexShaderCode =
            "uniform mat4 uMVPMatrix;" +
                    "attribute vec4 vPosition;" +
                    "void main() {" +
                    "  gl_Position = uMVPMatrix * vPosition;" +
                    "}";

    private final String fragmentShaderCode =
            "precision mediump float;" +
                    "uniform vec4 vColor;" +
                    "void main() {" +
                    "  gl_FragColor …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es

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

Vulkan与EGL配合

Vulkan似乎有很多关于新图形API的嗡嗡声 - https://www.khronos.org/vulkan

我的问题与现有的EGL界面如何适应Vulkan API有关?使用Vulkan新的无状态方法,EGL必须替换为基于Vulkan的替代方案吗?

到目前为止,可以从EGL(OpenGL,Op​​enGL ES和OpenVG)访问的三个API使用每个线程的上下文,Vulkan怎么样?

opengl graphics opengl-es egl vulkan

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

如何在不显示OpenGL的情况下使用它?

对于应用程序,即使当前未显示该应用程序,我也希望在后台渲染事物。官方文档写过通过GLSurfaceView打开GLcontext。对于不显示图形并渲染到另一个目标中,似乎不是一个真正的解决方案。

那么问题是如何在Android中创建没有GLSurfaceView的GL上下文?

用例:录制视频并将当前时间作为文本直接添加到视频中。为此,基于CPU的图像处理只会减慢实时执行的速度。至少在录制时还应该显示视频。OpenGL可以将所有内容简单地渲染到Framebuffer / Renderbuffer中。

android opengl-es background-process

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

three.js中带有顶点着色器的属性产生超出范围的顶点错误

我一直在尝试使用此链接来学习在Three.js中使用着色器,但不幸的是,这已经有些过时了,在尝试更新代码时,我到目前为止:

<script id="vshader" type="x-shader/x-vertex">
    attribute float displacement;

    varying vec3 vNormal;

    void main() {
        vNormal = normal;

        vec3 newPosition = position + normal * vec3(displacement);

        gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);
    }
</script>
<script id="fshader" type="x-shader/x-fragment">
    varying vec3 vNormal;

    void main() {
        vec3 light = vec3(0.5, 0.2, 1.0);

        light = normalize(light);

        float dprod = max(0.0, dot(vNormal, light));
        gl_FragColor = vec4(dprod, dprod, dprod, 1.0);
    }
</script>

var shaderProperties = {
    vertexShader: document.getElementById("vshader").textContent,
    fragmentShader: document.getElementById("fshader").textContent
};

var shaderMaterial = …
Run Code Online (Sandbox Code Playgroud)

javascript opengl-es webgl three.js

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

如何在ios中进行Chroma Keying以使用Swift处理视频文件

我正在制作视频编辑应用程序.

我需要一个功能来进行色度键控,并用图像或其他视频替换视频文件(非实时馈送)中的绿色背景.

我查看了GPUImage框架,但它不适合我的项目,因为我不能使用第三方框架进行此项目,所以我想知道是否有另一种方法来实现这一点.

这是我的问题:

  • 是否需要通过Opengl中的Shaders完成?
  • 是否有另一种方法来访问帧并使用AV Foundation框架替换使用色度键控的背景?

我不太熟悉图形处理,所以我真的很感激任何帮助.

opengl-es chromakey ios swift

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