前言
额,以前确实写过Java的加载obj文件,但那是Java,所以用C++再写一次
加载obj:1.0,2.0
嗯,各位,你们现在看到的这篇文章已经被我修改过了(增加了ObjModelLoader类的一些新特性),已经是2.0了
片段着色器代码
#version 330 core
in vec3 v_position;
in vec3 v_color;
in vec3 v_normal;
in vec3 v_normal2;
in vec2 v_texCoord;
out vec4 o_color;
uniform bool u_enableLighting;
uniform bool u_enableDoubleLighting;
uniform bool u_enableTexture;
uniform sampler2D s_sampler;
uniform vec4 u_color;
uniform bool u_enableUniformColor;
uniform vec3 u_cameraposition;
void main()
{
vec3 light_direction = normalize(v_position - u_cameraposition);
vec3 view_direction = normalize(v_position - u_cameraposition);
float ambient = 0.1;
float diffuse = 1.0;
float specular = 0.0;
float diffuse2 = 0.0;
float specular2 = 0.0;
if (u_enableLighting)
{
diffuse = max(dot(v_normal, -light_direction), 0.0);
vec3 reflect_direction = reflect(light_direction, v_normal);
specular = pow(max(dot(-view_direction, reflect_direction), 0.0), 32.0);
if (u_enableDoubleLighting)
{
diffuse2 = max(dot(v_normal, -light_direction), 0.0);
vec3 reflect_direction2 = reflect(light_direction, v_normal2);
specular2 = pow(max(dot(-view_direction, reflect_direction2), 0.0), 32.0);
}
}
vec4 color;
if (u_enableTexture)
{
color = texture(s_sampler, v_texCoord);
}
else if (u_enableUniformColor)
{
color = u_color;
}
else
{
color = vec4(v_color, 1.0);
}
o_color = (ambient + diffuse + specular + diffuse2 + specular2) * color;
}
模型加载类代码
#ifndef __SIMPLEGL_MODEL_HPP__
#define __SIMPLEGL_MODEL_HPP__
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
效果
你问为什么和加了模糊滤镜一样?
因为全屏的GLFW截不了图,这个是用手机拍的…