xxdddddddddddd
This commit is contained in:
parent
fdd97480ad
commit
f272d0145a
4 changed files with 108 additions and 2 deletions
BIN
images/wall.png
Normal file
BIN
images/wall.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 277 B |
|
@ -1,4 +1,23 @@
|
||||||
#version 330
|
#version 330
|
||||||
|
|
||||||
void main() {
|
in vec3 vsoNormal;
|
||||||
|
in vec4 vsoModPos;
|
||||||
|
|
||||||
|
in vec2 vsoTexCoord;
|
||||||
|
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform sampler2D tex0;
|
||||||
|
uniform mat4 viewMatrix;
|
||||||
|
uniform vec4 lumPos;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
const vec3 Vu = vec3(0, 0, -1);
|
||||||
|
vec4 lumPosv = viewMatrix * lumPos;
|
||||||
|
vec3 Ld = normalize(vsoModPos - lumPosv).xyz;
|
||||||
|
vec3 reflexion = normalize(reflect(Ld, vsoNormal));
|
||||||
|
float ispec = pow(clamp(dot(-Vu, reflexion), 0., 1.), 20);
|
||||||
|
float phongIL = clamp(dot(-Ld, vsoNormal), 0., 1.);
|
||||||
|
|
||||||
|
fragColor = phongIL * texture(tex0, vsoTexCoord) + ispec * vec4(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,33 @@
|
||||||
#version 330
|
#version 330
|
||||||
|
|
||||||
void main() {
|
layout(location = 0) in vec3 vsiPosition;
|
||||||
|
layout(location = 1) in vec3 vsiNormal;
|
||||||
|
layout(location = 2) in vec2 vsiTexCoord;
|
||||||
|
|
||||||
|
out vec2 vsoTexCoord;
|
||||||
|
out vec3 vsoNormal;
|
||||||
|
out vec4 vsoModPos;
|
||||||
|
out float vsoIntensiteLum;
|
||||||
|
|
||||||
|
uniform mat4 proj, model, view;
|
||||||
|
|
||||||
|
uniform vec4 lumPos;
|
||||||
|
uniform float phase;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
mat4 N = transpose(inverse(view * model));
|
||||||
|
vsoNormal = normalize((N * vec4(vsiNormal, 0)).xyz);
|
||||||
|
vec4 lumPosv = view * lumPos;
|
||||||
|
|
||||||
|
float dist = length(vsiPosition.xz), freq = 5, amplitude = 0.1 * (sqrt(2.) - dist);
|
||||||
|
float y = amplitude * cos(phase + freq * dist);
|
||||||
|
vec3 p = vec3(vsiPosition.x, y, vsiPosition.z);
|
||||||
|
|
||||||
|
vsoModPos = view * model * vec4(p, 1);
|
||||||
|
vec3 Ld = normalize(vsoModPos - lumPosv).xyz;
|
||||||
|
|
||||||
|
vsoIntensiteLum = clamp(dot(-Ld, vsoNormal), 0., 1.);
|
||||||
|
gl_Position = proj * vsoModPos;
|
||||||
|
|
||||||
|
vsoTexCoord = vec2(vsiTexCoord.x, 1 - vsiTexCoord.y);
|
||||||
}
|
}
|
||||||
|
|
58
src/tag.c
58
src/tag.c
|
@ -1,9 +1,16 @@
|
||||||
#include "../includes/animations.h"
|
#include "../includes/animations.h"
|
||||||
|
|
||||||
static GLuint _pId = 0;
|
static GLuint _pId = 0;
|
||||||
|
static GLuint _murId = 0;
|
||||||
|
static GLuint _texId = 0;
|
||||||
|
|
||||||
|
static const char *matrix_proj = "proj";
|
||||||
|
static const char *matrix_model = "model";
|
||||||
|
static const char *matrix_view = "view";
|
||||||
|
|
||||||
static void init(void);
|
static void init(void);
|
||||||
static void draw(void);
|
static void draw(void);
|
||||||
|
static void deinit(void);
|
||||||
|
|
||||||
void tag(int state) {
|
void tag(int state) {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
|
@ -15,20 +22,71 @@ void tag(int state) {
|
||||||
draw();
|
draw();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GL4DH_FREE:
|
||||||
|
deinit();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init(void) {
|
static void init(void) {
|
||||||
|
_murId = gl4dgGenGrid2df(100, 100);
|
||||||
_pId = gl4duCreateProgram("<vs>shaders/tag.vs", "<fs>shaders/tag.fs", NULL);
|
_pId = gl4duCreateProgram("<vs>shaders/tag.vs", "<fs>shaders/tag.fs", NULL);
|
||||||
|
|
||||||
|
glGenTextures(1, &_texId);
|
||||||
|
load_img("images/wall.png", _texId);
|
||||||
|
|
||||||
|
gl4duGenMatrix(GL_FLOAT, matrix_proj);
|
||||||
|
gl4duGenMatrix(GL_FLOAT, matrix_model);
|
||||||
|
gl4duGenMatrix(GL_FLOAT, matrix_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void draw(void) {
|
static void draw(void) {
|
||||||
|
static double t0 = 0;
|
||||||
|
float dt = (float)get_dt(&t0, GL_TRUE);
|
||||||
|
|
||||||
|
static GLfloat angle = 0.0f;
|
||||||
|
GLfloat lum_pos[] = {-2.0f *
|
||||||
|
(float)cos(angle * (GLfloat)M_PI / (5.0f * 180.0f)),
|
||||||
|
0.2f, 0.0f, 1.0f};
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glClearColor(0.2f, 0.2f, 0.2f, 1);
|
glClearColor(0.2f, 0.2f, 0.2f, 1);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
glUseProgram(_pId);
|
glUseProgram(_pId);
|
||||||
|
|
||||||
|
bindAndLoadf(matrix_proj);
|
||||||
|
GLfloat ratio = (GLfloat)_dims[0] / (GLfloat)_dims[1];
|
||||||
|
gl4duFrustumf(-1, 1, -ratio, ratio, 2, 1000);
|
||||||
|
|
||||||
|
bindAndLoadf(matrix_view);
|
||||||
|
const GLfloat distance = 2; // distance from the scene
|
||||||
|
gl4duLookAtf(0, distance, distance, 0, 0, 0, 0, 1, 0);
|
||||||
|
// gl4duRotatef(-90, 0, 1, 0); // rotation camera
|
||||||
|
|
||||||
|
bindAndLoadf(matrix_model);
|
||||||
|
gl4duRotatef(40, 1, 0, 0);
|
||||||
|
gl4duRotatef(40, 0, 0, 1);
|
||||||
|
|
||||||
|
angle += dt * 90.0f;
|
||||||
|
gl4duSendMatrices();
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, _texId);
|
||||||
|
glUniform1f(glGetUniformLocation(_pId, "phase"), 0);
|
||||||
|
glUniform4fv(glGetUniformLocation(_pId, "lumPos"), 1, lum_pos);
|
||||||
|
|
||||||
|
gl4dgDraw(_murId);
|
||||||
|
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void deinit(void) {
|
||||||
|
if (_texId) {
|
||||||
|
glDeleteTextures(1, &_texId);
|
||||||
|
_texId = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue