construct view space axes
This commit is contained in:
parent
8d0937cb50
commit
5b55adfa6e
2
makefile
2
makefile
|
@ -19,7 +19,7 @@ SHADER_TARGETS = $(SHADERS:$(SHADER_ROOT_DIR)/%.glsl=$(SHADER_TARGET_DIR)/%.comp
|
||||||
TARGET = $(BIN_DIR)/oglc
|
TARGET = $(BIN_DIR)/oglc
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LIBS = `pkg-config --static --libs glew sdl2`
|
LIBS = `pkg-config --static --libs glew sdl2 cglm`
|
||||||
CFLAGS = -I$(SRC_DIR) -Wall
|
CFLAGS = -I$(SRC_DIR) -Wall
|
||||||
|
|
||||||
SRC = $(shell find $(SRC_DIR) -name *.c)
|
SRC = $(shell find $(SRC_DIR) -name *.c)
|
||||||
|
|
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
layout (location = 1) uniform vec4 t;
|
layout (location = 1) uniform vec4 t;
|
||||||
|
|
||||||
|
layout (location = 2) uniform vec3 w; // view space axes
|
||||||
|
layout (location = 3) uniform vec3 u;
|
||||||
|
layout (location = 4) uniform vec3 v;
|
||||||
|
|
||||||
layout(local_size_x = 1, local_size_y = 1) in; // size of local work group - 1 pixel
|
layout(local_size_x = 1, local_size_y = 1) in; // size of local work group - 1 pixel
|
||||||
layout(rgba32f, binding = 0) uniform image2D img_output; // rgba32f defines internal format, image2d for random write to output texture
|
layout(rgba32f, binding = 0) uniform image2D img_output; // rgba32f defines internal format, image2d for random write to output texture
|
||||||
|
|
||||||
const float INF = 1000000.0f;
|
const float INF = 1000.0f;
|
||||||
|
|
||||||
#include sphere.glsl
|
#include sphere.glsl
|
||||||
|
|
||||||
|
@ -54,8 +58,6 @@ Ray createCameraRay(vec2 uv)
|
||||||
// float2 rd = _CameraLensRadius * randomInUnitDisk();
|
// float2 rd = _CameraLensRadius * randomInUnitDisk();
|
||||||
// float3 offset = _CameraU * rd.x + _CameraV * rd.y;
|
// float3 offset = _CameraU * rd.x + _CameraV * rd.y;
|
||||||
|
|
||||||
// ...
|
|
||||||
|
|
||||||
float max_x = 5.0;
|
float max_x = 5.0;
|
||||||
float max_y = 5.0;
|
float max_y = 5.0;
|
||||||
|
|
||||||
|
@ -87,16 +89,17 @@ void main()
|
||||||
hit.normal = vec3(0.0,0.0,0.0);
|
hit.normal = vec3(0.0,0.0,0.0);
|
||||||
|
|
||||||
Sphere sphere;
|
Sphere sphere;
|
||||||
sphere.center = vec3(0.0,0.0,10.0);
|
//sphere.center = vec3(0.0,0.0,10.0+0.5*t.y);
|
||||||
sphere.radius = 3.0+t.y;
|
sphere.center = w*-10.0;
|
||||||
|
sphere.radius = 4.0;
|
||||||
|
|
||||||
// ray-sphere intersection
|
// ray-sphere intersection
|
||||||
intersectSphere(ray, hit, sphere);
|
intersectSphere(ray, hit, sphere);
|
||||||
|
|
||||||
if (hit.distance < INF)
|
float depth = (hit.distance-6.0)/4.0;
|
||||||
{
|
|
||||||
pixel = vec4(t.y,1.0-t.y,1.0,1.0);
|
pixel = vec4(t.z,1.0-t.z,depth,1.0);
|
||||||
}
|
pixel *= (1.0-depth);
|
||||||
|
|
||||||
// output to a specific pixel in the image
|
// output to a specific pixel in the image
|
||||||
imageStore(img_output, pixel_coords, pixel);
|
imageStore(img_output, pixel_coords, pixel);
|
22
src/main.c
22
src/main.c
|
@ -23,7 +23,7 @@ int main()
|
||||||
|
|
||||||
// compile shader programs
|
// compile shader programs
|
||||||
unsigned int computeProgram = compileComputeShaderProgram(
|
unsigned int computeProgram = compileComputeShaderProgram(
|
||||||
"bin/res/compute.compute");
|
"bin/res/rt.compute");
|
||||||
unsigned int quadProgram = compileQuadShaderProgram(
|
unsigned int quadProgram = compileQuadShaderProgram(
|
||||||
"bin/res/shader.vert",
|
"bin/res/shader.vert",
|
||||||
"bin/res/shader.frag");
|
"bin/res/shader.frag");
|
||||||
|
@ -32,16 +32,30 @@ int main()
|
||||||
initBuffers();
|
initBuffers();
|
||||||
setVertexAttributes();
|
setVertexAttributes();
|
||||||
|
|
||||||
|
|
||||||
// render loop
|
// render loop
|
||||||
while (!checkQuit())
|
while (!checkQuit())
|
||||||
{
|
{
|
||||||
glUseProgram(computeProgram);
|
glUseProgram(computeProgram);
|
||||||
|
|
||||||
// update uniforms
|
// update uniforms
|
||||||
float t = time();
|
float t = time(); // time
|
||||||
float sin_t = sin(t);
|
float sin_t = sin(t);
|
||||||
int tLocation = glGetUniformLocation(computeProgram, "t");
|
int tLocation = glGetUniformLocation(computeProgram, "t");
|
||||||
glUniform4f(tLocation, t, (1.0 + sin_t)*0.5, 0.0f, 0.0f);
|
glUniform4f(tLocation, t, sin_t, (1.0 + sin_t)*0.5, 0.0f);
|
||||||
|
|
||||||
|
// form view space axes
|
||||||
|
vec3 u,v;
|
||||||
|
vec3 up = {0,1.0,0};
|
||||||
|
vec3 w = {0,sin_t*0.1,-1.0};
|
||||||
|
glm_vec3_norm(w);
|
||||||
|
glm_vec3_cross(up,w,u);
|
||||||
|
glm_vec3_norm(u);
|
||||||
|
glm_vec3_cross(w, u, v);
|
||||||
|
int wLocation = glGetUniformLocation(computeProgram, "w");
|
||||||
|
glUniform3f(wLocation+0, w[0], w[1], w[2]); // w
|
||||||
|
glUniform3f(wLocation+1, u[0], u[1], u[2]); // u
|
||||||
|
glUniform3f(wLocation+2, v[0], v[1], v[2]); // v
|
||||||
|
|
||||||
// dispatch compute shader
|
// dispatch compute shader
|
||||||
glDispatchCompute((GLuint)width, (GLuint)height, 1);
|
glDispatchCompute((GLuint)width, (GLuint)height, 1);
|
||||||
|
@ -51,8 +65,6 @@ int main()
|
||||||
|
|
||||||
// normal drawing pass
|
// normal drawing pass
|
||||||
glUseProgram(quadProgram);
|
glUseProgram(quadProgram);
|
||||||
//glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
|
||||||
//glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
glActiveTexture(GL_TEXTURE0); // use computed texture
|
glActiveTexture(GL_TEXTURE0); // use computed texture
|
||||||
glBindTexture(GL_TEXTURE_2D, textureOutput);
|
glBindTexture(GL_TEXTURE_2D, textureOutput);
|
||||||
|
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <cglm/vec3.h>
|
||||||
|
#include <cglm/cam.h>
|
||||||
|
|
25
todo.md
25
todo.md
|
@ -1,19 +1,18 @@
|
||||||
* [x] basic opengl initialisation
|
* [x] basic opengl initialisation
|
||||||
* [-] shader pre-processor
|
* [x] shader pre-processor
|
||||||
* [x] ppp.py
|
* [x] ppp.py
|
||||||
* [ ] read root shaders from src/shader/
|
* [x] read root shaders
|
||||||
* [ ] read include shaders from src shader/ include
|
* [x] read include shaders
|
||||||
* [ ] write processed shaders to bin/res/shader/
|
* [x] write processed shaders to bin/res/shader/
|
||||||
* [ ] attempt to compile processed shaders
|
* [x] compile processed shaders
|
||||||
|
|
||||||
* [ ] output frame to a file
|
|
||||||
* [ ] detect input keydown s
|
|
||||||
* [ ] get timestamp
|
|
||||||
* [ ] create and write to file (maybe with `stb_image.h`?)
|
|
||||||
* [-] render image with compute shader
|
* [-] render image with compute shader
|
||||||
* [x] render a texture to a full-screen quad
|
* [x] render a texture to a full-screen quad
|
||||||
* [x] pass uniforms to texture to animate it
|
* [x] pass uniforms to texture to animate it
|
||||||
* [ ] ray tracing time
|
* [-] ray tracing time
|
||||||
|
* [-] perspective
|
||||||
|
* [-] depth
|
||||||
|
* [x] acquire value
|
||||||
|
* [ ] depth texture
|
||||||
* [ ] acquire randomness
|
* [ ] acquire randomness
|
||||||
* [ ] acceleration time !
|
* [ ] acceleration time !
|
||||||
* [ ] auxiliary textures: g buffer
|
* [ ] auxiliary textures: g buffer
|
||||||
|
@ -22,6 +21,10 @@
|
||||||
* [ ] mandelbrot
|
* [ ] mandelbrot
|
||||||
* [ ] julia
|
* [ ] julia
|
||||||
* [ ] trongle
|
* [ ] trongle
|
||||||
|
* [ ] output frame to a file
|
||||||
|
* [ ] detect input keydown s
|
||||||
|
* [ ] get timestamp
|
||||||
|
* [ ] create and write to file (maybe with `stb_image.h`?)
|
||||||
* [ ] command line arguments
|
* [ ] command line arguments
|
||||||
* [ ] help
|
* [ ] help
|
||||||
* [ ] window dimensions
|
* [ ] window dimensions
|
||||||
|
|
Loading…
Reference in New Issue