add some sunlight
This commit is contained in:
parent
a6d3f3d779
commit
ef37119f4e
@ -62,11 +62,17 @@ Drone::Drone() {
|
|||||||
tinyobj::real_t vx = attrib.vertices[3*idx.vertex_index+0];
|
tinyobj::real_t vx = attrib.vertices[3*idx.vertex_index+0];
|
||||||
tinyobj::real_t vy = attrib.vertices[3*idx.vertex_index+1];
|
tinyobj::real_t vy = attrib.vertices[3*idx.vertex_index+1];
|
||||||
tinyobj::real_t vz = attrib.vertices[3*idx.vertex_index+2];
|
tinyobj::real_t vz = attrib.vertices[3*idx.vertex_index+2];
|
||||||
|
tinyobj::real_t nx = attrib.normals[3*idx.normal_index+0];
|
||||||
|
tinyobj::real_t ny = attrib.normals[3*idx.normal_index+1];
|
||||||
|
tinyobj::real_t nz = attrib.normals[3*idx.normal_index+2];
|
||||||
tinyobj::real_t ts = attrib.texcoords[2*idx.texcoord_index+0];
|
tinyobj::real_t ts = attrib.texcoords[2*idx.texcoord_index+0];
|
||||||
tinyobj::real_t tt = attrib.texcoords[2*idx.texcoord_index+1];
|
tinyobj::real_t tt = attrib.texcoords[2*idx.texcoord_index+1];
|
||||||
verts.append(vx);
|
verts.append(vx);
|
||||||
verts.append(vy);
|
verts.append(vy);
|
||||||
verts.append(vz);
|
verts.append(vz);
|
||||||
|
verts.append(nx);
|
||||||
|
verts.append(ny);
|
||||||
|
verts.append(nz);
|
||||||
verts.append(ts);
|
verts.append(ts);
|
||||||
verts.append(tt);
|
verts.append(tt);
|
||||||
// qDebug() << "vert" << vx << vy << vz << "tex" << ts << tt;
|
// qDebug() << "vert" << vx << vy << vz << "tex" << ts << tt;
|
||||||
@ -143,12 +149,12 @@ DroneController::DroneController(const QJsonObject &json)
|
|||||||
OpenGLWidget::instance->makeCurrent();
|
OpenGLWidget::instance->makeCurrent();
|
||||||
QOpenGLTexture *ground_tex = new QOpenGLTexture(QImage(":/mdl/ground.jpg").mirrored());
|
QOpenGLTexture *ground_tex = new QOpenGLTexture(QImage(":/mdl/ground.jpg").mirrored());
|
||||||
OpenGLMesh *ground = new OpenGLMesh({
|
OpenGLMesh *ground = new OpenGLMesh({
|
||||||
-100, 0, -100, 0, 0,
|
-100, 0, -100, 0, 1, 0, 0, 0,
|
||||||
100, 0, -100, 1, 0,
|
100, 0, -100, 0, 1, 0, 1, 0,
|
||||||
-100, 0, 100, 0, 1,
|
-100, 0, 100, 0, 1, 0, 0, 1,
|
||||||
100, 0, -100, 1, 0,
|
100, 0, -100, 0, 1, 0, 1, 0,
|
||||||
-100, 0, 100, 0, 1,
|
-100, 0, 100, 0, 1, 0, 0, 1,
|
||||||
100, 0, 100, 1, 1,
|
100, 0, 100, 0, 1, 0, 1, 1,
|
||||||
}, ground_tex);
|
}, ground_tex);
|
||||||
OpenGLWidget::instance->meshes.append(*ground);
|
OpenGLWidget::instance->meshes.append(*ground);
|
||||||
OpenGLWidget::instance->doneCurrent();
|
OpenGLWidget::instance->doneCurrent();
|
||||||
|
@ -8,16 +8,18 @@ OpenGLMesh::OpenGLMesh(QVector<float> verts, QOpenGLTexture *tex)
|
|||||||
:tex(tex) {
|
:tex(tex) {
|
||||||
OpenGLWidget::instance->makeCurrent();
|
OpenGLWidget::instance->makeCurrent();
|
||||||
QOpenGLFunctions_4_4_Core *glf = OpenGLWidget::instance;
|
QOpenGLFunctions_4_4_Core *glf = OpenGLWidget::instance;
|
||||||
nverts = verts.size() / 5;
|
nverts = verts.size() / 8;
|
||||||
glf->glGenVertexArrays(1, &vao);
|
glf->glGenVertexArrays(1, &vao);
|
||||||
glf->glGenBuffers(1, &vbo);
|
glf->glGenBuffers(1, &vbo);
|
||||||
glf->glBindVertexArray(vao);
|
glf->glBindVertexArray(vao);
|
||||||
glf->glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
glf->glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
||||||
glf->glBufferData(GL_ARRAY_BUFFER, nverts * 5 * sizeof (float), verts.data(), GL_STATIC_DRAW);
|
glf->glBufferData(GL_ARRAY_BUFFER, nverts * 8 * sizeof (float), verts.data(), GL_STATIC_DRAW);
|
||||||
glf->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof (float), 0);
|
glf->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof (float), 0);
|
||||||
glf->glEnableVertexAttribArray(0);
|
glf->glEnableVertexAttribArray(0);
|
||||||
glf->glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof (float), (void *) (3 * sizeof (float)));
|
glf->glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof (float), (void *) (3 * sizeof (float)));
|
||||||
glf->glEnableVertexAttribArray(1);
|
glf->glEnableVertexAttribArray(1);
|
||||||
|
glf->glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof (float), (void *) (6 * sizeof (float)));
|
||||||
|
glf->glEnableVertexAttribArray(2);
|
||||||
tex->bind();
|
tex->bind();
|
||||||
glf->glBindVertexArray(0);
|
glf->glBindVertexArray(0);
|
||||||
OpenGLWidget::instance->doneCurrent();
|
OpenGLWidget::instance->doneCurrent();
|
||||||
|
@ -7,9 +7,12 @@ static const GLchar *vertex_shader_source = R"glsl(
|
|||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
layout(location = 0) in vec3 in_pos;
|
layout(location = 0) in vec3 in_pos;
|
||||||
layout(location = 1) in vec2 in_uv;
|
layout(location = 1) in vec3 in_norm;
|
||||||
|
layout(location = 2) in vec2 in_uv;
|
||||||
|
|
||||||
|
out vec3 norm;
|
||||||
out vec2 uv;
|
out vec2 uv;
|
||||||
|
out vec3 frag_pos;
|
||||||
|
|
||||||
uniform mat4 proj;
|
uniform mat4 proj;
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
@ -17,20 +20,32 @@ uniform mat4 model;
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = proj * view * model * vec4(in_pos, 1.0);
|
gl_Position = proj * view * model * vec4(in_pos, 1.0);
|
||||||
|
norm = in_norm;
|
||||||
uv = in_uv;
|
uv = in_uv;
|
||||||
|
frag_pos = vec3(model * vec4(in_pos, 1.0));
|
||||||
}
|
}
|
||||||
)glsl";
|
)glsl";
|
||||||
|
|
||||||
static const GLchar *fragment_shader_source = R"glsl(
|
static const GLchar *fragment_shader_source = R"glsl(
|
||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
|
in vec3 norm;
|
||||||
in vec2 uv;
|
in vec2 uv;
|
||||||
|
in vec3 frag_pos;
|
||||||
|
|
||||||
out vec4 final_col;
|
out vec4 final_col;
|
||||||
|
|
||||||
uniform sampler2D tex;
|
uniform sampler2D tex;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
final_col = texture(tex, uv);
|
vec3 light_col = vec3(1, .964, .783);
|
||||||
|
vec3 ambient = light_col * .2;
|
||||||
|
|
||||||
|
vec3 light_dir = normalize(vec3(5, 10, -8));
|
||||||
|
float diff = max(dot(normalize(norm), light_dir), 0.0);
|
||||||
|
vec3 diffuse = diff * light_col;
|
||||||
|
|
||||||
|
final_col = texture(tex, uv) * vec4(ambient + diffuse, 1);
|
||||||
}
|
}
|
||||||
)glsl";
|
)glsl";
|
||||||
|
|
||||||
@ -139,7 +154,7 @@ void OpenGLWidget::initializeGL() {
|
|||||||
|
|
||||||
void OpenGLWidget::resizeGL(int w, int h) {
|
void OpenGLWidget::resizeGL(int w, int h) {
|
||||||
QMatrix4x4 projection;
|
QMatrix4x4 projection;
|
||||||
projection.perspective(FOV, (float) w/h, .1, 1000);
|
projection.perspective(FOV, (float) w/h, .01, 1000);
|
||||||
glUniformMatrix4fv(proj_attr, 1, GL_FALSE, projection.data());
|
glUniformMatrix4fv(proj_attr, 1, GL_FALSE, projection.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user