//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個維度就要...