qt opengl 2d紋理陣列

2021-08-29 14:14:03 字數 2365 閱讀 1804

2d紋理陣列就是用乙個紋理陣列型別的變數儲存數個紋理,這樣就避免了使用多個單個的紋理物件。這再批處理一系列相同大小的紋理時,非常有用,我這裡用到的場景是在點精靈中使用紋理陣列使得每個精靈紋理上不同的圖案。

我用的有16張,當頂點為16個時,效果如下

可以看到剛好乙個圖案乙個頂點,當頂點大於16個時如下

可以看到,當大於紋理陣列個數的頂點時,超出的部分會重重其中乙個紋理,至於重得的這個紋理未做研究

其渲染器實現如下

#ifndef texture2darrayrender_h

#define texture2darrayrender_h

#include #include #include #include class texture2darrayrender

; qopenglbuffer vbo_;

};#endif // texture2darrayrender_h

#include #include "texture2darrayrender.h"

void texture2darrayrender::initsize(int pointcount, qvector&imgs, int width, int height)

texture_->setminmagfilters(qopengltexture::nearest,qopengltexture::nearest);

texture_->setwrapmode(qopengltexture::clamptoedge);

//生成頂點

std::random_device rd;

std::mt19937 gen(rd());

std::uniform_real_distributiondis(-1.0,1.0);

qvectorpointvec;

for(int i = 0; i < pointcount * 3; i++)

vbo_.create();

vbo_.bind();

vbo_.allocate(pointvec.data(),pointvec.count() * sizeof glfloat);

}void texture2darrayrender::render(qopenglextrafunctions *f, qmatrix4x4 &pmatrix, qmatrix4x4 &vmatrix, qmatrix4x4 &mmatrix)

基shader實現如下

#version 330

uniform mat4 pmatrix,vmatrix,mmatrix;

layout (location = 0) in vec3 aposition;

out float vid;

void main(void)

#version 330

uniform sampler2darray stexture;

in float vid;

out vec4 fragcolor;

void main(void)

使用方法和前面一樣,根據引數傳入資料就可以了

#ifndef widget_h

#define widget_h

#include #include "texture2darrayrender.h"

class widget : public qopenglwidget

;#endif // widget_h

#include #include #include "widget.h"

widget::widget(qwidget *parent)

: qopenglwidget(parent)

widget::~widget()

void widget::resizegl(int w, int h)

void widget::paintgl()

void widget::initializegl()

render_.initsize(20,imgs,128,128);

camera_.setx(0);

camera_.sety(0);

camera_.setz(3);

}

至此結束

cocos2d 紋理載入機制

cocos2d 紋理載入機制 cocos2d主要的渲染目標是vao vbo 屬性 紋理 主要看看紋理載入的相關 texture2d texturecache addimage const std string path 注意 image new image bool bret image initw...

Unity 二維紋理 Texture 2D 1

二維紋理 texture 2d 紋理使你的網格 粒子 和介面更生動!它們是你覆蓋或環繞著物件的或影片檔案。由於它們是如此的重要,它們有很多的屬性。如果你是第一次閱讀這一點,跳到細節,當你需要乙個參考時返回到實際設定。用於物件的著色器可以指定所需要的紋理,但基本原則是可以放置專案中任何影象檔案。如果它...

Unity 二維紋理 Texture 2D 4

supported formats 支援的格式 unity支援下面的檔案格式 psd,tiff,jpg,tga,png,gif,bmp,iff,pict。應注意,unity可以匯入多層psd和tiff檔案,在匯入時,層將自動被塌陷,因此你不必浪費時間,直接使用原始檔型別。這點很重要,允許只有乙個紋理...