two main functions, one for testing??

This commit is contained in:
koma 2022-05-04 15:22:55 +02:00
parent 5f5c660190
commit b4a7ec7cc3
5 changed files with 248 additions and 216 deletions

View File

@ -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)

View File

@ -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");
}
} }
} }

View File

@ -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);

View File

@ -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
View 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;
}