GLSL學習 波浪立方體

2021-06-07 10:02:37 字數 3127 閱讀 6692

//cpp file

#include

#include

#include

#include

#include

float vertexarray[50][50*4*3];

float texturearray[50][50*4*2];

float normalarray[50][50*4*3];

#define bmp_header_length 54

gluint loadtexture(char *file)

//讀取檔案中圖象的寬度和高度

fseek(pfile, 0x0012, seek_set);

fread(&width, 4, 1, pfile);

fread(&height, 4, 1, pfile);

fseek(pfile, bmp_header_length, seek_set);

//計算每行畫素所佔位元組數,並根據此資料計算總畫素位元組數

total_bytes = line_bytes * height;

}//根據總畫素位元組數分配記憶體

pixels = (glubyte*)malloc(total_bytes);

if(pixels == 0)

//讀取畫素資料

if(fread(pixels, total_bytes, 1, pfile) <= 0)

// 分配乙個新的紋理編號

glgentextures(1, &texture_id);

if( texture_id == 0 )

//繫結新的紋理,載入紋理並設定紋理引數

//在繫結前,先獲得原來繫結的紋理編號,以便在最後進行恢復

glgetintegerv(gl_texture_binding_2d,(glint*)&last_texture_id);

glbindtexture(gl_texture_2d, texture_id);

//紋理過濾設定

gltexparameteri(gl_texture_2d, gl_texture_min_filter, gl_linear);

gltexparameteri(gl_texture_2d, gl_texture_mag_filter, gl_linear);

gltexparameteri(gl_texture_2d, gl_texture_wrap_s, gl_repeat);

gltexparameteri(gl_texture_2d, gl_texture_wrap_t, gl_repeat);

//顏色混合模式

gltexenvf(gl_texture_env, gl_texture_env_mode, gl_replace);

glteximage2d(gl_texture_2d, 0, gl_rgb, width, height, 0, gl_bgr_ext, gl_unsigned_byte, pixels);

glbindtexture(gl_texture_2d, last_texture_id);

//之前為pixels分配的記憶體可在使用glteximage2d以後釋放

//因為此時畫素資料已經被opengl另行儲存了乙份(可能被儲存到專門的圖形硬體中)

free(pixels);

return texture_id;

}int texture01 = 0;

int texture02 = 0;

void setuprs()

#define printopenglerror() printoglerror(__file__, __line__)

int printoglerror(char *file, int line)

return retcode;

}void printinfolog(glhandlearb obj)

}char *textfileread(char *fn)

fclose(fp);                            }}

return content;

}glhandlearb v,f,p;    //handlers for our vertex, geometry, and fragment shaders

int gw,gh;        //keep track of window width and height

glint loc;

void setshaders()

void reshape(int w, int h)

void setxyz(float *vector, int offset, float x, float y, float z)

void setxy(float *vector, int offset, float x, float y)

void initquad(float width, float height)}}

void draw()

glenableclientstate(gl_vertex_array);

glenableclientstate(gl_texture_coord_array);

glenableclientstate(gl_normal_array);

}float angle = 0.0f;

float t = 0.0f;

void display()

gluniform1f(loc, t);

t += 0.1f;

}int main(int argc, char *argv)

else

if (glew_arb_vertex_shader && glew_arb_fragment_shader && gl_ext_geometry_shader4)

else

setshaders();

glutmainloop();

return 0;

}varying vec3 lightdir,normal;

uniform float time;

void main()  

varying vec3 lightdir,normal;

uniform sampler2d tex01, tex02;

void main()

資料立方體

總體介紹 首先模擬乙個資料分析場景,某企業積累了如下 所示的銷售資料 中每一行表示某個時間段內某種商品在某個地區的銷售情況。很明顯,這些資料涉及到了時間 地區 產品三個業務角度。在對這樣的資料進行分析時,不同的角色都會基於自己所感興趣的業務角度提出問題 銷售經理關心各個地區的銷售情況,希望找出銷售增...

建立立方體

imanualobject cube cube scenemgr.createmanualobject cube cube.begin examples anchor operationtype.ot list 頂點 cube.position 100,100,100 0 cube.position...

資料立方體 解密

資料立方體和傳統資料庫的差別在於資料立方體即cube把很多原來要用資料庫的group by操作來達到的效果通過其獨有的儲存形式予以加速,使用者可以方便地下鑽,切面 看到各種聚合的資料的結果。試想一下,如果乙個cube擁有3個維度,為了計算在各個維度上的聚合,就要進行2 3次計算,如果有10個維度就要...