博客
关于我
OpenGL着色器、纹理开发案例
阅读量:791 次
发布时间:2023-02-23

本文共 2244 字,大约阅读时间需要 7 分钟。

OpenGL

(vertex_shader.glsl)

glsl

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;
out vec2 TexCoord;
void main(){
gl_Position = vec4(aPos, 1.0);
TexCoord = aTexCoord;

(fragment_shader.glsl)

glsl

#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D texture1;
void main(){
FragColor = texture(texture1, TexCoord);

SOIL

cpp

#include
GLuint loadTexture(const char *path){
GLuint textureID;
glGenTextures(1, &textureID);
int width, height;unsigned char* image = SOIL_load_image(path, &width, &height, 0, SOIL_LOAD_RGB);if (image == nullptr){std::cout << "Texture failed to load at path: " << path << std::endl; return 0;}glBindTexture(GL_TEXTURE_2D, textureID);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);glGenerateMipmap(GL_TEXTURE_2D);SOIL_free_image_data(image);glBindTexture(GL_TEXTURE_2D, 0);return textureID;

cpp

#include
#include
#include
#include

//

GLfloat vertices[] = {

-0.5f, -0.5f, 0.0f, 0.0f, 0.0f,
0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
0.5f, 0.5f, 0.0f, 1.0f, 1.0f,
-0.5f, 0.5f, 0.0f, 0.0f, 1.0f

GLuint indices[] = {

0, 1, 2,
2, 3, 0

GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);glCompileShader(vertexShader);

GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);glCompileShader(fragmentShader);

GLuint shaderProgram = glCreateProgram();glAttachShader(shaderProgram, vertexShader);glAttachShader(shaderProgram, fragmentShader);glLinkProgram(shaderProgram);

glDeleteShader(vertexShader);glDeleteShader(fragmentShader);

GLuint texture1 = loadTexture("path_to_texture.jpg");

while (!glfwWindowShouldClose(window)){

glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);glBindTexture(GL_TEXTURE_2D, texture1);glUseProgram(shaderProgram);glBindVertexArray(VAO);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);glBindVertexArray(0);glfwSwapBuffers(window);glfwPollEvents();

转载地址:http://qzpfk.baihongyu.com/

你可能感兴趣的文章
OpenGL的基本概念介绍
查看>>
OpenGL着色器、纹理开发案例
查看>>
OpenGL程序无法启动此应用程序,因为计算机中丢失glut32.dll(转))
查看>>
opengl绘制几何体的函数
查看>>
openGL缓存概念和缓存清除(01)
查看>>
OpenJDK11 下的HSDB工具使用入门
查看>>