当前位置: 首页 > news >正文

做博客网站需要工具吗国际时事新闻

做博客网站需要工具吗,国际时事新闻,wordpress mo文件不起作用,lua做网站目录 13.1 项目规划和设计 13.1.1 项目目标 13.1.2 设计要求 13.2 实现场景中的光照、材质和纹理 13.2.1 创建基础场景 13.2.2 应用材质和纹理 13.3 集成高级渲染效果和后期处理 13.3.1 阴影映射(Shadow Mapping) 13.3.2 环境光遮蔽(AO) 13.3.3 简单的景深效果(…

 

目录

13.1 项目规划和设计

13.1.1 项目目标

13.1.2 设计要求

13.2 实现场景中的光照、材质和纹理

13.2.1 创建基础场景

13.2.2 应用材质和纹理

13.3 集成高级渲染效果和后期处理

13.3.1 阴影映射(Shadow Mapping)

13.3.2 环境光遮蔽(AO)

13.3.3 简单的景深效果(Depth of Field)

13.3.4 阴影技术

13.4 性能优化

13.4.1 批处理渲染

13.4.2 LOD(细节层次)

13.4.3 减少状态切换

13.4.4 延迟渲染


     在本章中,我们将创建一个完整的渲染场景,涵盖从基础的场景设置到高级的渲染效果和后期处理。我们将使用OpenGL和GLSL来实现场景的渲染,并逐步引入光照、材质、纹理、阴影映射、环境光遮蔽(AO)以及景深效果等技术。

13.1 项目规划和设计

13.1.1 项目目标

       本项目的目标是创建一个包含地面、墙壁和一个简单3D模型(如立方体)的基本渲染场景。除此之外,我们还将实现以下高级渲染效果:

  • 阴影映射(Shadow Mapping)
  • 环境光遮蔽(Ambient Occlusion,AO)
  • 简单的景深效果(Depth of Field)
13.1.2 设计要求
  1. 场景内容:
    • 地面
    • 墙壁
    • 3D模型(立方体)
  2. 光照效果:
    • 点光源
    • 环境光
  3. 材质效果:
    • 漫反射和高光
  4. 高级渲染效果:
    • 阴影映射
    • 环境光遮蔽(AO)
    • 简单的景深效果

13.2 实现场景中的光照、材质和纹理

13.2.1 创建基础场景

       首先,我们将设置基础场景,包括地面、墙壁和一个简单的3D模型(立方体)。我们使用OpenGL创建这些基本几何体,并为每个对象定义适当的顶点和片段着色器。

顶点着色器 (shader.vert):

#version 330 corelayout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aNormal;
layout(location = 2) in vec2 aTexCoord;out vec3 FragPos;
out vec3 Normal;
out vec2 TexCoord;uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;void main() {vec4 worldPosition = model * vec4(aPos, 1.0);FragPos = worldPosition.xyz;Normal = mat3(transpose(inverse(model))) * aNormal;TexCoord = aTexCoord;gl_Position = projection * view * worldPosition;
}

片段着色器 (shader.frag):

#version 330 corein vec3 FragPos;
in vec3 Normal;
in vec2 TexCoord;out vec4 FragColor;struct Material {vec3 ambient;vec3 diffuse;vec3 specular;float shininess;
};struct Light {vec3 position;vec3 ambient;vec3 diffuse;vec3 specular;
};uniform Material material;
uniform Light light;
uniform vec3 viewPos;
uniform sampler2D diffuseTexture;void main() {// Ambientvec3 ambient = material.ambient * light.ambient;// Diffusevec3 norm = normalize(Normal);vec3 lightDir = normalize(light.position - FragPos);float diff = max(dot(norm, lightDir), 0.0);vec3 diffuse = material.diffuse * diff * light.diffuse;// Specularvec3 viewDir = normalize(viewPos - FragPos);vec3 reflectDir = reflect(-lightDir, norm);float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);vec3 specular = material.specular * spec * light.specular;vec3 result = ambient + diffuse + specular;FragColor = vec4(result, 1.0) * texture(diffuseTexture, TexCoord);
}
13.2.2 应用材质和纹理

       接下来,我们为场景中的物体应用基础的材质和纹理。材质的主要属性包括漫反射、镜面反射和环境光成分。纹理则用于为物体添加更多的细节和颜色。

纹理加载和绑定 (texture.cpp):

#include "texture.hpp"
#include <iostream>Texture::Texture(const char* imagePath) {glGenTextures(1, &ID);glBindTexture(GL_TEXTURE_2D, ID);// 设置纹理参数glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// 加载并生成纹理int width, height, nrChannels;unsigned char* data = stbi_load(imagePath, &width, &height, &nrChannels, 0);if (data) {GLenum format;if (nrChannels == 1)format = GL_RED;else if (nrChannels == 3)format = GL_RGB;else if (nrChannels == 4)format = GL_RGBA;glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);glGenerateMipmap(GL_TEXTURE_2D);} else {std::cerr << "Failed to load texture: " << imagePath << std::endl;}stbi_image_free(data);
}void Texture::bind() const {glBindTexture(GL_TEXTURE_2D, ID);
}

场景对象加载 (scene_object.cpp):

#include "scene_object.hpp"
#include <glm/gtc/matrix_transform.hpp>SceneObject::SceneObject(const std::vector<Vertex>& vertices, const std::vector<unsigned int>& indices, const char* texturePath): vertices(vertices), indices(indices), texture(texturePath) {setupMesh();
}void SceneObject::setupMesh() {glGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO);glGenBuffers(1, &EBO);glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vertex), &vertices[0], GL_STATIC_DRAW);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), &indices[0], GL_STATIC_DRAW);// 顶点位置glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0);// 法线glEnableVertexAttribArray(1);glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, Normal));// 纹理坐标glEnableVertexAttribArray(2);glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, TexCoords));glBindVertexArray(0);
}void SceneObject::draw(const Shader& shader) {shader.use();glBindVertexArray(VAO);glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0);glBindVertexArray(0);
}

13.3 集成高级渲染效果和后期处理

13.3.1 阴影映射(Shadow Mapping)

       阴影映射用于在场景中生成逼真的阴影效果。我们将使用深度贴图来计算阴影,并在片段着色器中进行深度比较。

阴影映射Shader (shadow_mapping_shader.vert and shadow_mapping_shader.frag):

顶点着色器 (shadow_mapping_shader.vert):

#version 330 corelayout(location = 0) in vec3 aPos;uniform mat4 lightSpaceMatrix;
uniform mat4 model;void main() {gl_Position = lightSpaceMatrix * model * vec4(aPos, 1.0);
}

片段着色器 (shadow_mapping_shader.frag):

#version 330 corevoid main() {// 这里不需要输出颜色,深度缓冲会自动存储深度值
}
<
http://www.ds6.com.cn/news/40099.html

相关文章:

  • 天津百度建网站bt磁力猪
  • 贸易公司网站建哪家网络公司比较好
  • 文化建设基金管理有限公司网站媒体营销
  • 成都金牛网站建设公司aso网站
  • 用代码做一号店网站怎么做如何做推广和引流
  • 做任务赚q红包的网站2024百度下载
  • 网站建设公司用5g衡阳网站优化公司
  • 我的世界充值网站怎么做app001推广平台官网
  • 域名解析到别人网站怎么建造自己的网站
  • 难道做网站的工资都不高吗品牌策划的五个步骤
  • 网站不备案访问网络营销评价的名词解释
  • cms代码做网站百度在线提问
  • 微信怎么建小程序网站关键词在线优化
  • 个体户年报网上申报流程福州seo公司
  • 西宁个人网站建设怎样创建网站
  • 哪个网站专做童装批发网络营销软件推广
  • 网站留言系统是怎么做的推广平台有哪些?
  • 做任务赚钱网站有哪些帮收款的接单平台
  • 兰州有做百度网站的吗品牌营销策划有限公司
  • 合肥网站推广公司哪家好网页设计的流程
  • 江苏网站优化企业推广软文
  • 北辰正方建设集团有限公司官方网站google推广一年的费用
  • 深圳网站建设智能 乐云践新武汉好的seo优化网
  • 网站建设行业广告语全网营销系统是不是传销
  • 峨山网站建设seo营销专员
  • 湘西州建设银行网站南京百度推广开户
  • wordpress设置主页面武汉seo首页优化报价
  • 招聘预算网站怎么做电商培训机构需要什么资质
  • 用织梦做的网站怎样看黑帽seo什么意思
  • 最好看免费观看高清大全电影网站企业网站管理系统