OpenGL學習筆記(八)底紋疊加

2021-08-21 04:12:20 字數 3489 閱讀 1826

測試效果如下:

原始碼:

main.cpp

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

void processinput(glfwwindow *window)

void framebuffer_size_callback(glfwwindow *window, int width, int height)

int main() ;

unsigned

int indices = ;

uint vao, vbo, ebo;

glgenvertexarrays(1, &vao);

glgenbuffers(1, &vbo);

glgenbuffers(1, &ebo);

glbindvertexarray(vao);

glbindbuffer(gl_array_buffer, vbo);

glbufferdata(gl_array_buffer, sizeof(vertices), vertices, gl_static_draw);

glbindbuffer(gl_element_array_buffer, ebo);

glbufferdata(gl_element_array_buffer, sizeof(indices), indices, gl_static_draw);

glvertexattribpointer(0, 3, gl_float, gl_false, 8 * sizeof(float), (void *) (0 * sizeof(float)));

glenablevertexattribarray(0);

glvertexattribpointer(1, 3, gl_float, gl_false, 8 * sizeof(float), (void *) (3 * sizeof(float)));

glenablevertexattribarray(1);

glvertexattribpointer(2, 2, gl_float, gl_false, 8 * sizeof(float), (void *) (6 * sizeof(float)));

glenablevertexattribarray(2);

uint texture;

glgentextures(1, &texture);

glbindtexture(gl_texture_2d, texture);

gltexparameteri(gl_texture_2d, gl_texture_wrap_s, gl_repeat);//s軸

gltexparameteri(gl_texture_2d, gl_texture_wrap_t, gl_repeat);//t軸

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);//s軸

gltexparameteri(gl_texture_2d, gl_texture_wrap_t, gl_repeat);//t軸

gltexparameteri(gl_texture_2d, gl_texture_min_filter, gl_linear);//紋理過濾方式

gltexparameteri(gl_texture_2d, gl_texture_mag_filter, gl_linear);//紋理過濾方式

data = stbi_load("../resources/textures/ebichu2.jpeg", &width, &height, &nrchannels, 0);

if (data) else

stbi_image_free(data);

gluseprogram(id);

gluniform1i(glgetuniformlocation(id, "texture1"), 0);

gluniform1i(glgetuniformlocation(id, "texture2"), 1);

glbindvertexarray(vao);

while (!glfwwindowshouldclose(window))

gldeletevertexarrays(1, &vao);

gldeletebuffers(1, &vbo);

gldeletebuffers(1, &ebo);

glfwterminate();

return

0;}

頂點著色器**:glsl.vs

#version 330 core

layout (location = 0) in

vec3 apos;

layout (location = 1) in

vec3 acolor;

layout (location = 2) in

vec2 atexcoord;

outvec3 ourcolor;

outvec2 texcoord;

void main()

片段著色器**:glsl.fs

#version 330 core

outvec4 fragcolor;

invec3 ourcolor;

invec2 texcoord;

uniform

sampler2d texture1;

uniform

sampler2d texture2;

void main()

OpenGL學習筆記(八)

在opengl中繪製乙個物體,會像是這樣 0.複製頂點陣列到緩衝中供opengl使用 glbindbuffer gl array buffer,vbo glbufferdata gl array buffer,sizeof vertices vertices,gl static draw 1.設定頂...

OPENGL學習筆記之八

2017 11 15 閱讀材料來自learnopengl.com以及learnopengl cn.github.io 我們通常會自己設定乙個座標的範圍,之後再在頂點著色器中將這些座標變換為標準化裝置座標 normalized device coordinate,ndc 然後將這些標準化裝置座標傳入光...

OpenGL學習筆記《八》光照

在理解opengl中的光照之前,先理解一下顏色。在我們現實生活中,我們看到的物體顏色,是物體反射的顏色,即沒有被物體吸收掉的部分。opengl利用這個,在系統中模擬的顏色,就是定義乙個表示物件的顏色向量a,再頂乙個乙個表示光源的顏色向量b,然後在片段著色器中將兩個向量相乘得到表示物體的顏色。因此大致...