Merge remote-tracking branch 'refs/remotes/raysan5/develop' into develop
This commit is contained in:
commit
1aecd5be07
39 changed files with 1285 additions and 659 deletions
|
|
@ -1,20 +1,20 @@
|
||||||
changelog
|
changelog
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Current Release: raylib 1.5.0 (23 June 2016)
|
Current Release: raylib 1.5.0 (xx June 2016)
|
||||||
|
|
||||||
NOTE: Only versions marked as 'Release' are available in installer, updates are only available as source.
|
NOTE: Only versions marked as 'Release' are available in installer, updates are only available as source.
|
||||||
NOTE: Current Release includes all previous updates.
|
NOTE: Current Release includes all previous updates.
|
||||||
|
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
Release: raylib 1.5.0 (23 June 2016)
|
Release: raylib 1.5.0 (xx June 2016)
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
NOTE:
|
NOTE:
|
||||||
Probably this new version is the biggest boost of the library ever, lots of parts of the library have been redesigned,
|
Probably this new version is the biggest boost of the library ever, lots of parts of the library have been redesigned,
|
||||||
lots of bugs have been solved and some **AMAZING** new features have been added.
|
lots of bugs have been solved and some **AMAZING** new features have been added.
|
||||||
|
|
||||||
HUGE changes:
|
HUGE changes:
|
||||||
[core] OCULUS RIFT CV1: Added support for VR witha bunch of Oculus-specific functions to init/close device and Oculus rendering.
|
[rlgl] OCULUS RIFT CV1: Added support for VR witha bunch of Oculus-specific functions to init/close device and Oculus rendering.
|
||||||
[rlgl] MATERIALS SYSTEM: Added support for Materials (.mtl) and multiple material properties: diffuse, specular, normal.
|
[rlgl] MATERIALS SYSTEM: Added support for Materials (.mtl) and multiple material properties: diffuse, specular, normal.
|
||||||
[rlgl] LIGHTING SYSTEM: Added support for up to 8 lights of 3 different types: Omni, Directional and Spot
|
[rlgl] LIGHTING SYSTEM: Added support for up to 8 lights of 3 different types: Omni, Directional and Spot
|
||||||
[physac] REDESIGNED: Improved performance and simplified usage, physic objects are managed internally
|
[physac] REDESIGNED: Improved performance and simplified usage, physic objects are managed internally
|
||||||
|
|
@ -27,6 +27,7 @@ other changes:
|
||||||
[core] Renamed WorldToScreen() to GetWorldToScreen()
|
[core] Renamed WorldToScreen() to GetWorldToScreen()
|
||||||
[core] Removed function SetCustomCursor()
|
[core] Removed function SetCustomCursor()
|
||||||
[core] Removed functions BeginDrawingEx(), BeginDrawingPro()
|
[core] Removed functions BeginDrawingEx(), BeginDrawingPro()
|
||||||
|
[core] Replaced functions InitDisplay() + InitGraphics() with: InitGraphicsDevice()
|
||||||
[core] Added support for field-of-view Y (fovy) on 3d Camera
|
[core] Added support for field-of-view Y (fovy) on 3d Camera
|
||||||
[core] Added 2D camera mode functions: Begin2dMode() - End2dMode()
|
[core] Added 2D camera mode functions: Begin2dMode() - End2dMode()
|
||||||
[core] Translate mouse inputs to Android touch/gestures internally
|
[core] Translate mouse inputs to Android touch/gestures internally
|
||||||
|
|
@ -36,6 +37,7 @@ other changes:
|
||||||
[rlgl] Improved 2D vs 3D drawing system (lines, triangles, quads)
|
[rlgl] Improved 2D vs 3D drawing system (lines, triangles, quads)
|
||||||
[rlgl] Improved DXT-ETC1 support on HTML5
|
[rlgl] Improved DXT-ETC1 support on HTML5
|
||||||
[rlgl] Review function: rlglUnproject()
|
[rlgl] Review function: rlglUnproject()
|
||||||
|
[rlgl] Removed function: rlglInitGraphics(), integrated into rlglInit()
|
||||||
[rlgl] Updated Mesh and Shader structs
|
[rlgl] Updated Mesh and Shader structs
|
||||||
[rlgl] Simplified internal (default) dynamic buffers
|
[rlgl] Simplified internal (default) dynamic buffers
|
||||||
[rlgl] Added support for indexed and dynamic mesh data
|
[rlgl] Added support for indexed and dynamic mesh data
|
||||||
|
|
@ -65,6 +67,7 @@ other changes:
|
||||||
[models] Updated BoundingBox collision detections
|
[models] Updated BoundingBox collision detections
|
||||||
[models] Added color parameter to DrawBoundigBox()
|
[models] Added color parameter to DrawBoundigBox()
|
||||||
[models] Removed function: DrawQuad()
|
[models] Removed function: DrawQuad()
|
||||||
|
[models] Removed function: SetModelTexture()
|
||||||
[models] Redesigned DrawPlane() to use RL_TRIANGLES
|
[models] Redesigned DrawPlane() to use RL_TRIANGLES
|
||||||
[models] Redesigned DrawRectangleV() to use RL_TRIANGLES
|
[models] Redesigned DrawRectangleV() to use RL_TRIANGLES
|
||||||
[models] Redesign to accomodate new materials system: LoadMaterial()
|
[models] Redesign to accomodate new materials system: LoadMaterial()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<img src="http://www.raylib.com/img/fb_raylib_logo.png" width=256>
|
<img src="https://github.com/raysan5/raylib/blob/master/logo/logo256x256.png" width=256>
|
||||||
|
|
||||||
about
|
about
|
||||||
-----
|
-----
|
||||||
|
|
|
||||||
|
|
@ -78,44 +78,38 @@ endif
|
||||||
#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
|
#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
|
||||||
|
|
||||||
# define any directories containing required header files
|
# define any directories containing required header files
|
||||||
|
INCLUDES = -I. -I../src -I../src/external
|
||||||
|
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
INCLUDES = -I. -I../../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
|
INCLUDES += -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
# add standard directories for GNU/Linux
|
# add standard directories for GNU/Linux
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
INCLUDES = -I. -I../src -I/usr/local/include/raylib/
|
INCLUDES += -I/usr/local/include/raylib/
|
||||||
else ifeq ($(PLATFORM_OS),OSX)
|
else ifeq ($(PLATFORM_OS),WINDOWS)
|
||||||
INCLUDES = -I. -I../src
|
|
||||||
else
|
|
||||||
INCLUDES = -I. -I../../src -IC:/raylib/raylib/src
|
|
||||||
# external libraries headers
|
# external libraries headers
|
||||||
# GLFW3
|
# GLFW3
|
||||||
INCLUDES += -I../../external/glfw3/include
|
INCLUDES += -I../src/external/glfw3/include
|
||||||
# OpenAL Soft
|
# OpenAL Soft
|
||||||
INCLUDES += -I../../external/openal_soft/include
|
INCLUDES += -I../src/external/openal_soft/include
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# define library paths containing required libs
|
# define library paths containing required libs
|
||||||
|
LFLAGS = -L. -L../src
|
||||||
|
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
LFLAGS = -L. -L../../src -L/opt/vc/lib
|
LFLAGS += -L/opt/vc/lib
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
# add standard directories for GNU/Linux
|
# add standard directories for GNU/Linux
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||||
LFLAGS = -L. -L../../src
|
|
||||||
else ifeq ($(PLATFORM_OS),OSX)
|
|
||||||
LFLAGS = -L. -L../src
|
|
||||||
else
|
|
||||||
LFLAGS = -L. -L../../src -LC:/raylib/raylib/src
|
|
||||||
# external libraries to link with
|
# external libraries to link with
|
||||||
# GLFW3
|
# GLFW3
|
||||||
LFLAGS += -L../../external/glfw3/lib/$(LIBPATH)
|
LFLAGS += -L../src/external/glfw3/lib/$(LIBPATH)
|
||||||
ifneq ($(PLATFORM_OS),OSX)
|
|
||||||
# OpenAL Soft
|
# OpenAL Soft
|
||||||
LFLAGS += -L../../external/openal_soft/lib/$(LIBPATH)
|
LFLAGS += -L../src/external/openal_soft/lib/$(LIBPATH)
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
@ -148,7 +142,7 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
# just adjust the correct path to libraylib.bc
|
# just adjust the correct path to libraylib.bc
|
||||||
LIBS = ../src/libraylib.bc
|
LIBS = ../release/html5/libraylib.bc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# define additional parameters and flags for windows
|
# define additional parameters and flags for windows
|
||||||
|
|
@ -178,6 +172,9 @@ EXAMPLES = \
|
||||||
core_3d_picking \
|
core_3d_picking \
|
||||||
core_3d_camera_free \
|
core_3d_camera_free \
|
||||||
core_3d_camera_first_person \
|
core_3d_camera_first_person \
|
||||||
|
core_2d_camera \
|
||||||
|
core_world_screen \
|
||||||
|
core_oculus_rift \
|
||||||
shapes_logo_raylib \
|
shapes_logo_raylib \
|
||||||
shapes_basic_shapes \
|
shapes_basic_shapes \
|
||||||
shapes_colors_palette \
|
shapes_colors_palette \
|
||||||
|
|
@ -208,6 +205,7 @@ EXAMPLES = \
|
||||||
shaders_shapes_textures \
|
shaders_shapes_textures \
|
||||||
shaders_custom_uniform \
|
shaders_custom_uniform \
|
||||||
shaders_postprocessing \
|
shaders_postprocessing \
|
||||||
|
shaders_standard_lighting \
|
||||||
audio_sound_loading \
|
audio_sound_loading \
|
||||||
audio_music_stream \
|
audio_music_stream \
|
||||||
fix_dylib \
|
fix_dylib \
|
||||||
|
|
@ -287,7 +285,19 @@ core_3d_camera_free: core_3d_camera_free.c
|
||||||
# compile [core] example - 3d camera first person
|
# compile [core] example - 3d camera first person
|
||||||
core_3d_camera_first_person: core_3d_camera_first_person.c
|
core_3d_camera_first_person: core_3d_camera_first_person.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
|
# compile [core] example - 2d camera
|
||||||
|
core_2d_camera: core_2d_camera.c
|
||||||
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
|
# compile [core] example - world screen
|
||||||
|
core_world_screen: core_world_screen.c
|
||||||
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
|
# compile [core] example - oculus rift
|
||||||
|
core_oculus_rift: core_oculus_rift.c
|
||||||
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
# compile [shapes] example - raylib logo (with basic shapes)
|
# compile [shapes] example - raylib logo (with basic shapes)
|
||||||
shapes_logo_raylib: shapes_logo_raylib.c
|
shapes_logo_raylib: shapes_logo_raylib.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
@ -411,7 +421,11 @@ shaders_custom_uniform: shaders_custom_uniform.c
|
||||||
# compile [shaders] example - postprocessing shader
|
# compile [shaders] example - postprocessing shader
|
||||||
shaders_postprocessing: shaders_postprocessing.c
|
shaders_postprocessing: shaders_postprocessing.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
|
# compile [shaders] example - standard lighting
|
||||||
|
shaders_standard_lighting: shaders_standard_lighting.c
|
||||||
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
# compile [audio] example - sound loading and playing (WAV and OGG)
|
# compile [audio] example - sound loading and playing (WAV and OGG)
|
||||||
audio_sound_loading: audio_sound_loading.c
|
audio_sound_loading: audio_sound_loading.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ int main()
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
InitAudioDevice(); // Initialize audio device
|
||||||
|
|
||||||
PlayMusicStream("resources/audio/guitar_noodling.ogg"); // Play music stream
|
PlayMusicStream(0, "resources/audio/guitar_noodling.ogg"); // Play music stream
|
||||||
|
|
||||||
int framesCounter = 0;
|
int framesCounter = 0;
|
||||||
float timePlayed = 0.0f;
|
float timePlayed = 0.0f;
|
||||||
|
|
@ -52,18 +52,18 @@ int main()
|
||||||
{
|
{
|
||||||
volume = 1.0;
|
volume = 1.0;
|
||||||
framesCounter = 0;
|
framesCounter = 0;
|
||||||
PlayMusicStream("resources/audio/another_file.ogg");
|
PlayMusicStream(1, "resources/audio/another_file.ogg");
|
||||||
}
|
}
|
||||||
|
|
||||||
SetMusicVolume(volume);
|
SetMusicVolume(volume);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if (IsWindowMinimized()) PauseMusicStream();
|
if (IsWindowMinimized()) PauseMusicStream(0);
|
||||||
else ResumeMusicStream();
|
else ResumeMusicStream(0);
|
||||||
|
|
||||||
timePlayed = GetMusicTimePlayed()/GetMusicTimeLength()*100*4; // We scale by 4 to fit 400 pixels
|
timePlayed = GetMusicTimePlayed(0)/GetMusicTimeLength(0)*100*4; // We scale by 4 to fit 400 pixels
|
||||||
|
|
||||||
UpdateMusicStream(); // Update music buffer with new stream data
|
UpdateMusicStream(0); // Update music buffer with new stream data
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,8 @@ int main()
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera");
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera");
|
||||||
|
|
||||||
Rectangle player = { 400, 280, 40, 40 };
|
Rectangle player = { 400, 280, 40, 40 };
|
||||||
Rectangle buildings[MAX_BUILDINGS] = { 0, 0, 0, 0 };
|
Rectangle buildings[MAX_BUILDINGS];
|
||||||
Color buildColors[MAX_BUILDINGS] = { 80, 80, 80, 255 };
|
Color buildColors[MAX_BUILDINGS];
|
||||||
|
|
||||||
int spacing = 0;
|
int spacing = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ int main()
|
||||||
// Initialization
|
// Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
int screenWidth = 800;
|
int screenWidth = 800;
|
||||||
int screenHeight = 400;
|
int screenHeight = 450;
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - color selection (collision detection)");
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - color selection (collision detection)");
|
||||||
|
|
||||||
|
|
@ -30,7 +30,7 @@ int main()
|
||||||
for (int i = 0; i < 21; i++)
|
for (int i = 0; i < 21; i++)
|
||||||
{
|
{
|
||||||
colorsRecs[i].x = 20 + 100*(i%7) + 10*(i%7);
|
colorsRecs[i].x = 20 + 100*(i%7) + 10*(i%7);
|
||||||
colorsRecs[i].y = 40 + 100*(i/7) + 10*(i/7);
|
colorsRecs[i].y = 60 + 100*(i/7) + 10*(i/7);
|
||||||
colorsRecs[i].width = 100;
|
colorsRecs[i].width = 100;
|
||||||
colorsRecs[i].height = 100;
|
colorsRecs[i].height = 100;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,11 +30,11 @@ int main()
|
||||||
camera.position = (Vector3){ 5.0f, 5.0f, 5.0f }; // Camera position
|
camera.position = (Vector3){ 5.0f, 5.0f, 5.0f }; // Camera position
|
||||||
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
||||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
||||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
camera.fovy = 60.0f; // Camera field-of-view Y
|
||||||
|
|
||||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
//SetTargetFPS(90); // Set our game to run at 90 frames-per-second
|
SetTargetFPS(90); // Set our game to run at 90 frames-per-second
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Main game loop
|
// Main game loop
|
||||||
|
|
@ -43,31 +43,30 @@ int main()
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
UpdateOculusTracking();
|
UpdateOculusTracking();
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_SPACE)) ToggleVR();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
BeginOculusDrawing();
|
if (IsOculusReady()) BeginOculusDrawing();
|
||||||
|
|
||||||
for (int eye = 0; eye < 2; eye++)
|
Begin3dMode(camera);
|
||||||
{
|
|
||||||
Begin3dMode(camera);
|
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
||||||
|
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
||||||
|
|
||||||
SetOculusMatrix(eye);
|
DrawGrid(10, 1.0f);
|
||||||
|
|
||||||
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
|
||||||
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
|
||||||
|
|
||||||
DrawGrid(10, 1.0f);
|
|
||||||
|
|
||||||
End3dMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
EndOculusDrawing();
|
End3dMode();
|
||||||
|
|
||||||
|
if (IsOculusReady()) EndOculusDrawing();
|
||||||
|
|
||||||
|
DrawFPS(10, 10);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,6 @@ int main()
|
||||||
|
|
||||||
DrawText("Enemy: 100 / 100", cubeScreenPosition.x - MeasureText("Enemy: 100 / 100", 20) / 2, cubeScreenPosition.y, 20, BLACK);
|
DrawText("Enemy: 100 / 100", cubeScreenPosition.x - MeasureText("Enemy: 100 / 100", 20) / 2, cubeScreenPosition.y, 20, BLACK);
|
||||||
DrawText("Text is always on top of the cube", (screenWidth - MeasureText("Text is always on top of the cube", 20)) / 2, 25, 20, GRAY);
|
DrawText("Text is always on top of the cube", (screenWidth - MeasureText("Text is always on top of the cube", 20)) / 2, 25, 20, GRAY);
|
||||||
|
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ int main()
|
||||||
|
|
||||||
// NOTE: By default each cube is mapped to one part of texture atlas
|
// NOTE: By default each cube is mapped to one part of texture atlas
|
||||||
Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture
|
Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture
|
||||||
SetModelTexture(&map, texture); // Bind texture to map model
|
map.material.texDiffuse = texture; // Set map diffuse texture
|
||||||
|
|
||||||
Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position
|
Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ int main()
|
||||||
Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM)
|
Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM)
|
||||||
Texture2D texture = LoadTextureFromImage(image); // Convert image to texture (VRAM)
|
Texture2D texture = LoadTextureFromImage(image); // Convert image to texture (VRAM)
|
||||||
Model map = LoadHeightmap(image, (Vector3){ 16, 8, 16 }); // Load heightmap model with defined size
|
Model map = LoadHeightmap(image, (Vector3){ 16, 8, 16 }); // Load heightmap model with defined size
|
||||||
SetModelTexture(&map, texture); // Bind texture to model
|
map.material.texDiffuse = texture; // Set map diffuse texture
|
||||||
Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!)
|
Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!)
|
||||||
|
|
||||||
UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM
|
UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ int main()
|
||||||
|
|
||||||
Model dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
|
Model dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
|
||||||
Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture
|
Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture
|
||||||
SetModelTexture(&dwarf, texture); // Bind texture to model
|
dwarf.material.texDiffuse = texture; // Set dwarf model diffuse texture
|
||||||
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
|
|
|
||||||
|
|
@ -96,11 +96,19 @@ int main(void)
|
||||||
|
|
||||||
// Initialize rlgl internal buffers and OpenGL state
|
// Initialize rlgl internal buffers and OpenGL state
|
||||||
rlglInit();
|
rlglInit();
|
||||||
rlglInitGraphics(0, 0, screenWidth, screenHeight);
|
|
||||||
rlClearColor(245, 245, 245, 255); // Define clear color
|
|
||||||
rlEnableDepthTest(); // Enable DEPTH_TEST for 3D
|
|
||||||
|
|
||||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
// Initialize viewport and internal projection/modelview matrices
|
||||||
|
rlViewport(0, 0, screenWidth, screenHeight);
|
||||||
|
rlMatrixMode(RL_PROJECTION); // Switch to PROJECTION matrix
|
||||||
|
rlLoadIdentity(); // Reset current matrix (PROJECTION)
|
||||||
|
rlOrtho(0, screenWidth, screenHeight, 0, 0.0f, 1.0f); // Orthographic projection with top-left corner at (0,0)
|
||||||
|
rlMatrixMode(RL_MODELVIEW); // Switch back to MODELVIEW matrix
|
||||||
|
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
|
||||||
|
|
||||||
|
rlClearColor(245, 245, 245, 255); // Define clear color
|
||||||
|
rlEnableDepthTest(); // Enable DEPTH_TEST for 3D
|
||||||
|
|
||||||
|
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; // Cube default position (center)
|
||||||
|
|
||||||
Camera camera;
|
Camera camera;
|
||||||
camera.position = (Vector3){ 5.0f, 5.0f, 5.0f }; // Camera position
|
camera.position = (Vector3){ 5.0f, 5.0f, 5.0f }; // Camera position
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ int main(void)
|
||||||
|
|
||||||
rlMatrixMode(RL_PROJECTION); // Enable internal projection matrix
|
rlMatrixMode(RL_PROJECTION); // Enable internal projection matrix
|
||||||
rlLoadIdentity(); // Reset internal projection matrix
|
rlLoadIdentity(); // Reset internal projection matrix
|
||||||
rlOrtho(0.0, screenWidth, screenHeight, 0.0, 0.0, 1.0); // Recalculate internal projection matrix
|
rlOrtho(0.0, screenWidth/2, screenHeight, 0.0, 0.0, 1.0); // Recalculate internal projection matrix
|
||||||
rlMatrixMode(RL_MODELVIEW); // Enable internal modelview matrix
|
rlMatrixMode(RL_MODELVIEW); // Enable internal modelview matrix
|
||||||
rlLoadIdentity(); // Reset internal modelview matrix
|
rlLoadIdentity(); // Reset internal modelview matrix
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
66
examples/resources/shaders/glsl100/distortion.fs
Normal file
66
examples/resources/shaders/glsl100/distortion.fs
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
// Input vertex attributes (from vertex shader)
|
||||||
|
varying vec2 fragTexCoord;
|
||||||
|
|
||||||
|
// Input uniform values
|
||||||
|
uniform sampler2D texture0;
|
||||||
|
|
||||||
|
// NOTE: Add here your custom variables
|
||||||
|
const vec2 LeftLensCenter = vec2(0.2863248, 0.5);
|
||||||
|
const vec2 RightLensCenter = vec2(0.7136753, 0.5);
|
||||||
|
const vec2 LeftScreenCenter = vec2(0.25, 0.5);
|
||||||
|
const vec2 RightScreenCenter = vec2(0.75, 0.5);
|
||||||
|
const vec2 Scale = vec2(0.25, 0.45); //vec2(0.1469278, 0.2350845);
|
||||||
|
const vec2 ScaleIn = vec2(4, 2.2222);
|
||||||
|
const vec4 HmdWarpParam = vec4(1, 0.22, 0.24, 0);
|
||||||
|
const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Another set of default values
|
||||||
|
ChromaAbCorrection = {1.0, 0.0, 1.0, 0}
|
||||||
|
DistortionK = {1.0, 0.22, 0.24, 0}
|
||||||
|
Scale = {0.25, 0.5*AspectRatio, 0, 0}
|
||||||
|
ScaleIn = {4.0, 2/AspectRatio, 0, 0}
|
||||||
|
Left Screen Center = {0.25, 0.5, 0, 0}
|
||||||
|
Left Lens Center = {0.287994117, 0.5, 0, 0}
|
||||||
|
Right Screen Center = {0.75, 0.5, 0, 0}
|
||||||
|
Right Lens Center = {0.712005913, 0.5, 0, 0}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// The following two variables need to be set per eye
|
||||||
|
vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter;
|
||||||
|
vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter;
|
||||||
|
|
||||||
|
// Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter)
|
||||||
|
vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1]
|
||||||
|
float rSq = theta.x*theta.x + theta.y*theta.y;
|
||||||
|
vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq);
|
||||||
|
//vec2 tc = LensCenter + Scale*theta1;
|
||||||
|
|
||||||
|
// Detect whether blue texture coordinates are out of range since these will scaled out the furthest
|
||||||
|
vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq);
|
||||||
|
vec2 tcBlue = LensCenter + Scale*thetaBlue;
|
||||||
|
|
||||||
|
if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Do blue texture lookup
|
||||||
|
float blue = texture2D(texture0, tcBlue).b;
|
||||||
|
|
||||||
|
// Do green lookup (no scaling)
|
||||||
|
vec2 tcGreen = LensCenter + Scale*theta1;
|
||||||
|
float green = texture2D(texture0, tcGreen).g;
|
||||||
|
|
||||||
|
// Do red scale and lookup
|
||||||
|
vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq);
|
||||||
|
vec2 tcRed = LensCenter + Scale*thetaRed;
|
||||||
|
float red = texture2D(texture0, tcRed).r;
|
||||||
|
|
||||||
|
gl_FragColor = vec4(red, green, blue, 1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
69
examples/resources/shaders/glsl330/distortion.fs
Normal file
69
examples/resources/shaders/glsl330/distortion.fs
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
// Input vertex attributes (from vertex shader)
|
||||||
|
in vec2 fragTexCoord;
|
||||||
|
|
||||||
|
// Input uniform values
|
||||||
|
uniform sampler2D texture0;
|
||||||
|
|
||||||
|
// Output fragment color
|
||||||
|
out vec4 finalColor;
|
||||||
|
|
||||||
|
// NOTE: Add here your custom variables
|
||||||
|
const vec2 LeftLensCenter = vec2(0.288, 0.5);
|
||||||
|
const vec2 RightLensCenter = vec2(0.712, 0.5);
|
||||||
|
const vec2 LeftScreenCenter = vec2(0.25, 0.5);
|
||||||
|
const vec2 RightScreenCenter = vec2(0.75, 0.5);
|
||||||
|
uniform vec2 Scale = vec2(0.25, 0.45); //vec2(0.1469278, 0.2350845);
|
||||||
|
uniform vec2 ScaleIn = vec2(4, 2.2222);
|
||||||
|
|
||||||
|
const vec4 HmdWarpParam = vec4(1, 0.22, 0.24, 0);
|
||||||
|
const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Another set of default values
|
||||||
|
ChromaAbCorrection = {1.0, 0.0, 1.0, 0}
|
||||||
|
DistortionK = {1.0, 0.22, 0.24, 0}
|
||||||
|
Scale = {0.25, 0.5*AspectRatio, 0, 0}
|
||||||
|
ScaleIn = {4.0, 2/AspectRatio, 0, 0}
|
||||||
|
Left Screen Center = {0.25, 0.5, 0, 0}
|
||||||
|
Left Lens Center = {0.287994117, 0.5, 0, 0}
|
||||||
|
Right Screen Center = {0.75, 0.5, 0, 0}
|
||||||
|
Right Lens Center = {0.712005913, 0.5, 0, 0}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// The following two variables need to be set per eye
|
||||||
|
vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter;
|
||||||
|
vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter;
|
||||||
|
|
||||||
|
// Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter)
|
||||||
|
vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1]
|
||||||
|
float rSq = theta.x*theta.x + theta.y*theta.y;
|
||||||
|
vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq);
|
||||||
|
//vec2 tc = LensCenter + Scale*theta1;
|
||||||
|
|
||||||
|
// Detect whether blue texture coordinates are out of range since these will scaled out the furthest
|
||||||
|
vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq);
|
||||||
|
vec2 tcBlue = LensCenter + Scale*thetaBlue;
|
||||||
|
|
||||||
|
if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) finalColor = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Do blue texture lookup
|
||||||
|
float blue = texture(texture0, tcBlue).b;
|
||||||
|
|
||||||
|
// Do green lookup (no scaling)
|
||||||
|
vec2 tcGreen = LensCenter + Scale*theta1;
|
||||||
|
float green = texture(texture0, tcGreen).g;
|
||||||
|
|
||||||
|
// Do red scale and lookup
|
||||||
|
vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq);
|
||||||
|
vec2 tcRed = LensCenter + Scale*thetaRed;
|
||||||
|
float red = texture(texture0, tcRed).r;
|
||||||
|
|
||||||
|
finalColor = vec4(red, green, blue, 1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ int main()
|
||||||
|
|
||||||
Model dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
|
Model dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
|
||||||
Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture (diffuse map)
|
Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture (diffuse map)
|
||||||
SetModelTexture(&dwarf, texture); // Bind texture to model
|
dwarf.material.texDiffuse = texture; // Set dwarf model diffuse texture
|
||||||
|
|
||||||
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ int main()
|
||||||
|
|
||||||
Model dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
|
Model dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
|
||||||
Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture (diffuse map)
|
Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture (diffuse map)
|
||||||
SetModelTexture(&dwarf, texture); // Bind texture to model
|
dwarf.material.texDiffuse = texture; // Set dwarf model diffuse texture
|
||||||
|
|
||||||
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -202,8 +202,8 @@ int main()
|
||||||
camera = (Camera){{ 0.0, 12.0, 15.0 }, { 0.0, 3.0, 0.0 }, { 0.0, 1.0, 0.0 }};
|
camera = (Camera){{ 0.0, 12.0, 15.0 }, { 0.0, 3.0, 0.0 }, { 0.0, 1.0, 0.0 }};
|
||||||
|
|
||||||
catTexture = LoadTexture("resources/catsham.png"); // Load model texture
|
catTexture = LoadTexture("resources/catsham.png"); // Load model texture
|
||||||
cat = LoadModel("resources/cat.obj"); // Load OBJ model
|
cat = LoadModel("resources/cat.obj"); // Load OBJ model
|
||||||
SetModelTexture(&cat, catTexture);
|
cat.material.texDiffuse = texture; // Set cat model diffuse texture
|
||||||
|
|
||||||
fxWav = LoadSound("resources/audio/weird.wav"); // Load WAV audio file
|
fxWav = LoadSound("resources/audio/weird.wav"); // Load WAV audio file
|
||||||
fxOgg = LoadSound("resources/audio/tanatana.ogg"); // Load OGG audio file
|
fxOgg = LoadSound("resources/audio/tanatana.ogg"); // Load OGG audio file
|
||||||
|
|
|
||||||
155
shaders/glsl100/standard.fs
Normal file
155
shaders/glsl100/standard.fs
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
varying vec3 fragPosition;
|
||||||
|
varying vec2 fragTexCoord;
|
||||||
|
varying vec4 fragColor;
|
||||||
|
varying vec3 fragNormal;
|
||||||
|
|
||||||
|
uniform sampler2D texture0;
|
||||||
|
uniform sampler2D texture1;
|
||||||
|
uniform sampler2D texture2;
|
||||||
|
|
||||||
|
uniform vec4 colAmbient;
|
||||||
|
uniform vec4 colDiffuse;
|
||||||
|
uniform vec4 colSpecular;
|
||||||
|
uniform float glossiness;
|
||||||
|
|
||||||
|
uniform int useNormal;
|
||||||
|
uniform int useSpecular;
|
||||||
|
|
||||||
|
uniform mat4 modelMatrix;
|
||||||
|
uniform vec3 viewDir;
|
||||||
|
|
||||||
|
struct Light {
|
||||||
|
int enabled;
|
||||||
|
int type;
|
||||||
|
vec3 position;
|
||||||
|
vec3 direction;
|
||||||
|
vec4 diffuse;
|
||||||
|
float intensity;
|
||||||
|
float radius;
|
||||||
|
float coneAngle;
|
||||||
|
};
|
||||||
|
|
||||||
|
const int maxLights = 8;
|
||||||
|
uniform int lightsCount;
|
||||||
|
uniform Light lights[maxLights];
|
||||||
|
|
||||||
|
vec3 CalcPointLight(Light l, vec3 n, vec3 v, float s)
|
||||||
|
{
|
||||||
|
vec3 surfacePos = vec3(modelMatrix*vec4(fragPosition, 1));
|
||||||
|
vec3 surfaceToLight = l.position - surfacePos;
|
||||||
|
|
||||||
|
// Diffuse shading
|
||||||
|
float brightness = clamp(dot(n, surfaceToLight)/(length(surfaceToLight)*length(n)), 0, 1);
|
||||||
|
float diff = 1.0/dot(surfaceToLight/l.radius, surfaceToLight/l.radius)*brightness*l.intensity;
|
||||||
|
|
||||||
|
// Specular shading
|
||||||
|
float spec = 0.0;
|
||||||
|
if (diff > 0.0)
|
||||||
|
{
|
||||||
|
vec3 h = normalize(-l.direction + v);
|
||||||
|
spec = pow(dot(n, h), 3 + glossiness)*s;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (diff*l.diffuse.rgb + spec*colSpecular.rgb);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 CalcDirectionalLight(Light l, vec3 n, vec3 v, float s)
|
||||||
|
{
|
||||||
|
vec3 lightDir = normalize(-l.direction);
|
||||||
|
|
||||||
|
// Diffuse shading
|
||||||
|
float diff = clamp(dot(n, lightDir), 0.0, 1.0)*l.intensity;
|
||||||
|
|
||||||
|
// Specular shading
|
||||||
|
float spec = 0.0;
|
||||||
|
if (diff > 0.0)
|
||||||
|
{
|
||||||
|
vec3 h = normalize(lightDir + v);
|
||||||
|
spec = pow(dot(n, h), 3 + glossiness)*s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Combine results
|
||||||
|
return (diff*l.intensity*l.diffuse.rgb + spec*colSpecular.rgb);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 CalcSpotLight(Light l, vec3 n, vec3 v, float s)
|
||||||
|
{
|
||||||
|
vec3 surfacePos = vec3(modelMatrix*vec4(fragPosition, 1));
|
||||||
|
vec3 lightToSurface = normalize(surfacePos - l.position);
|
||||||
|
vec3 lightDir = normalize(-l.direction);
|
||||||
|
|
||||||
|
// Diffuse shading
|
||||||
|
float diff = clamp(dot(n, lightDir), 0.0, 1.0)*l.intensity;
|
||||||
|
|
||||||
|
// Spot attenuation
|
||||||
|
float attenuation = clamp(dot(n, lightToSurface), 0.0, 1.0);
|
||||||
|
attenuation = dot(lightToSurface, -lightDir);
|
||||||
|
|
||||||
|
float lightToSurfaceAngle = degrees(acos(attenuation));
|
||||||
|
if (lightToSurfaceAngle > l.coneAngle) attenuation = 0.0;
|
||||||
|
|
||||||
|
float falloff = (l.coneAngle - lightToSurfaceAngle)/l.coneAngle;
|
||||||
|
|
||||||
|
// Combine diffuse and attenuation
|
||||||
|
float diffAttenuation = diff*attenuation;
|
||||||
|
|
||||||
|
// Specular shading
|
||||||
|
float spec = 0.0;
|
||||||
|
if (diffAttenuation > 0.0)
|
||||||
|
{
|
||||||
|
vec3 h = normalize(lightDir + v);
|
||||||
|
spec = pow(dot(n, h), 3 + glossiness)*s;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (falloff*(diffAttenuation*l.diffuse.rgb + spec*colSpecular.rgb));
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// Calculate fragment normal in screen space
|
||||||
|
// NOTE: important to multiply model matrix by fragment normal to apply model transformation (rotation and scale)
|
||||||
|
mat3 normalMatrix = transpose(inverse(mat3(modelMatrix)));
|
||||||
|
vec3 normal = normalize(normalMatrix*fragNormal);
|
||||||
|
|
||||||
|
// Normalize normal and view direction vectors
|
||||||
|
vec3 n = normalize(normal);
|
||||||
|
vec3 v = normalize(viewDir);
|
||||||
|
|
||||||
|
// Calculate diffuse texture color fetching
|
||||||
|
vec4 texelColor = texture2D(texture0, fragTexCoord);
|
||||||
|
vec3 lighting = colAmbient.rgb;
|
||||||
|
|
||||||
|
// Calculate normal texture color fetching or set to maximum normal value by default
|
||||||
|
if (useNormal == 1)
|
||||||
|
{
|
||||||
|
n *= texture2D(texture1, fragTexCoord).rgb;
|
||||||
|
n = normalize(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate specular texture color fetching or set to maximum specular value by default
|
||||||
|
float spec = 1.0;
|
||||||
|
if (useSpecular == 1) spec *= normalize(texture2D(texture2, fragTexCoord).r);
|
||||||
|
|
||||||
|
for (int i = 0; i < lightsCount; i++)
|
||||||
|
{
|
||||||
|
// Check if light is enabled
|
||||||
|
if (lights[i].enabled == 1)
|
||||||
|
{
|
||||||
|
// Calculate lighting based on light type
|
||||||
|
switch (lights[i].type)
|
||||||
|
{
|
||||||
|
case 0: lighting += CalcPointLight(lights[i], n, v, spec); break;
|
||||||
|
case 1: lighting += CalcDirectionalLight(lights[i], n, v, spec); break;
|
||||||
|
case 2: lighting += CalcSpotLight(lights[i], n, v, spec); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate final fragment color
|
||||||
|
gl_FragColor = vec4(texelColor.rgb*lighting*colDiffuse.rgb, texelColor.a*colDiffuse.a);
|
||||||
|
}
|
||||||
23
shaders/glsl100/standard.vs
Normal file
23
shaders/glsl100/standard.vs
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
attribute vec3 vertexPosition;
|
||||||
|
attribute vec3 vertexNormal;
|
||||||
|
attribute vec2 vertexTexCoord;
|
||||||
|
attribute vec4 vertexColor;
|
||||||
|
|
||||||
|
varying vec3 fragPosition;
|
||||||
|
varying vec2 fragTexCoord;
|
||||||
|
varying vec4 fragColor;
|
||||||
|
varying vec3 fragNormal;
|
||||||
|
|
||||||
|
uniform mat4 mvpMatrix;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
fragPosition = vertexPosition;
|
||||||
|
fragTexCoord = vertexTexCoord;
|
||||||
|
fragColor = vertexColor;
|
||||||
|
fragNormal = vertexNormal;
|
||||||
|
|
||||||
|
gl_Position = mvpMatrix*vec4(vertexPosition, 1.0);
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue