<bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>

    KTL 一個支持C++14編輯公式的K線技術工具平臺 - 第六版,支持OpenGL,3D上帝視角俯視K線概貌。

    K,K線,Candle蠟燭圖。

    T,技術分析,工具平臺

    L,公式Language語言使用c++14,Lite小巧簡易。

    項目倉庫:https://github.com/bbqz007/KTL

    國內倉庫:https://gitee.com/bbqz007/KTL 

    CoreAnimation for Windows: https://github.com/bbqz007/xw

    zqt5 一個超簡單的Qt5窗口語法: https://github.com/bbqz007/zhelper-qt5Widgets

    zqlite3 一個超簡單的流式語法,整合封裝Sqlite3 capis 與 SQL 跟 c/c++程序綁定:https://github.com/bbqz007/sqlite3zz

    zgl 一個對OpenGL常規功能api重新抽象封裝。

    KTL提供一個c++14編譯平臺,用戶可以使用c++14編輯自定義技術指標等。

    用戶可以使用crt常用函數,c++標準庫容器以及算法,c++14特性編程。

     

    本期更新內容

    加入了OpenGL編程支持。

    用戶可以在自定制的QT窗口使用OpenGL繪制3D圖形。

     

     上帝說我看到的K線不是平面的。

     

     

     下圖是以一年中第幾個交易日時間坐標橫切面,由年初第1個交易日到年末最后一個交易日的,各年交易日的同比變化趨勢。

     

     

    本期繼續簡單易用,對OpenGL 2.1的基本編程相關的api進行了全新的抽象封裝。對于沒時間去把握那套不太友好api的朋友,但只需要使用最常規的功能,可以獲得更好的體驗。

     

    首先說明為什么選擇OpenGL 2.1。

    1. 因為本平臺不是面向編程精英怪,也不需要高級技術高級技巧。盡管你可以使用GL3以上的所有的api,只要你的硬件支持。

    2. 至GL 2.1,以fixed-pipeline編程為主, 也就是內置著色器,你不需要GLSL來實現所有的stages,比如矩陣,光照。GL 3.0以后,轉向programmable-pipeline編程為主,也就是為各Shader著色器編程,你必須要是只精英怪,深知各版本GLSL的差別,數學有點要求。

    3. 承接上一點,GL 2.1編程,關心的是輸入跟狀態設置。算法交給fixed-pipeline。

    4. 所以fixed-pipeline是一個黑盒,有輸入,輸出,還有控制。

    5. 多媒體編程,常用的模式是filter-pipeline,最簡單有三個組件,Source,Filter,Render。GL2.1內置fixed-pipeline就是這個Filter,Render就是窗口畫布。Source自然就是輸入數據流。

    6. 按上面的模式,三個組件從屬三個不同的設備,cpu設備(host),gpu設備,窗口顯示設備。

    7. 數據流從cpu設備,輸入到gpu設備,gpu設備處理產出結果, 輸出到窗口顯示設備。

    8. GL 2.1沒有FBO,只能輸出到窗口顯示設備。

    9. 兩種內存資源,cpu設備上的內存,gpu設備上的內存。本封裝將所有GPU設備的緩沖或紋理視作gpu設備上的內存。

     

    所以封裝抽象成

    1. GLFixedPipelineClient,設置數據輸入流,如打開或關閉Vertex,Color等,數據綁定到cpu內存還是gpu內存。這里借用directShow,IPin接口概念,輸入流各種數據通過connect或disconnect到GL內置Pipeline。還有常用的狀態控制開關,如光照開關,紋理開關,深度檢測開關。

    2. GPU內存,GpuVertexArrayGpuImage2D紋理。alloc方法分配或定義內存的大小。copyFromCpuMemory方法將cpu的內存寫到gpu的內存。copyToCpuMemory方法把數據從gpu的內存寫到cpu的內存。

    3. 光源Light0,Light1,... , Light7。簡化專業術語。backLight,背光或環境光。highLight,高光反射。sunLight,自然光。spotAt,位置。spotDirect,方向。spotAngle,散射角度。spotFocus,焦點大小。spotEnergy,光線強弱。

    4. 材質Material。簡化專業術語。backLightReflectPct,背光反射混合光。highLightReflectPct,高光反射混合光。sunLightReflectPct,自然光反射混合光。

    5. 輸入流數據內容指定使用,這里不使用綁定一詞,因為glBind*相關的函數與這個無關,太容易混亂。GLCpuClient使用cpu內存指定到輸入流數據的方法如vertexUseCpuBuffer。GpuVertexArray使用gpu內存指定到輸入流數據的方法如vertextUseThisGpuBuffer。

     

    示例1,直接使用cpu內存。

     1     float v[][3] = {...};  // Vertex
     2     float c[][3] = {...};  // Color
     3     float tc[][3] = {...}; // TexCoord
     4     float ix[][4] = {...}; // Element
     5 
     6     zhelper::GL2::GLCpuClient cpu;
     7             cpu.ensure();
     8             cpu.colorUseCpuBuffer(3, GL_FLOAT, c);
     9             cpu.vertexUseCpuBuffer(3, GL_FLOAT, v);
    10 
    11             cpu.connectColor().connectVertex();
    12             cpu.drawElements(GL_QUADS, sizeof(ix)/sizeof(GLint), ix[0]);
    13             cpu.disconnectColor().disconnectVertex();  

     

    示例2,使用Gpu內存。

     1     float v[][3] = {...};  // Vertex
     2     float c[][3] = {...};  // Color
     3     float tc[][3] = {...}; // TexCoord
     4     float ix[][4] = {...}; // Element
     5  
     6     zhelper::GL2::GpuVertexArray gpubuf;
     7             gpubuf.ensure();
     8             gpubuf.alloc(sizeof(v) + sizeof(c) + sizeof(tc), GL_STREAM_DRAW);
     9             gpubuf.copy(0, sizeof(v), v);
    10             gpubuf.copy(sizeof(v), sizeof(c), c);
    11             gpubuf.copy(sizeof(v) + sizeof(c), sizeof(tc), tc);
    12             gpubuf.vertex3fUseThisGpuBuffer(0, (GLvoid*)0);
    13             gpubuf.color3fUseThisGpuBuffer(0, (GLvoid*)sizeof(v));
    14             gpubuf.texCoordUseThisGpuBuffer(0, 2, GL_FLOAT, (GLvoid*)(sizeof(v) + sizeof(c)));
    15 
    16     zhelper::GL2::GLFixedPipelineClient cpu;
    17        cpu.ensure();
    18 cpu.connectColor().connectVertex().connectTexCoord(); 19 cpu.drawElements(GL_QUADS, sizeof(ix)/sizeof(GLint), ix[begin]); 20 cpu.disconnectColor().disconnectVertex().disconnectTexCoord();

     

    示例3,光源詞匯通俗化

     1 // 專業詞匯
     2     glLightfv(GL_LIGHT0, GL_AMBIENT, lc[0]);           // Back Light
     3     glLightfv(GL_LIGHT0, GL_SPECULAR, lc[0]);          // High Light
     4     glLightfv(GL_LIGHT0, GL_DIFFUSE, lc[0]);        // Sun  Light; w: 0, from far away; 1, at a position
     5     glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, lc[0]);
     6     glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, lc[0]);
     7     glLightfv(GL_LIGHT0, GL_POSITION, lc[1]);
     8     glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 32.0);
     9     glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.5);
    10     glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 1.5);
    11 
    12 // 通俗詞匯
    13     zhelper::GL2::Light0 light0;
    14     light0.backLightColor(lc[0]);
    15     light0.highLightColor(lc[0]);
    16     light0.sunLightColor(lc[0]);
    17     light0.spotAt(lc[1]);
    18     light0.spotDirect(dir[0]);
    19     light0.spotEnergy(32., 1.5, .15);
    20 
    21     zhelper::GL2::Material material;
    22     material.both.backLightReflectPct(lc[0]);
    23     material.both.sunLightReflectPct(lc[0]);

     

    <<第二版 多編譯器支持,OpenMP,SIMD支持>>

    <<第三版 Qt支持>>

    <<第四版 zqt5語法升級,SIMD重寫公式函數,性能提升>>

    <<第五版 sqlite3編程支持,sqlite3zz流式語法>>

    <<第六版 OpenGL編程支持,3D上帝視角>>

    <<第七版 體驗GPGPU>>

    <<第八版 數據解析>>

    <<第九版 數據分析工具,增強編程體驗>>

    posted on 2022-04-28 15:50  bbqz007  閱讀(573)  評論(0編輯  收藏  舉報

    免费视频精品一区二区_日韩一区二区三区精品_aaa在线观看免费完整版_世界一级真人片
    <bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>