久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用片段著色器和 GL_LINE_STRIP 在 OpenGL GLES20 andr

Draw a simple dotted line or dashed line in OpenGL GLES20 android using fragment shader and GL_LINE_STRIP(使用片段著色器和 GL_LINE_STRIP 在 OpenGL GLES20 android 中繪制簡單的虛線或虛線) - IT屋-程序員軟件開發技術分
本文介紹了使用片段著色器和 GL_LINE_STRIP 在 OpenGL GLES20 android 中繪制簡單的虛線或虛線的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我查看了不同的來源,發現我們可以使用片段著色器繪制虛線.因為我是 OpenGL 新手,所以我無法理解.

誰能分享一些在Android中使用片段著色器和GL_LINE_STRIP繪制虛線或虛線的代碼示例.

參考資料:

  • <小時>

    <子>除了使用紋理,您還可以在片段著色器中生成點畫.查看桌面 OpenGL cor 配置文件的解決方案:
    glLineStipple 在 OpenGL 3.1 中已棄用
    OpenGL3 中的虛線?

    I went through different sources and seen that we could draw a dotted line using a fragment shader. Because I am new to OpenGL I couldn't able to understand.

    Can anyone share some code sample that plot dotted or dashed line using fragment shader and GL_LINE_STRIP in Android.

    References:

    • Dashed line in OpenGL3?
    • Dotted back edges of object

    解決方案

    Line stipple is not supported in OpenGL ES.

    If you use OpenGL ES 1.00, then you can use the approach which is presented in the answers to OpenGL ES - Dashed Lines.
    You have to create a 1 dimensional texture (2 dimensional Nx1 texture), and wrap the texture on the lines. The texture has a stipple pattern encoded in its alpha channel. The space between the dashes is discarded by the Alpha test.

    If you use OpenGL ES 2.00 or higher (OpenGL ES 3.x), then you can't use the alpha test, because it is deprecated. You have to use a fragment shader and to skip fragments by the discard keyword.

    Create a texture with a red color channel only. The stipple pattern is encoded in the red color channel, but the code is very similar to that one from OpenGL ES - Dashed Lines, beside the fact that you have to use GL10.GL_RED for the internal texture format (instead of GL10.GL_ALPHA):

    byte arr[] = new byte[] { 255, 0, 0, 255 };
    ByteBuffer textureBuffer = ByteBuffer.wrap(arr);
    
    gl.glGenTextures(1, texture_id_, stippleTexObj);
    gl.glBindTexture(GLES20.GL_TEXTURE_2D, stippleTexObj);
    gl.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
    gl.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
    gl.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
    gl.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
    gl.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RED, 4, 1, 0,
                    GLES20.GL_RED, GLES20.GL_UNSIGNED_BYTE, textureBuffer);
    

    When you draw the lines, the you have to use a shader program, that discard the fragments dependent on the red color channel of the texture. A very simple GLSL ES 1.00 shader (for OpenGL ES 3.00) may look as follows:

    Vertex shader:

    attribute vec2  inPos;
    attribute float inU;
    varying   float vU;
    
    void main()
    {
        outU        = inU;
        gl_Position = vec4( inPos.xy, 0.0, 1.0 );
    }
    

    Fragment shader:

    precision mediump float;
    
    varying float     vU;
    uniform sampler2D u_stippleTexture;
    
    void main()
    {
        float stipple = texture2D(u_stippleTexture, vec2(vU, 0.0)).r;
        if (stipple < 0.5)
            discard;
        gl_FragColor = vec4(1.0);
    }
    

    Ensure that the texture coordinates which are associated to the vertices are aligned to integral values when you draw the line, that causes the the lines start and end with a dash:

    e.g. a quad with bottom left of (-0.5 -0.5) and to right of (0.5, 0.5) and the texture coordinates in range [0, 5]:

     x     y       u   
    -0.5f -0.5f    0.0f
     0.5f -0.5f    5.0f
     0.5f  0.5f    0.0f
    -0.5f  0.5f    5.0f
    

    Since the wrap function is GL_REPEAT and the texture coordinates are in range [0, 5], 5 repetitions of the stipple pattern are wrapped to each edge of the quad.


    Instead of using a texture, you can also generate the stippling in the fragment shader. See the solutions for desktop OpenGL cor profile:
    glLineStipple deprecated in OpenGL 3.1
    Dashed line in OpenGL3?

    這篇關于使用片段著色器和 GL_LINE_STRIP 在 OpenGL GLES20 android 中繪制簡單的虛線或虛線的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

    【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How to wrap text around components in a JTextPane?(如何在 JTextPane 中的組件周圍環繞文本?)
MyBatis, how to get the auto generated key of an insert? [MySql](MyBatis,如何獲取插入的自動生成密鑰?[MySql])
Inserting to Oracle Nested Table in Java(在 Java 中插入 Oracle 嵌套表)
Java: How to insert CLOB into oracle database(Java:如何將 CLOB 插入 oracle 數據庫)
Why does Spring-data-jdbc not save my Car object?(為什么 Spring-data-jdbc 不保存我的 Car 對象?)
Use threading to process file chunk by chunk(使用線程逐塊處理文件)
主站蜘蛛池模板: 久草福利在线观看 | 91精品视频在线 | 亚洲一区二区av | 欧美人xxxx | 高清一区二区 | www.操| 久久综合久色欧美综合狠狠 | 日本免费视频 | 欧美一区三区 | 日本视频www | 成人精品三级av在线看 | 成人免费看片39 | 色噜噜狠狠一区二区三区果冻 | 在线免费国产 | 中国a一片一级一片 | 欧美成人精品一区 | av在线播放不卡 | 精品日韩一区二区三区 | 国产成人综合视频 | 99精品成人 | 中文字幕日韩欧美 | 日韩综合久久 | 黄色国产精品 | 欧美日韩大片 | 五月天激情视频 | 一区二区三区免费在线观看 | 最新国产在线 | 91麻豆精品一区二区三区 | 国产成人精品视频 | 久久久www成人免费精品 | 视频爱爱免费视频爱爱太爽 | 久操av在线 | 黄色在线播放 | 国产精品一区二区三区免费 | 欧美综合久久 | 蜜桃精品一区二区 | 黄色在线免费网站 | 精品国产99| 国产女人18毛片水18精品 | 国产理论在线观看 | 最新日韩在线 |