use line points from eye position
This commit is contained in:
parent
175bf4a397
commit
91d86a4f85
@ -9,7 +9,8 @@ extern "C" {
|
|||||||
void kb_update(int up, int down, int left, int right);
|
void kb_update(int up, int down, int left, int right);
|
||||||
void update(float lx, float ly, float rx, float ry, float tl, float tr,
|
void update(float lx, float ly, float rx, float ry, float tl, float tr,
|
||||||
int up, int down, int left, int right,
|
int up, int down, int left, int right,
|
||||||
int a, int b, int x, int y);
|
int a, int b, int x, int y,
|
||||||
|
int leftshoulder, int rightshoulder);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
8
main.lua
8
main.lua
@ -11,7 +11,8 @@ void draw();
|
|||||||
void kb_update(int kbup, int kbdown, int kbleft, int kbright);
|
void kb_update(int kbup, int kbdown, int kbleft, int kbright);
|
||||||
void update(float lx, float ly, float rx, float ry, float tl, float tr,
|
void update(float lx, float ly, float rx, float ry, float tl, float tr,
|
||||||
int up, int down, int left, int right,
|
int up, int down, int left, int right,
|
||||||
int a, int b, int x, int y);
|
int a, int b, int x, int y,
|
||||||
|
int leftshoulder, int rightshoulder);
|
||||||
]]
|
]]
|
||||||
local source_path = love.filesystem.getSource()
|
local source_path = love.filesystem.getSource()
|
||||||
test = ffi.load(source_path .. "/test.so")
|
test = ffi.load(source_path .. "/test.so")
|
||||||
@ -35,10 +36,13 @@ local update = function(dt)
|
|||||||
local b = joystick:isGamepadDown("b")
|
local b = joystick:isGamepadDown("b")
|
||||||
local x = joystick:isGamepadDown("x")
|
local x = joystick:isGamepadDown("x")
|
||||||
local y = joystick:isGamepadDown("y")
|
local y = joystick:isGamepadDown("y")
|
||||||
|
local leftshoulder = joystick:isGamepadDown("leftshoulder")
|
||||||
|
local rightshoulder = joystick:isGamepadDown("rightshoulder")
|
||||||
|
|
||||||
test.update(lx, ly, rx, ry, tl, tr,
|
test.update(lx, ly, rx, ry, tl, tr,
|
||||||
up, down, left, right,
|
up, down, left, right,
|
||||||
a, b, x, y)
|
a, b, x, y,
|
||||||
|
leftshoulder, rightshoulder)
|
||||||
end
|
end
|
||||||
|
|
||||||
local up = love.keyboard.isDown("up")
|
local up = love.keyboard.isDown("up")
|
||||||
|
|||||||
@ -32,9 +32,12 @@ void main()
|
|||||||
//float attenuation = 1.0 / (1.0 + Linear * light_distance + Quadratic * light_distance * light_distance);
|
//float attenuation = 1.0 / (1.0 + Linear * light_distance + Quadratic * light_distance * light_distance);
|
||||||
|
|
||||||
float attenuation = 1.0 / (1.0 + Quadratic * light_distance * light_distance);
|
float attenuation = 1.0 / (1.0 + Quadratic * light_distance * light_distance);
|
||||||
out_color += color.xyz * attenuation * diffuse;
|
//out_color += color.xyz * attenuation * diffuse;
|
||||||
//out_color = vec3(diffuse);
|
//out_color = vec3(diffuse);
|
||||||
}
|
}
|
||||||
|
vec3 light_direction = normalize(Eye.xyz - position.xyz);
|
||||||
|
float diffuse = max(dot(normal.xyz, light_direction), 0.0);
|
||||||
|
out_color = color.xyz * diffuse;
|
||||||
|
|
||||||
Color = vec4(out_color, 1.0);
|
Color = vec4(out_color, 1.0);
|
||||||
}
|
}
|
||||||
|
|||||||
50
src/test.cpp
50
src/test.cpp
@ -470,7 +470,7 @@ static_assert((sizeof (short_point)) == 6);
|
|||||||
short_point line_points[128];
|
short_point line_points[128];
|
||||||
static int line_point_ix = 0;
|
static int line_point_ix = 0;
|
||||||
|
|
||||||
void line_point(int x, int y, int z)
|
void append_line_point(int x, int y, int z)
|
||||||
{
|
{
|
||||||
if (line_point_ix >= 128)
|
if (line_point_ix >= 128)
|
||||||
return;
|
return;
|
||||||
@ -543,22 +543,38 @@ void load_line_instance_buffer()
|
|||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct line_state {
|
||||||
|
struct {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int z;
|
||||||
|
} point[2];
|
||||||
|
};
|
||||||
|
static line_state line_state = {};
|
||||||
|
|
||||||
void load_line()
|
void load_line()
|
||||||
{
|
{
|
||||||
int x1 = -55;
|
|
||||||
int z1 = 48;
|
|
||||||
int y1 = 50;
|
|
||||||
|
|
||||||
int x2 = -60;
|
|
||||||
int z2 = 55;
|
|
||||||
int y2 = 53;
|
|
||||||
|
|
||||||
line_point_ix = 0;
|
line_point_ix = 0;
|
||||||
bresenham(x1, y1, z1, x2, y2, z2, line_point);
|
bresenham(line_state.point[0].x, line_state.point[0].y, line_state.point[0].z,
|
||||||
|
line_state.point[1].x, line_state.point[1].y, line_state.point[1].z,
|
||||||
|
append_line_point);
|
||||||
|
|
||||||
load_line_instance_buffer();
|
load_line_instance_buffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void load_line_point_from_eye(int point_ix)
|
||||||
|
{
|
||||||
|
int x = XMVectorGetX(view_state.eye);
|
||||||
|
int y = XMVectorGetY(view_state.eye);
|
||||||
|
int z = XMVectorGetZ(view_state.eye);
|
||||||
|
|
||||||
|
line_state.point[point_ix].x = x;
|
||||||
|
line_state.point[point_ix].y = z;
|
||||||
|
line_state.point[point_ix].z = y;
|
||||||
|
|
||||||
|
load_line();
|
||||||
|
}
|
||||||
|
|
||||||
void load(const char * source_path)
|
void load(const char * source_path)
|
||||||
{
|
{
|
||||||
g_source_path_length = strlen(source_path);
|
g_source_path_length = strlen(source_path);
|
||||||
@ -612,7 +628,6 @@ void load(const char * source_path)
|
|||||||
load_line_vertex_attributes();
|
load_line_vertex_attributes();
|
||||||
|
|
||||||
glGenBuffers(1, &line_instance_buffer);
|
glGenBuffers(1, &line_instance_buffer);
|
||||||
load_line();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float _ry = 0.0;
|
float _ry = 0.0;
|
||||||
@ -635,7 +650,8 @@ void kb_update(int up, int down, int left, int right)
|
|||||||
|
|
||||||
void update(float lx, float ly, float rx, float ry, float tl, float tr,
|
void update(float lx, float ly, float rx, float ry, float tl, float tr,
|
||||||
int up, int down, int left, int right,
|
int up, int down, int left, int right,
|
||||||
int a, int b, int x, int y)
|
int a, int b, int x, int y,
|
||||||
|
int leftshoulder, int rightshoulder)
|
||||||
{
|
{
|
||||||
//view_state.yaw += rx;
|
//view_state.yaw += rx;
|
||||||
XMMATRIX mrz = XMMatrixRotationZ(rx * -0.035);
|
XMMATRIX mrz = XMMatrixRotationZ(rx * -0.035);
|
||||||
@ -662,6 +678,13 @@ void update(float lx, float ly, float rx, float ry, float tl, float tr,
|
|||||||
lighting.linear += 0.01 * x + -0.01 * y;
|
lighting.linear += 0.01 * x + -0.01 * y;
|
||||||
if (lighting.linear < 0.0f)
|
if (lighting.linear < 0.0f)
|
||||||
lighting.linear = 0.0f;
|
lighting.linear = 0.0f;
|
||||||
|
|
||||||
|
if (leftshoulder) {
|
||||||
|
load_line_point_from_eye(0);
|
||||||
|
}
|
||||||
|
if (rightshoulder) {
|
||||||
|
load_line_point_from_eye(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int popcount(int x)
|
static inline int popcount(int x)
|
||||||
@ -860,6 +883,9 @@ void draw_lighting()
|
|||||||
|
|
||||||
void draw_line()
|
void draw_line()
|
||||||
{
|
{
|
||||||
|
if (line_point_ix == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
glUseProgram(line_program);
|
glUseProgram(line_program);
|
||||||
|
|
||||||
glBlendFunc(GL_ONE, GL_ZERO);
|
glBlendFunc(GL_ONE, GL_ZERO);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user