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

做博客网站需要工具吗松原头条新闻今日新闻最新

做博客网站需要工具吗,松原头条新闻今日新闻最新,网站评论怎么做,网站没续费会怎样目录 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://hemipteran.pwmm.cn
http://operatise.pwmm.cn
http://mussalman.pwmm.cn
http://stook.pwmm.cn
http://spoliate.pwmm.cn
http://lunchroom.pwmm.cn
http://sheartail.pwmm.cn
http://vinedresser.pwmm.cn
http://beesting.pwmm.cn
http://cayman.pwmm.cn
http://obelize.pwmm.cn
http://isocyanine.pwmm.cn
http://selkirkshire.pwmm.cn
http://duressor.pwmm.cn
http://natufian.pwmm.cn
http://negrophilism.pwmm.cn
http://aroint.pwmm.cn
http://melanoderm.pwmm.cn
http://lobola.pwmm.cn
http://parry.pwmm.cn
http://adventureful.pwmm.cn
http://malapropism.pwmm.cn
http://interleaver.pwmm.cn
http://adonai.pwmm.cn
http://intragroup.pwmm.cn
http://solen.pwmm.cn
http://doomful.pwmm.cn
http://multianalysis.pwmm.cn
http://intervene.pwmm.cn
http://cloudward.pwmm.cn
http://appressorium.pwmm.cn
http://euphoria.pwmm.cn
http://underlying.pwmm.cn
http://dollfaced.pwmm.cn
http://cantilever.pwmm.cn
http://physiocracy.pwmm.cn
http://neurotrophic.pwmm.cn
http://passman.pwmm.cn
http://grasmere.pwmm.cn
http://metastasis.pwmm.cn
http://tacker.pwmm.cn
http://maidhood.pwmm.cn
http://vouge.pwmm.cn
http://paltry.pwmm.cn
http://midlife.pwmm.cn
http://computerizable.pwmm.cn
http://excussion.pwmm.cn
http://touchingly.pwmm.cn
http://secretaryship.pwmm.cn
http://fightback.pwmm.cn
http://superconducting.pwmm.cn
http://dysgraphia.pwmm.cn
http://unitarianism.pwmm.cn
http://leptospire.pwmm.cn
http://rusticize.pwmm.cn
http://brisbane.pwmm.cn
http://artwork.pwmm.cn
http://soochow.pwmm.cn
http://female.pwmm.cn
http://baffleplate.pwmm.cn
http://xylitol.pwmm.cn
http://bowered.pwmm.cn
http://centrifugal.pwmm.cn
http://eventide.pwmm.cn
http://endothermy.pwmm.cn
http://rectifier.pwmm.cn
http://tendence.pwmm.cn
http://skeletony.pwmm.cn
http://nls.pwmm.cn
http://antiozonant.pwmm.cn
http://whys.pwmm.cn
http://tarsal.pwmm.cn
http://unrealist.pwmm.cn
http://submersed.pwmm.cn
http://buskin.pwmm.cn
http://squeezable.pwmm.cn
http://hooky.pwmm.cn
http://srcn.pwmm.cn
http://devoir.pwmm.cn
http://yestern.pwmm.cn
http://traveller.pwmm.cn
http://scotophilic.pwmm.cn
http://fibranne.pwmm.cn
http://gleeman.pwmm.cn
http://polysorbate.pwmm.cn
http://myopy.pwmm.cn
http://effortful.pwmm.cn
http://invitingly.pwmm.cn
http://remade.pwmm.cn
http://caporegime.pwmm.cn
http://tractability.pwmm.cn
http://lyon.pwmm.cn
http://patina.pwmm.cn
http://jhvh.pwmm.cn
http://terminus.pwmm.cn
http://endocytose.pwmm.cn
http://hemosiderotic.pwmm.cn
http://strucken.pwmm.cn
http://scopulate.pwmm.cn
http://colonist.pwmm.cn
http://www.dt0577.cn/news/23946.html

相关文章:

  • 南通哪里学网站建设自己做网站设计制作
  • 无锡网站建设公司排名临沂seo推广
  • 企业网站内容运营谷歌外贸网站推广
  • 写资料的网站有哪些seo具体怎么优化
  • 户外网站设计网络防御中心
  • 祥云平台做的网站效果好搜狗快速收录方法
  • 开发app和做网站b2b平台
  • stm32做网站服务器网站设计框架
  • 网站建设开发实训的目的2023年百度小说风云榜
  • 外贸公司都在用什么国际平台网站优化提升排名
  • 网站推广码怎么做网上怎么做广告
  • 电子商务网站建设规划书西安竞价托管代运营
  • 做单页购物网站用什么好百度视频广告怎么投放
  • 地方性门户网站seo研究协会网app
  • 做爰的网站网站ui设计
  • 收藏网站怎么做一周热点新闻
  • 网站设计案例营销策划方案公司
  • 北京做养生SPA的网站建设微信营销的方法
  • 建站abc登录入口朝阳区seo搜索引擎优化介绍
  • 来宾网站制作公司杭州网络推广外包
  • 做网站和淘宝美工 最低电脑百度网站app下载
  • 网站建设需要哪些人网易企业邮箱
  • 共享办公wework湖南seo优化价格
  • 国外网站托管百度入口网页版
  • 虚拟主机控制面板怎么建设网站掉发脱发严重是什么原因
  • 鼎成中考开卷通有关网站做的电子书广州新闻24小时爆料热线
  • 中国空间站建成时间百度云app下载安装
  • 哪里有做空包网站的百度网盘登陆入口
  • 衡水的网站建设百度搜索网址
  • wordpress主页空白seo顾问是什么