two main functions, one for testing??
This commit is contained in:
parent
5f5c660190
commit
b4a7ec7cc3
@ -93,7 +93,7 @@ void update_app(App* app)
|
|||||||
void init_opengl()
|
void init_opengl()
|
||||||
{
|
{
|
||||||
// https://gitlab.com/imre-piller/me-courses/ alapjan.
|
// https://gitlab.com/imre-piller/me-courses/ alapjan.
|
||||||
/* glShadeModel(GL_SMOOTH);
|
glShadeModel(GL_SMOOTH);
|
||||||
|
|
||||||
glEnable(GL_NORMALIZE);
|
glEnable(GL_NORMALIZE);
|
||||||
glEnable(GL_AUTO_NORMAL);
|
glEnable(GL_AUTO_NORMAL);
|
||||||
@ -106,7 +106,7 @@ void init_opengl()
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glClearDepth(1.0);
|
glClearDepth(1.0);
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void reshape(GLsizei width, GLsizei height)
|
void reshape(GLsizei width, GLsizei height)
|
||||||
|
17
src/camera.c
17
src/camera.c
@ -108,13 +108,8 @@ void update_camera(Camera* camera, double time)
|
|||||||
} else {
|
} else {
|
||||||
puts("is block");
|
puts("is block");
|
||||||
camera->speed.z = 0;
|
camera->speed.z = 0;
|
||||||
|
float diff = ceil(camera->position.z) - camera->position.z;
|
||||||
while(is_block(camera->cm->chunks[i].blocks[(int)camera->position.x]
|
camera->position.z += diff;
|
||||||
[(int)camera->position.y]
|
|
||||||
[(int)camera->position.z-1])) {
|
|
||||||
camera->position.z+=0.2;
|
|
||||||
print_vec3f(camera->position, "camera");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!is_block(camera->cm->chunks[i].blocks[(int)x1][(int)y1][(int)z1-1])) {
|
if(!is_block(camera->cm->chunks[i].blocks[(int)x1][(int)y1][(int)z1-1])) {
|
||||||
@ -128,12 +123,8 @@ void update_camera(Camera* camera, double time)
|
|||||||
puts("is block");
|
puts("is block");
|
||||||
camera->speed.z = 0;
|
camera->speed.z = 0;
|
||||||
|
|
||||||
while(is_block(camera->cm->chunks[i].blocks[(int)camera->position.x]
|
float diff = ceil(camera->position.z) - camera->position.z;
|
||||||
[(int)camera->position.y]
|
camera->position.z += diff;
|
||||||
[(int)camera->position.z-1])) {
|
|
||||||
camera->position.z+=0.2;
|
|
||||||
print_vec3f(camera->position, "camera");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,15 +95,10 @@ void draw_cube(ChunkManager *cm, Block_type type, float x, float y, float z)
|
|||||||
glTexCoord2f(1, 1); glVertex3f(x+1.0, y-1.0, z-1.0); // Bottom-Left of left face
|
glTexCoord2f(1, 1); glVertex3f(x+1.0, y-1.0, z-1.0); // Bottom-Left of left face
|
||||||
glTexCoord2f(1, 0); glVertex3f(x+1.0, y-1.0, z); // Bottom-Right of left face
|
glTexCoord2f(1, 0); glVertex3f(x+1.0, y-1.0, z); // Bottom-Right of left face
|
||||||
glEnd();
|
glEnd();
|
||||||
glFlush();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void chunk_create_displayl(ChunkManager *cm, Chunk *chunk)
|
void chunk_create_displayl(ChunkManager *cm, Chunk *chunk)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//glBindTexture(GL_TEXTURE_2D, 1);
|
|
||||||
chunk->id = glGenLists(1);
|
chunk->id = glGenLists(1);
|
||||||
glBindTexture(GL_TEXTURE_2D, cm->textures[0].tid);
|
glBindTexture(GL_TEXTURE_2D, cm->textures[0].tid);
|
||||||
glNewList(chunk->id, GL_COMPILE);
|
glNewList(chunk->id, GL_COMPILE);
|
||||||
|
198
src/main.c
198
src/main.c
@ -14,215 +14,21 @@ int main()
|
|||||||
app.cm = &cm;
|
app.cm = &cm;
|
||||||
init_app(&app, 1600, 900);
|
init_app(&app, 1600, 900);
|
||||||
|
|
||||||
/////
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glLoadIdentity();
|
|
||||||
|
|
||||||
glShadeModel(GL_SMOOTH);
|
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
|
||||||
|
|
||||||
glClearDepth(1.0f);
|
|
||||||
glDepthFunc(GL_LEQUAL);
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
|
||||||
//glEnable(GL_CULL_FACE);
|
|
||||||
|
|
||||||
glEnable(GL_NORMALIZE);
|
|
||||||
|
|
||||||
|
|
||||||
GLuint shadowmap_texture;
|
|
||||||
|
|
||||||
float light_proj_matrix[16];
|
|
||||||
float light_view_matrix[16];
|
|
||||||
float cam_proj_matrix[16];
|
|
||||||
float cam_view_matrix[16];
|
|
||||||
|
|
||||||
glGenTextures(1, &shadowmap_texture);
|
|
||||||
glBindTexture(GL_TEXTURE_2D, shadowmap_texture);
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24,
|
|
||||||
SHADOWMAP_SIZE, SHADOWMAP_SIZE, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
|
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
|
|
||||||
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
|
|
||||||
glEnable(GL_COLOR_MATERIAL);
|
|
||||||
|
|
||||||
//GLfloat materialColor[] = {1.0f, 1.0f, 1.0f, 1.0f};
|
|
||||||
//glMaterialfv(GL_FRONT, GL_SPECULAR, materialColor);
|
|
||||||
glMaterialf(GL_FRONT, GL_SHININESS, 64.0f);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//reshape(1600, 900);
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
gluPerspective(45.0f, (float)1600/900, 1.0f, 10000.0f);
|
|
||||||
glGetFloatv(GL_MODELVIEW_MATRIX, cam_proj_matrix);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
glLoadIdentity();
|
|
||||||
gluPerspective(45.0, 1.0, 2.0, 10000.0);
|
|
||||||
glGetFloatv(GL_MODELVIEW_MATRIX, light_proj_matrix);
|
|
||||||
|
|
||||||
glLoadIdentity();
|
|
||||||
gluLookAt(80, 80, 90,
|
|
||||||
20.0, 20.0, 10.0,
|
|
||||||
0.0, 0.0, 1.0);
|
|
||||||
glGetFloatv(GL_MODELVIEW_MATRIX, light_view_matrix);
|
|
||||||
|
|
||||||
glPopMatrix();
|
|
||||||
/////
|
/////
|
||||||
while(app.is_running) {
|
while(app.is_running) {
|
||||||
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
|
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
|
||||||
|
|
||||||
vec3f cd = get_camera_dir_vec3f(&app.camera);
|
|
||||||
vec3f cp = app.camera.position;
|
|
||||||
|
|
||||||
// glLoadIdentity();
|
|
||||||
// gluLookAt(cp.x, cp.y, cp.z,
|
|
||||||
// 10.0, 10.0, 30.0,
|
|
||||||
// 0.0, 0.0, 1.0);
|
|
||||||
set_view(&app.camera);
|
|
||||||
glGetFloatv(GL_MODELVIEW_MATRIX, cam_view_matrix);
|
|
||||||
|
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glLoadMatrixf(light_proj_matrix);
|
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glLoadMatrixf(light_view_matrix);
|
|
||||||
|
|
||||||
glViewport(0, 0, SHADOWMAP_SIZE, SHADOWMAP_SIZE);
|
|
||||||
|
|
||||||
glCullFace(GL_FRONT);
|
|
||||||
|
|
||||||
glShadeModel(GL_FLAT);
|
|
||||||
glColorMask(0, 0, 0, 0);
|
|
||||||
|
|
||||||
for (int i = 0; i < app.cm->chunk_count; i++) {
|
|
||||||
chunk_render(&app.cm->chunks[i]);
|
|
||||||
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
|
||||||
}
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, shadowmap_texture);
|
|
||||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, SHADOWMAP_SIZE, SHADOWMAP_SIZE);
|
|
||||||
|
|
||||||
glCullFace(GL_BACK);
|
|
||||||
//glDisable(GL_CULL_FACE);
|
|
||||||
glShadeModel(GL_SMOOTH);
|
|
||||||
glColorMask(1, 1, 1, 1);
|
|
||||||
|
|
||||||
glClear(GL_DEPTH_BUFFER_BIT);
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glLoadMatrixf(cam_proj_matrix);
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glLoadMatrixf(cam_view_matrix);
|
|
||||||
glViewport(0, 0, 1600, 900);
|
|
||||||
///////////////
|
|
||||||
|
|
||||||
handle_events(&app);
|
handle_events(&app);
|
||||||
update_app(&app);
|
update_app(&app);
|
||||||
|
|
||||||
float color1[4] = {0, 0, 0, 0};
|
set_view(&app.camera);
|
||||||
float color2[4] = {0, 0, 0, 0};
|
|
||||||
float color3[4] = {1.0, 1.0, 1.0, 0.0};
|
|
||||||
float light_pos[4] = {80, 80, 90, 0};
|
|
||||||
glLightfv(GL_LIGHT1, GL_POSITION, light_pos);
|
|
||||||
glLightfv(GL_LIGHT1, GL_AMBIENT, color1);
|
|
||||||
glLightfv(GL_LIGHT1, GL_DIFFUSE, color1);
|
|
||||||
glLightfv(GL_LIGHT1, GL_SPECULAR, color2);
|
|
||||||
glEnable(GL_LIGHT1);
|
|
||||||
glEnable(GL_LIGHTING);
|
|
||||||
|
|
||||||
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
|
|
||||||
//set_view(&app.camera);
|
|
||||||
for (int i = 0; i < app.cm->chunk_count; i++) {
|
for (int i = 0; i < app.cm->chunk_count; i++) {
|
||||||
chunk_render(&app.cm->chunks[i]);
|
chunk_render(&app.cm->chunks[i]);
|
||||||
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
glLightfv(GL_LIGHT1, GL_DIFFUSE, color3);
|
|
||||||
glLightfv(GL_LIGHT1, GL_SPECULAR, color3);
|
|
||||||
float bias[16] = {0.5f, 0.0f, 0.0f, 0.0f,
|
|
||||||
0.0f, 0.5f, 0.0f, 0.0f,
|
|
||||||
0.0f, 0.0f, 0.5f, 0.0f,
|
|
||||||
0.5f, 0.5f, 0.5f, 1.0f};
|
|
||||||
float m1[16];
|
|
||||||
float tm[16];
|
|
||||||
mult_matrix(bias, light_proj_matrix, m1);
|
|
||||||
mult_matrix(m1, light_view_matrix, tm);
|
|
||||||
|
|
||||||
float v1[4] = {tm[0], tm[1], tm[2], tm[3]};
|
|
||||||
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
|
||||||
glTexGenfv(GL_S, GL_EYE_PLANE, v1);
|
|
||||||
glEnable(GL_TEXTURE_GEN_S);
|
|
||||||
float v2[4] = {tm[4], tm[5], tm[6], tm[7]};
|
|
||||||
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
|
||||||
glTexGenfv(GL_T, GL_EYE_PLANE, v2);
|
|
||||||
glEnable(GL_TEXTURE_GEN_T);
|
|
||||||
float v3[4] = {tm[8], tm[9], tm[10], tm[11]};
|
|
||||||
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
|
||||||
glTexGenfv(GL_R, GL_EYE_PLANE, v3);
|
|
||||||
glEnable(GL_TEXTURE_GEN_R);
|
|
||||||
float v4[4] = {tm[12], tm[13], tm[14], tm[15]};
|
|
||||||
glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
|
||||||
glTexGenfv(GL_Q, GL_EYE_PLANE, v4);
|
|
||||||
glEnable(GL_TEXTURE_GEN_Q);
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, shadowmap_texture);
|
|
||||||
glEnable(GL_TEXTURE_2D);
|
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE_ARB, GL_INTENSITY);
|
|
||||||
glAlphaFunc(GL_GEQUAL, 0.99f);
|
|
||||||
glEnable(GL_ALPHA_TEST);
|
|
||||||
|
|
||||||
//glMatrixMode(GL_MODELVIEW);
|
|
||||||
for (int i = 0; i < app.cm->chunk_count; i++) {
|
|
||||||
chunk_render(&app.cm->chunks[i]);
|
|
||||||
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
|
||||||
}
|
|
||||||
|
|
||||||
glDisable(GL_TEXTURE_2D);
|
|
||||||
|
|
||||||
glDisable(GL_TEXTURE_GEN_S);
|
|
||||||
glDisable(GL_TEXTURE_GEN_T);
|
|
||||||
glDisable(GL_TEXTURE_GEN_R);
|
|
||||||
glDisable(GL_TEXTURE_GEN_Q);
|
|
||||||
|
|
||||||
glDisable(GL_LIGHTING);
|
|
||||||
glDisable(GL_ALPHA_TEST);
|
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
gluOrtho2D(-1.0f, 1.0f, -1.0f, 1.0f);
|
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glPopMatrix();
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glPopMatrix();
|
|
||||||
|
|
||||||
glFinish();
|
|
||||||
////////////
|
|
||||||
vec3f pos = app.camera.position;
|
vec3f pos = app.camera.position;
|
||||||
// vec3f dir = get_camera_dir_vec3f(&app.camera);
|
|
||||||
|
|
||||||
// draw_cube(&app, pos.x + dir.x*3, pos.y + dir.y*3, pos.z + dir.z*3);
|
|
||||||
|
|
||||||
SDL_GL_SwapWindow(app.window);
|
SDL_GL_SwapWindow(app.window);
|
||||||
|
|
||||||
|
240
src/main1.c
Normal file
240
src/main1.c
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
#include "../include/app.h"
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <GL/glu.h>
|
||||||
|
|
||||||
|
#define SHADOWMAP_SIZE 2048
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
struct timespec start;
|
||||||
|
struct timespec end;
|
||||||
|
App app;
|
||||||
|
ChunkManager cm;
|
||||||
|
app.cm = &cm;
|
||||||
|
init_app(&app, 1600, 900);
|
||||||
|
|
||||||
|
/////
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||||
|
|
||||||
|
glClearDepth(1.0f);
|
||||||
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
//glEnable(GL_CULL_FACE);
|
||||||
|
|
||||||
|
glEnable(GL_NORMALIZE);
|
||||||
|
|
||||||
|
|
||||||
|
GLuint shadowmap_texture;
|
||||||
|
|
||||||
|
float light_proj_matrix[16];
|
||||||
|
float light_view_matrix[16];
|
||||||
|
float cam_proj_matrix[16];
|
||||||
|
float cam_view_matrix[16];
|
||||||
|
|
||||||
|
glGenTextures(1, &shadowmap_texture);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, shadowmap_texture);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24,
|
||||||
|
SHADOWMAP_SIZE, SHADOWMAP_SIZE, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
|
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
|
||||||
|
glEnable(GL_COLOR_MATERIAL);
|
||||||
|
|
||||||
|
//GLfloat materialColor[] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
|
//glMaterialfv(GL_FRONT, GL_SPECULAR, materialColor);
|
||||||
|
glMaterialf(GL_FRONT, GL_SHININESS, 64.0f);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//reshape(1600, 900);
|
||||||
|
glPushMatrix();
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective(45.0f, (float)1600/900, 1.0f, 10000.0f);
|
||||||
|
glGetFloatv(GL_MODELVIEW_MATRIX, cam_proj_matrix);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective(45.0, 1.0, 2.0, 10000.0);
|
||||||
|
glGetFloatv(GL_MODELVIEW_MATRIX, light_proj_matrix);
|
||||||
|
|
||||||
|
glLoadIdentity();
|
||||||
|
gluLookAt(80, 80, 90,
|
||||||
|
20.0, 20.0, 10.0,
|
||||||
|
0.0, 0.0, 1.0);
|
||||||
|
glGetFloatv(GL_MODELVIEW_MATRIX, light_view_matrix);
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
/////
|
||||||
|
while(app.is_running) {
|
||||||
|
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
|
||||||
|
|
||||||
|
vec3f cd = get_camera_dir_vec3f(&app.camera);
|
||||||
|
vec3f cp = app.camera.position;
|
||||||
|
|
||||||
|
// glLoadIdentity();
|
||||||
|
// gluLookAt(cp.x, cp.y, cp.z,
|
||||||
|
// 10.0, 10.0, 30.0,
|
||||||
|
// 0.0, 0.0, 1.0);
|
||||||
|
set_view(&app.camera);
|
||||||
|
glGetFloatv(GL_MODELVIEW_MATRIX, cam_view_matrix);
|
||||||
|
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadMatrixf(light_proj_matrix);
|
||||||
|
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadMatrixf(light_view_matrix);
|
||||||
|
|
||||||
|
glViewport(0, 0, SHADOWMAP_SIZE, SHADOWMAP_SIZE);
|
||||||
|
|
||||||
|
glCullFace(GL_FRONT);
|
||||||
|
|
||||||
|
glShadeModel(GL_FLAT);
|
||||||
|
glColorMask(0, 0, 0, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < app.cm->chunk_count; i++) {
|
||||||
|
chunk_render(&app.cm->chunks[i]);
|
||||||
|
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, shadowmap_texture);
|
||||||
|
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, SHADOWMAP_SIZE, SHADOWMAP_SIZE);
|
||||||
|
|
||||||
|
glCullFace(GL_BACK);
|
||||||
|
//glDisable(GL_CULL_FACE);
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
glColorMask(1, 1, 1, 1);
|
||||||
|
|
||||||
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadMatrixf(cam_proj_matrix);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadMatrixf(cam_view_matrix);
|
||||||
|
glViewport(0, 0, 1600, 900);
|
||||||
|
///////////////
|
||||||
|
|
||||||
|
handle_events(&app);
|
||||||
|
update_app(&app);
|
||||||
|
|
||||||
|
float color1[4] = {0, 0, 0, 0};
|
||||||
|
float color2[4] = {0, 0, 0, 0};
|
||||||
|
float color3[4] = {1.0, 1.0, 1.0, 0.0};
|
||||||
|
float light_pos[4] = {80, 80, 90, 0};
|
||||||
|
glLightfv(GL_LIGHT1, GL_POSITION, light_pos);
|
||||||
|
glLightfv(GL_LIGHT1, GL_AMBIENT, color1);
|
||||||
|
glLightfv(GL_LIGHT1, GL_DIFFUSE, color1);
|
||||||
|
glLightfv(GL_LIGHT1, GL_SPECULAR, color2);
|
||||||
|
glEnable(GL_LIGHT1);
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
|
||||||
|
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
//set_view(&app.camera);
|
||||||
|
for (int i = 0; i < app.cm->chunk_count; i++) {
|
||||||
|
chunk_render(&app.cm->chunks[i]);
|
||||||
|
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
glLightfv(GL_LIGHT1, GL_DIFFUSE, color3);
|
||||||
|
glLightfv(GL_LIGHT1, GL_SPECULAR, color3);
|
||||||
|
float bias[16] = {0.5f, 0.0f, 0.0f, 0.0f,
|
||||||
|
0.0f, 0.5f, 0.0f, 0.0f,
|
||||||
|
0.0f, 0.0f, 0.5f, 0.0f,
|
||||||
|
0.5f, 0.5f, 0.5f, 1.0f};
|
||||||
|
float m1[16];
|
||||||
|
float tm[16];
|
||||||
|
mult_matrix(bias, light_proj_matrix, m1);
|
||||||
|
mult_matrix(m1, light_view_matrix, tm);
|
||||||
|
|
||||||
|
float v1[4] = {tm[0], tm[1], tm[2], tm[3]};
|
||||||
|
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
||||||
|
glTexGenfv(GL_S, GL_EYE_PLANE, v1);
|
||||||
|
glEnable(GL_TEXTURE_GEN_S);
|
||||||
|
float v2[4] = {tm[4], tm[5], tm[6], tm[7]};
|
||||||
|
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
||||||
|
glTexGenfv(GL_T, GL_EYE_PLANE, v2);
|
||||||
|
glEnable(GL_TEXTURE_GEN_T);
|
||||||
|
float v3[4] = {tm[8], tm[9], tm[10], tm[11]};
|
||||||
|
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
||||||
|
glTexGenfv(GL_R, GL_EYE_PLANE, v3);
|
||||||
|
glEnable(GL_TEXTURE_GEN_R);
|
||||||
|
float v4[4] = {tm[12], tm[13], tm[14], tm[15]};
|
||||||
|
glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
||||||
|
glTexGenfv(GL_Q, GL_EYE_PLANE, v4);
|
||||||
|
glEnable(GL_TEXTURE_GEN_Q);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, shadowmap_texture);
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE_ARB, GL_INTENSITY);
|
||||||
|
glAlphaFunc(GL_GEQUAL, 0.99f);
|
||||||
|
glEnable(GL_ALPHA_TEST);
|
||||||
|
|
||||||
|
//glMatrixMode(GL_MODELVIEW);
|
||||||
|
for (int i = 0; i < app.cm->chunk_count; i++) {
|
||||||
|
chunk_render(&app.cm->chunks[i]);
|
||||||
|
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
glDisable(GL_TEXTURE_GEN_S);
|
||||||
|
glDisable(GL_TEXTURE_GEN_T);
|
||||||
|
glDisable(GL_TEXTURE_GEN_R);
|
||||||
|
glDisable(GL_TEXTURE_GEN_Q);
|
||||||
|
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
glDisable(GL_ALPHA_TEST);
|
||||||
|
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glPushMatrix();
|
||||||
|
glLoadIdentity();
|
||||||
|
gluOrtho2D(-1.0f, 1.0f, -1.0f, 1.0f);
|
||||||
|
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glPushMatrix();
|
||||||
|
glLoadIdentity();
|
||||||
|
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glPopMatrix();
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glFinish();
|
||||||
|
////////////
|
||||||
|
vec3f pos = app.camera.position;
|
||||||
|
// vec3f dir = get_camera_dir_vec3f(&app.camera);
|
||||||
|
|
||||||
|
// draw_cube(&app, pos.x + dir.x*3, pos.y + dir.y*3, pos.z + dir.z*3);
|
||||||
|
|
||||||
|
SDL_GL_SwapWindow(app.window);
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_MONOTONIC_RAW, &end);
|
||||||
|
app.frame_time = calc_frame_time(&start, &end);
|
||||||
|
|
||||||
|
printf("fps: %f\n", 1000/app.frame_time);
|
||||||
|
//printf("lkat pos x: %f y: %f z: %f\n", pos.x+5*dir.x, pos.y+5*dir.y, pos.z+5*dir.z);
|
||||||
|
printf("camera x: %f y: %f z: %f\n", pos.x, pos.y, pos.z);
|
||||||
|
//printf("dir x: %f y: %f z: %f\n", dir.x, dir.y, dir.z);
|
||||||
|
printf("dird x: %f y: %f z: %f\n", app.camera.rotation.x, app.camera.rotation.y, app.camera.rotation.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user