textured fishe!!!!1!
This commit is contained in:
parent
ea20c1f0fc
commit
1cbfdb0e3b
1171
OBJ_Loader.h
Normal file
1171
OBJ_Loader.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,14 @@
|
|||||||
#include "fish_painter.h"
|
#include "fish_painter.h"
|
||||||
|
|
||||||
|
#include "OBJ_Loader.h"
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
|
#include <locale>
|
||||||
|
#include <QImage>
|
||||||
|
|
||||||
|
|
||||||
const GLfloat vertices[] = {
|
FishPainter::~FishPainter() {
|
||||||
1, 0, 0,
|
if (texture) delete texture;
|
||||||
-1, .5, 0,
|
}
|
||||||
-1, -.5, 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void FishPainter::create(QOpenGLExtraFunctions *glf) {
|
void FishPainter::create(QOpenGLExtraFunctions *glf) {
|
||||||
@ -25,15 +26,31 @@ void FishPainter::create(QOpenGLExtraFunctions *glf) {
|
|||||||
qCritical() << program.log();
|
qCritical() << program.log();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
texture = new QOpenGLTexture(QImage(":/textures/fish.jpg").mirrored());
|
||||||
|
|
||||||
vao.create();
|
vao.create();
|
||||||
|
|
||||||
{QOpenGLVertexArrayObject::Binder bind(&vao);
|
{QOpenGLVertexArrayObject::Binder bind(&vao);
|
||||||
vbo.create();
|
vbo.create();
|
||||||
vbo.bind();
|
vbo.bind();
|
||||||
vbo.allocate(vertices, 9 * sizeof (GLfloat));
|
std::locale old_locale = std::locale::global(std::locale::classic()); // lmao posix sucks so much
|
||||||
|
objl::Loader loader;
|
||||||
|
if (!loader.LoadFile(":/meshes/fish.obj")) {
|
||||||
|
qCritical() << "Unable to load fish mesh.";
|
||||||
|
}
|
||||||
|
std::locale::global(old_locale);
|
||||||
|
std::vector<objl::Vertex> verts = loader.LoadedMeshes[0].Vertices;
|
||||||
|
n_verts = verts.size();
|
||||||
|
vbo.allocate(verts.data(), verts.size() * sizeof (objl::Vertex));
|
||||||
program.bind();
|
program.bind();
|
||||||
program.setAttributeBuffer("position", GL_FLOAT, 0, 3);
|
program.setAttributeBuffer("position", GL_FLOAT,
|
||||||
|
offsetof(objl::Vertex, Position),
|
||||||
|
3, sizeof (objl::Vertex));
|
||||||
|
program.setAttributeBuffer("uv", GL_FLOAT,
|
||||||
|
offsetof(objl::Vertex, TextureCoordinate),
|
||||||
|
2, sizeof (objl::Vertex));
|
||||||
program.enableAttributeArray("position");
|
program.enableAttributeArray("position");
|
||||||
|
program.enableAttributeArray("uv");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,6 +63,7 @@ void FishPainter::paint(QOpenGLExtraFunctions *glf,
|
|||||||
{QOpenGLVertexArrayObject::Binder bind(&vao);
|
{QOpenGLVertexArrayObject::Binder bind(&vao);
|
||||||
program.setUniformValue("projection", projection);
|
program.setUniformValue("projection", projection);
|
||||||
program.setUniformValue("view", view);
|
program.setUniformValue("view", view);
|
||||||
|
texture->bind();
|
||||||
QMatrix4x4 model;
|
QMatrix4x4 model;
|
||||||
for (const Fish &fish : fishes) {
|
for (const Fish &fish : fishes) {
|
||||||
model.setToIdentity();
|
model.setToIdentity();
|
||||||
@ -59,7 +77,7 @@ void FishPainter::paint(QOpenGLExtraFunctions *glf,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
program.setUniformValue("model", model);
|
program.setUniformValue("model", model);
|
||||||
glf->glDrawArrays(GL_TRIANGLES, 0, 3);
|
glf->glDrawArrays(GL_TRIANGLES, 0, n_verts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,18 @@
|
|||||||
#include <QOpenGLShaderProgram>
|
#include <QOpenGLShaderProgram>
|
||||||
#include <QOpenGLExtraFunctions>
|
#include <QOpenGLExtraFunctions>
|
||||||
#include <QMatrix4x4>
|
#include <QMatrix4x4>
|
||||||
|
#include <QOpenGLTexture>
|
||||||
|
|
||||||
|
|
||||||
class FishPainter {
|
class FishPainter {
|
||||||
QOpenGLVertexArrayObject vao;
|
QOpenGLVertexArrayObject vao;
|
||||||
QOpenGLBuffer vbo;
|
QOpenGLBuffer vbo;
|
||||||
QOpenGLShaderProgram program;
|
QOpenGLShaderProgram program;
|
||||||
|
QOpenGLTexture *texture = nullptr;
|
||||||
|
size_t n_verts;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
~FishPainter();
|
||||||
void create(QOpenGLExtraFunctions *glf);
|
void create(QOpenGLExtraFunctions *glf);
|
||||||
void paint(QOpenGLExtraFunctions *glf,
|
void paint(QOpenGLExtraFunctions *glf,
|
||||||
const QMatrix4x4 &projection,
|
const QMatrix4x4 &projection,
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
varying vec2 fragment_uv;
|
||||||
|
uniform sampler2D texture;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_FragColor = vec4(1, 0, .3, 1);
|
gl_FragColor = texture2D(texture, fragment_uv);
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
attribute vec3 position;
|
attribute vec3 position;
|
||||||
|
attribute vec2 uv;
|
||||||
|
|
||||||
|
varying vec2 fragment_uv;
|
||||||
|
|
||||||
uniform mat4 projection;
|
uniform mat4 projection;
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
uniform mat4 model;
|
uniform mat4 model;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
fragment_uv = uv;
|
||||||
gl_Position = projection * view * model * vec4(position, 1);
|
gl_Position = projection * view * model * vec4(position, 1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user