Update web examples -WORK IN PROGRESS-
This commit is contained in:
parent
0a33fbf8bb
commit
e6ed85e993
70 changed files with 1204427 additions and 1274472 deletions
|
@ -25,6 +25,9 @@ int screenHeight = 450;
|
||||||
|
|
||||||
int framesCounter = 0;
|
int framesCounter = 0;
|
||||||
float timePlayed = 0.0f;
|
float timePlayed = 0.0f;
|
||||||
|
static bool pause = false;
|
||||||
|
|
||||||
|
Music music;
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Declaration
|
// Module Functions Declaration
|
||||||
|
@ -42,7 +45,9 @@ int main()
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
InitAudioDevice(); // Initialize audio device
|
||||||
|
|
||||||
PlayMusicStream(0, "resources/audio/guitar_noodling.ogg"); // Play music stream
|
music = LoadMusicStream("resources/audio/guitar_noodling.ogg");
|
||||||
|
|
||||||
|
PlayMusicStream(music);
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
@ -59,6 +64,8 @@ int main()
|
||||||
|
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
UnloadMusicStream(music); // Unload music stream buffers from RAM
|
||||||
|
|
||||||
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
||||||
CloseWindow(); // Close window and OpenGL context
|
CloseWindow(); // Close window and OpenGL context
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
@ -73,33 +80,26 @@ void UpdateDrawFrame(void)
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
framesCounter++;
|
UpdateMusicStream(music); // Update music buffer with new stream data
|
||||||
|
|
||||||
// Testing music fading from one file to another
|
// Restart music playing (stop and play)
|
||||||
/*
|
if (IsKeyPressed(KEY_SPACE))
|
||||||
if (framesCounter > 600) // Wait for 10 seconds (600 frames)
|
{
|
||||||
{
|
StopMusicStream(music);
|
||||||
volume -= 0.01; // Decrement music volume level
|
PlayMusicStream(music);
|
||||||
|
}
|
||||||
// When music volume level equal or lower than 0,
|
|
||||||
// restore volume level and init another music file
|
|
||||||
if (volume <= 0)
|
|
||||||
{
|
|
||||||
volume = 1.0;
|
|
||||||
framesCounter = 0;
|
|
||||||
PlayMusicStream(1, "resources/audio/another_file.ogg");
|
|
||||||
}
|
|
||||||
|
|
||||||
SetMusicVolume(volume);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (IsWindowMinimized()) PauseMusicStream(0);
|
// Pause/Resume music playing
|
||||||
else ResumeMusicStream(0);
|
if (IsKeyPressed(KEY_P))
|
||||||
|
{
|
||||||
timePlayed = GetMusicTimePlayed(0)/GetMusicTimeLength(0)*100*4; // We scale by 4 to fit 400 pixels
|
pause = !pause;
|
||||||
|
|
||||||
|
if (pause) PauseMusicStream(music);
|
||||||
|
else ResumeMusicStream(music);
|
||||||
|
}
|
||||||
|
|
||||||
UpdateMusicStream(0); // Update music buffer with new stream data
|
// Get timePlayed scaled to bar dimensions (400 pixels)
|
||||||
|
timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*400;
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
|
@ -108,11 +108,14 @@ void UpdateDrawFrame(void)
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
DrawText("MUSIC SHOULD BE PLAYING!", 255, 200, 20, LIGHTGRAY);
|
DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY);
|
||||||
|
|
||||||
DrawRectangle(200, 250, 400, 12, LIGHTGRAY);
|
DrawRectangle(200, 200, 400, 12, LIGHTGRAY);
|
||||||
DrawRectangle(200, 250, (int)timePlayed, 12, MAROON);
|
DrawRectangle(200, 200, (int)timePlayed, 12, MAROON);
|
||||||
|
DrawRectangleLines(200, 200, 400, 12, GRAY);
|
||||||
|
|
||||||
|
DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY);
|
||||||
|
DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
File diff suppressed because one or more lines are too long
114
docs/examples/web/audio_raw_stream.c
Normal file
114
docs/examples/web/audio_raw_stream.c
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [audio] example - Raw audio streaming
|
||||||
|
*
|
||||||
|
* NOTE: This example requires OpenAL Soft library installed
|
||||||
|
*
|
||||||
|
* This example has been created using raylib 1.6 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#include <stdlib.h> // Required for: malloc(), free()
|
||||||
|
#include <math.h> // Required for: sinf()
|
||||||
|
|
||||||
|
#define MAX_SAMPLES 22050
|
||||||
|
#define MAX_SAMPLES_PER_UPDATE 4096
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
int screenWidth = 800;
|
||||||
|
int screenHeight = 450;
|
||||||
|
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [audio] example - raw audio streaming");
|
||||||
|
|
||||||
|
InitAudioDevice(); // Initialize audio device
|
||||||
|
|
||||||
|
// Init raw audio stream (sample rate: 22050, sample size: 16bit-short, channels: 1-mono)
|
||||||
|
AudioStream stream = InitAudioStream(22050, 16, 1);
|
||||||
|
|
||||||
|
// Generate samples data from sine wave
|
||||||
|
short *data = (short *)malloc(sizeof(short)*MAX_SAMPLES);
|
||||||
|
|
||||||
|
// TODO: Review data generation, it seems data is discontinued for loop,
|
||||||
|
// for that reason, there is a clip everytime audio stream is looped...
|
||||||
|
for (int i = 0; i < MAX_SAMPLES; i++)
|
||||||
|
{
|
||||||
|
data[i] = (short)(sinf(((2*PI*(float)i)/2)*DEG2RAD)*32000);
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayAudioStream(stream); // Start processing stream buffer (no data loaded currently)
|
||||||
|
|
||||||
|
int totalSamples = MAX_SAMPLES;
|
||||||
|
int samplesLeft = totalSamples;
|
||||||
|
|
||||||
|
Vector2 position = { 0, 0 };
|
||||||
|
|
||||||
|
SetTargetFPS(30); // Set our game to run at 30 frames-per-second
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Main game loop
|
||||||
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
|
{
|
||||||
|
// Update
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Refill audio stream if required
|
||||||
|
// NOTE: Every update we check if stream data has been already consumed and we update
|
||||||
|
// buffer with new data from the generated samples, we upload data at a rate (MAX_SAMPLES_PER_UPDATE),
|
||||||
|
// but notice that at some point we update < MAX_SAMPLES_PER_UPDATE data...
|
||||||
|
if (IsAudioBufferProcessed(stream))
|
||||||
|
{
|
||||||
|
int numSamples = 0;
|
||||||
|
if (samplesLeft >= MAX_SAMPLES_PER_UPDATE) numSamples = MAX_SAMPLES_PER_UPDATE;
|
||||||
|
else numSamples = samplesLeft;
|
||||||
|
|
||||||
|
UpdateAudioStream(stream, data + (totalSamples - samplesLeft), numSamples);
|
||||||
|
|
||||||
|
samplesLeft -= numSamples;
|
||||||
|
|
||||||
|
// Reset samples feeding (loop audio)
|
||||||
|
if (samplesLeft <= 0) samplesLeft = totalSamples;
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
DrawText("SINE WAVE SHOULD BE PLAYING!", 240, 140, 20, LIGHTGRAY);
|
||||||
|
|
||||||
|
// NOTE: Draw a part of the sine wave (only screen width, proportional values)
|
||||||
|
for (int i = 0; i < GetScreenWidth(); i++)
|
||||||
|
{
|
||||||
|
position.x = i;
|
||||||
|
position.y = 250 + 50*data[i]/32000;
|
||||||
|
|
||||||
|
DrawPixelV(position, RED);
|
||||||
|
}
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
free(data); // Unload sine wave data
|
||||||
|
|
||||||
|
CloseAudioStream(stream); // Close raw audio stream and delete buffers from RAM
|
||||||
|
|
||||||
|
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
||||||
|
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -56,9 +56,8 @@ int main()
|
||||||
colors[i] = (Color){ GetRandomValue(20, 255), GetRandomValue(10, 55), 30, 255 };
|
colors[i] = (Color){ GetRandomValue(20, 255), GetRandomValue(10, 55), 30, 255 };
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCameraMode(CAMERA_FIRST_PERSON); // Set a first person camera mode
|
SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode
|
||||||
SetCameraFovy(camera.fovy); // Set internal camera field-of-view Y
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
#else
|
#else
|
||||||
|
@ -88,7 +87,7 @@ void UpdateDrawFrame(void)
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
UpdateCameraPlayer(&camera, &playerPosition); // Update camera and player position
|
UpdateCamera(&camera); // Update camera and player position
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -47,10 +47,7 @@ int main()
|
||||||
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 = 45.0f; // Camera field-of-view Y
|
||||||
|
|
||||||
SetCameraMode(CAMERA_FREE); // Set a free camera mode
|
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our camera position
|
|
||||||
SetCameraTarget(camera.target); // Set internal camera target to match our camera target
|
|
||||||
SetCameraFovy(camera.fovy); // Set internal camera field-of-view Y
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -50,9 +50,7 @@ int main()
|
||||||
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 = 45.0f; // Camera field-of-view Y
|
||||||
|
|
||||||
SetCameraMode(CAMERA_FREE); // Set a free camera mode
|
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our camera position
|
|
||||||
SetCameraFovy(camera.fovy); // Set internal camera field-of-view Y
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -42,9 +42,7 @@ int main()
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free");
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free");
|
||||||
|
|
||||||
SetCameraMode(CAMERA_FREE); // Set a free camera mode
|
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our camera position
|
|
||||||
SetCameraTarget(camera.target); // Set internal camera target to match our camera target
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,16 +2,18 @@
|
||||||
#
|
#
|
||||||
# raylib makefile for desktop platforms, Raspberry Pi and HTML5 (emscripten)
|
# raylib makefile for desktop platforms, Raspberry Pi and HTML5 (emscripten)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
# NOTE: By default examples are compiled using raylib static library and OpenAL Soft shared library
|
||||||
#
|
#
|
||||||
# This software is provided "as-is", without any express or implied warranty. In no event
|
# Copyright (c) 2013-2016 Ramon Santamaria (@raysan5)
|
||||||
|
#
|
||||||
|
# This software is provided "as-is", without any express or implied warranty. In no event
|
||||||
# will the authors be held liable for any damages arising from the use of this software.
|
# will the authors be held liable for any damages arising from the use of this software.
|
||||||
#
|
#
|
||||||
# Permission is granted to anyone to use this software for any purpose, including commercial
|
# Permission is granted to anyone to use this software for any purpose, including commercial
|
||||||
# applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
# applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||||
#
|
#
|
||||||
# 1. The origin of this software must not be misrepresented; you must not claim that you
|
# 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||||
# wrote the original software. If you use this software in a product, an acknowledgment
|
# wrote the original software. If you use this software in a product, an acknowledgment
|
||||||
# in the product documentation would be appreciated but is not required.
|
# in the product documentation would be appreciated but is not required.
|
||||||
#
|
#
|
||||||
# 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
# 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||||
|
@ -26,6 +28,9 @@
|
||||||
# WARNING: To compile to HTML5, code must be redesigned to use emscripten.h and emscripten_set_main_loop()
|
# WARNING: To compile to HTML5, code must be redesigned to use emscripten.h and emscripten_set_main_loop()
|
||||||
PLATFORM ?= PLATFORM_DESKTOP
|
PLATFORM ?= PLATFORM_DESKTOP
|
||||||
|
|
||||||
|
# define NO to use OpenAL Soft as static library (shared by default)
|
||||||
|
SHARED_OPENAL ?= NO
|
||||||
|
|
||||||
# determine PLATFORM_OS in case PLATFORM_DESKTOP selected
|
# determine PLATFORM_OS in case PLATFORM_DESKTOP selected
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
# No uname.exe on MinGW!, but OS=Windows_NT on Windows! ifeq ($(UNAME),Msys) -> Windows
|
# No uname.exe on MinGW!, but OS=Windows_NT on Windows! ifeq ($(UNAME),Msys) -> Windows
|
||||||
|
@ -61,50 +66,95 @@ endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# define compiler flags:
|
# define compiler flags:
|
||||||
# -O2 defines optimization level
|
# -O2 defines optimization level
|
||||||
# -Wall turns on most, but not all, compiler warnings
|
# -Og enable debugging
|
||||||
# -std=c99 use standard C from 1999 revision
|
# -s strip unnecessary data from build
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
# -Wall turns on most, but not all, compiler warnings
|
||||||
CFLAGS = -O2 -Wall -std=gnu99 -fgnu89-inline
|
# -std=c99 defines C language mode (standard C from 1999 revision)
|
||||||
else
|
# -std=gnu99 defines C language mode (GNU C from 1999 revision)
|
||||||
CFLAGS = -O2 -Wall -std=c99
|
# -fgnu89-inline declaring inline functions support (GCC optimized)
|
||||||
|
# -Wno-missing-braces ignore invalid warning (GCC bug 53119)
|
||||||
|
# -D_DEFAULT_SOURCE use with -std=c99 on Linux to enable timespec and drflac
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||||
|
CFLAGS = -O2 -s -Wall -std=c99
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
|
CFLAGS = -O2 -s -Wall -std=c99 -D_DEFAULT_SOURCE
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM_OS),OSX)
|
||||||
|
CFLAGS = -O2 -s -Wall -std=c99
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
CFLAGS = -O1 -Wall -std=c99 -s USE_GLFW=3
|
CFLAGS = -O1 -Wall -std=c99 -s USE_GLFW=3 -s ASSERTIONS=1 --profiling
|
||||||
#-s ASSERTIONS=1 # to check for memory allocation errors (-O1 disables it)
|
# -O2 # if used, also set --memory-init-file 0
|
||||||
#-s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing
|
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
|
||||||
#-s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB)
|
#-s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing
|
||||||
|
#-s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB)
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
|
CFLAGS = -O2 -s -Wall -std=gnu99 -fgnu89-inline
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
|
#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
|
||||||
|
|
||||||
# define any directories containing required header files
|
# define raylib release directory for compiled library
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||||
|
RAYLIB_PATH = ../release/win32/mingw32
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
|
RAYLIB_PATH = ../release/linux
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM_OS),OSX)
|
||||||
|
RAYLIB_PATH = ../release/osx
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
|
RAYLIB_PATH = ../release/html5
|
||||||
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
INCLUDES = -I. -I../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
|
RAYLIB_PATH = ../release/rpi
|
||||||
else
|
endif
|
||||||
INCLUDES = -I. -I../src -I../github/raylib/src
|
|
||||||
# external libraries headers
|
# define any directories containing required header files
|
||||||
# GLFW3
|
INCLUDES = -I. -I../../../src -I../src/external -I$(RAYLIB_PATH)
|
||||||
INCLUDES += -I../external/glfw3/include
|
|
||||||
# GLEW: Not required any more, replaced by GLAD
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
#INCLUDES += -I../external/glew/include
|
INCLUDES += -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
|
||||||
# OpenAL Soft
|
endif
|
||||||
INCLUDES += -I../external/openal_soft/include
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||||
|
# external libraries headers
|
||||||
|
# GLFW3
|
||||||
|
INCLUDES += -I../src/external/glfw3/include
|
||||||
|
# OpenAL Soft
|
||||||
|
INCLUDES += -I../src/external/openal_soft/include
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
|
# you may optionally create this directory and install raylib
|
||||||
|
# and related headers there. Edit ../src/Makefile appropriately.
|
||||||
|
INCLUDES += -I/usr/local/include/raylib
|
||||||
|
endif
|
||||||
|
ifeq ($(PLATFORM_OS),OSX)
|
||||||
|
# additional directories for MacOS
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# define library paths containing required libs
|
# define library paths containing required libs
|
||||||
|
LFLAGS = -L. -L../src -L$(RAYLIB_PATH)
|
||||||
|
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
LFLAGS = -L. -L../src -L/opt/vc/lib
|
LFLAGS += -L/opt/vc/lib
|
||||||
else
|
endif
|
||||||
LFLAGS = -L. -L../src
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
# external libraries to link with
|
# add standard directories for GNU/Linux
|
||||||
# GLFW3
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||||
LFLAGS += -L../external/glfw3/lib/$(LIBPATH)
|
# external libraries to link with
|
||||||
ifneq ($(PLATFORM_OS),OSX)
|
# GLFW3
|
||||||
# OpenAL Soft
|
LFLAGS += -L../src/external/glfw3/lib/$(LIBPATH)
|
||||||
LFLAGS += -L../external/openal_soft/lib/$(LIBPATH)
|
# OpenAL Soft
|
||||||
# GLEW: Not required any more, replaced by GLAD
|
LFLAGS += -L../src/external/openal_soft/lib/$(LIBPATH)
|
||||||
#LFLAGS += -L../external/glew/lib/$(LIBPATH)
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -114,20 +164,27 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
# libraries for Debian GNU/Linux desktop compiling
|
# libraries for Debian GNU/Linux desktop compiling
|
||||||
# requires the following packages:
|
# requires the following packages:
|
||||||
# libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev
|
# libglfw3-dev libopenal-dev libegl1-mesa-dev
|
||||||
LIBS = -lraylib -lglfw3 -lGLEW -lGL -lopenal -lm -pthread
|
LIBS = -lraylib -lglfw3 -lGL -lopenal -lm -lpthread -ldl
|
||||||
# on XWindow could require also below libraries, just uncomment
|
# on XWindow could require also below libraries, just uncomment
|
||||||
#LIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
LIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
||||||
else
|
else
|
||||||
ifeq ($(PLATFORM_OS),OSX)
|
ifeq ($(PLATFORM_OS),OSX)
|
||||||
# libraries for OS X 10.9 desktop compiling
|
# libraries for OS X 10.9 desktop compiling
|
||||||
# requires the following packages:
|
# requires the following packages:
|
||||||
# libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev
|
# libglfw3-dev libopenal-dev libegl1-mesa-dev
|
||||||
LIBS = -lraylib -lglfw -framework OpenGL -framework OpenAl -framework Cocoa
|
LIBS = -lraylib -lglfw -framework OpenGL -framework OpenAL -framework Cocoa
|
||||||
else
|
else
|
||||||
# libraries for Windows desktop compiling
|
# libraries for Windows desktop compiling
|
||||||
# NOTE: GLFW3 and OpenAL Soft libraries should be installed
|
# NOTE: GLFW3 and OpenAL Soft libraries should be installed
|
||||||
LIBS = -lraylib -lglfw3 -lopengl32 -lopenal32 -lgdi32
|
LIBS = -lraylib -lglfw3 -lopengl32 -lgdi32
|
||||||
|
# if static OpenAL Soft required, define the corresponding libs
|
||||||
|
ifeq ($(SHARED_OPENAL),NO)
|
||||||
|
LIBS += -lopenal32 -lwinmm
|
||||||
|
CFLAGS += -Wl,-allow-multiple-definition
|
||||||
|
else
|
||||||
|
LIBS += -lopenal32dll
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -138,7 +195,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 = ../github/raylib/src/libraylib.bc
|
LIBS = ../../../release/html5/libraylib.bc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# define additional parameters and flags for windows
|
# define additional parameters and flags for windows
|
||||||
|
@ -168,6 +225,8 @@ 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 \
|
||||||
shapes_logo_raylib \
|
shapes_logo_raylib \
|
||||||
shapes_basic_shapes \
|
shapes_basic_shapes \
|
||||||
shapes_colors_palette \
|
shapes_colors_palette \
|
||||||
|
@ -188,25 +247,28 @@ EXAMPLES = \
|
||||||
text_format_text \
|
text_format_text \
|
||||||
text_font_select \
|
text_font_select \
|
||||||
text_writing_anim \
|
text_writing_anim \
|
||||||
|
text_ttf_loading \
|
||||||
|
text_bmfont_unordered \
|
||||||
models_geometric_shapes \
|
models_geometric_shapes \
|
||||||
models_box_collisions \
|
models_box_collisions \
|
||||||
models_billboard \
|
models_billboard \
|
||||||
models_obj_loading \
|
models_obj_loading \
|
||||||
models_heightmap \
|
models_heightmap \
|
||||||
models_cubicmap \
|
models_cubicmap \
|
||||||
|
models_ray_picking \
|
||||||
shaders_model_shader \
|
shaders_model_shader \
|
||||||
shaders_shapes_textures \
|
shaders_shapes_textures \
|
||||||
shaders_custom_uniform \
|
shaders_custom_uniform \
|
||||||
shaders_postprocessing \
|
shaders_postprocessing \
|
||||||
shaders_basic_lighting \
|
|
||||||
audio_sound_loading \
|
audio_sound_loading \
|
||||||
audio_music_stream \
|
audio_music_stream \
|
||||||
fix_dylib \
|
audio_module_playing \
|
||||||
|
audio_raw_stream \
|
||||||
|
|
||||||
|
|
||||||
# typing 'make' will invoke the first target entry in the file,
|
# typing 'make' will invoke the default target entry called 'all',
|
||||||
# in this case, the 'default' target entry is raylib
|
# in this case, the 'default' target entry is raylib
|
||||||
default: examples
|
all: examples
|
||||||
|
|
||||||
# compile all examples
|
# compile all examples
|
||||||
examples: $(EXAMPLES)
|
examples: $(EXAMPLES)
|
||||||
|
@ -229,10 +291,10 @@ core_mouse_wheel: core_mouse_wheel.c
|
||||||
|
|
||||||
# compile [core] example - gamepad input
|
# compile [core] example - gamepad input
|
||||||
core_input_gamepad: core_input_gamepad.c
|
core_input_gamepad: core_input_gamepad.c
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM), $(filter $(PLATFORM),PLATFORM_DESKTOP PLATFORM_RPI))
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
else
|
else
|
||||||
@echo core_input_gamepad: Only supported on desktop platform
|
@echo core_input_gamepad: Example not supported on PLATFORM_ANDROID or PLATFORM_WEB
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# compile [core] example - generate random values
|
# compile [core] example - generate random values
|
||||||
|
@ -248,15 +310,15 @@ core_drop_files: core_drop_files.c
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
else
|
else
|
||||||
@echo core_drop_files: Only supported on desktop platform
|
@echo core_drop_files: Example not supported on PLATFORM_ANDROID or PLATFORM_WEB or PLATFORM_RPI
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# compile [core] example - storage values
|
# compile [core] example - storage values
|
||||||
core_storage_values: core_storage_values.c
|
core_storage_values: core_storage_values.c
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM), $(filter $(PLATFORM),PLATFORM_DESKTOP PLATFORM_RPI))
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
else
|
else
|
||||||
@echo core_storage_values: Only supported on desktop platform
|
@echo core_storage_values: Example not supported on PLATFORM_ANDROID or PLATFORM_WEB
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# compile [core] example - gestures detection
|
# compile [core] example - gestures detection
|
||||||
|
@ -278,7 +340,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)
|
||||||
|
@ -359,6 +433,14 @@ text_font_select: text_font_select.c
|
||||||
text_writing_anim: text_writing_anim.c
|
text_writing_anim: text_writing_anim.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
|
# compile [text] example - text ttf loading
|
||||||
|
text_ttf_loading: text_ttf_loading.c
|
||||||
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
|
# compile [text] example - text bmfont unordered
|
||||||
|
text_bmfont_unordered: text_bmfont_unordered.c
|
||||||
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
# compile [models] example - basic geometric 3d shapes
|
# compile [models] example - basic geometric 3d shapes
|
||||||
models_geometric_shapes: models_geometric_shapes.c
|
models_geometric_shapes: models_geometric_shapes.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
@ -387,21 +469,25 @@ models_heightmap: models_heightmap.c
|
||||||
models_cubicmap: models_cubicmap.c
|
models_cubicmap: models_cubicmap.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) --preload-file resources/cubicmap.png --preload-file resources/cubicmap_atlas.png
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) --preload-file resources/cubicmap.png --preload-file resources/cubicmap_atlas.png
|
||||||
|
|
||||||
|
# compile [models] example - model ray picking
|
||||||
|
models_ray_picking: models_ray_picking.c
|
||||||
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||||
|
|
||||||
# compile [shaders] example - model shader
|
# compile [shaders] example - model shader
|
||||||
shaders_model_shader: shaders_model_shader.c
|
shaders_model_shader: shaders_model_shader.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -s TOTAL_MEMORY=67108864 --preload-file resources/model/dwarf.obj --preload-file resources/model/dwarf_diffuse.png --preload-file resources/shaders/base.vs --preload-file resources/shaders/grayscale.fs
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -s TOTAL_MEMORY=67108864 --preload-file resources/model/dwarf.obj --preload-file resources/model/dwarf_diffuse.png --preload-file resources/shaders/glsl100/base.vs --preload-file resources/shaders/glsl100/grayscale.fs
|
||||||
|
|
||||||
# compile [shaders] example - shapes texture shader
|
# compile [shaders] example - shapes texture shader
|
||||||
shaders_shapes_textures: shaders_shapes_textures.c
|
shaders_shapes_textures: shaders_shapes_textures.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) --preload-file resources/texture_formats/sonic.png --preload-file resources/shaders/shapes_base.vs --preload-file resources/shaders/shapes_grayscale.fs
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) --preload-file resources/texture_formats/sonic.png --preload-file resources/shaders/glsl100/shapes_base.vs --preload-file resources/shaders/glsl100/shapes_grayscale.fs
|
||||||
|
|
||||||
# compile [shaders] example - custom uniform in shader
|
# compile [shaders] example - custom uniform in shader
|
||||||
shaders_custom_uniform: shaders_custom_uniform.c
|
shaders_custom_uniform: shaders_custom_uniform.c
|
||||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -s TOTAL_MEMORY=67108864 --preload-file resources/model/dwarf.obj --preload-file resources/model/dwarf_diffuse.png --preload-file resources/shaders/base.vs --preload-file resources/shaders/swirl.fs
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -s TOTAL_MEMORY=67108864 --preload-file resources/model/dwarf.obj --preload-file resources/model/dwarf_diffuse.png --preload-file resources/shaders/glsl100/base.vs --preload-file resources/shaders/glsl100/swirl.fs
|
||||||
|
|
||||||
# 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) -s TOTAL_MEMORY=67108864 --preload-file resources/model/dwarf.obj --preload-file resources/model/dwarf_diffuse.png --preload-file resources/shaders/base.vs --preload-file resources/shaders/bloom.fs
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -s TOTAL_MEMORY=67108864 --preload-file resources/model/dwarf.obj --preload-file resources/model/dwarf_diffuse.png --preload-file resources/shaders/glsl100/base.vs --preload-file resources/shaders/glsl100/bloom.fs
|
||||||
|
|
||||||
# compile [shaders] example - shaders_basic_lighting
|
# compile [shaders] example - shaders_basic_lighting
|
||||||
shaders_basic_lighting: shaders_basic_lighting.c
|
shaders_basic_lighting: shaders_basic_lighting.c
|
||||||
|
|
|
@ -41,11 +41,9 @@ int main()
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards");
|
InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards");
|
||||||
|
|
||||||
bill = LoadTexture("resources/billboard.png"); // Our texture billboard
|
bill = LoadTexture("resources/billboard.png"); // Our texture billboard
|
||||||
|
|
||||||
SetCameraMode(CAMERA_ORBITAL); // Set an orbital camera mode
|
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our camera position
|
|
||||||
SetCameraTarget(camera.target); // Set internal camera target to match our camera target
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -53,8 +53,7 @@ int main()
|
||||||
|
|
||||||
UnloadImage(image); // Unload cubesmap image from RAM, already uploaded to VRAM
|
UnloadImage(image); // Unload cubesmap image from RAM, already uploaded to VRAM
|
||||||
|
|
||||||
SetCameraMode(CAMERA_ORBITAL); // Set an orbital camera mode
|
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our custom camera position
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -48,10 +48,9 @@ int main()
|
||||||
map = LoadHeightmap(image, (Vector3){ 16, 8, 16 }); // Load heightmap model with defined size
|
map = LoadHeightmap(image, (Vector3){ 16, 8, 16 }); // Load heightmap model with defined size
|
||||||
map.material.texDiffuse = texture; // Set map diffuse texture
|
map.material.texDiffuse = texture; // Set map diffuse texture
|
||||||
|
|
||||||
UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM
|
UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM
|
||||||
|
|
||||||
SetCameraMode(CAMERA_ORBITAL); // Set an orbital camera mode
|
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our custom camera position
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
197
docs/examples/web/models_ray_picking.c
Normal file
197
docs/examples/web/models_ray_picking.c
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [models] example - Ray picking in 3d mode, ground plane, triangle, mesh
|
||||||
|
*
|
||||||
|
* This example has been created using raylib 1.7 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||||
|
* Example contributed by Joel Davis (@joeld42)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
#include "../src/raymath.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <float.h>
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
int screenWidth = 800;
|
||||||
|
int screenHeight = 450;
|
||||||
|
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [models] example - 3d ray picking");
|
||||||
|
|
||||||
|
// Define the camera to look into our 3d world
|
||||||
|
Camera camera;
|
||||||
|
camera.position = (Vector3){ 10.0f, 8.0f, 10.0f }; // Camera position
|
||||||
|
camera.target = (Vector3){ 0.0f, 2.3f, 0.0f }; // Camera looking at point
|
||||||
|
camera.up = (Vector3){ 0.0f, 1.6f, 0.0f }; // Camera up vector (rotation towards target)
|
||||||
|
camera.fovy = 45.0f; // Camera field-of-view Y
|
||||||
|
|
||||||
|
Vector3 cubePosition = { 0.0f, 1.0f, 0.0f };
|
||||||
|
Vector3 cubeSize = { 2.0f, 2.0f, 2.0f };
|
||||||
|
|
||||||
|
Ray ray; // Picking line ray
|
||||||
|
|
||||||
|
Model tower = LoadModel("resources/model/lowpoly-tower.obj"); // Load OBJ model
|
||||||
|
Texture2D texture = LoadTexture("resources/model/lowpoly-tower.png"); // Load model texture
|
||||||
|
tower.material.texDiffuse = texture; // Set model diffuse texture
|
||||||
|
|
||||||
|
Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; // Set model position
|
||||||
|
BoundingBox towerBBox = CalculateBoundingBox( tower.mesh );
|
||||||
|
bool hitMeshBBox = false;
|
||||||
|
bool hitTriangle = false;
|
||||||
|
|
||||||
|
// Test triangle
|
||||||
|
Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 };
|
||||||
|
Vector3 tb = (Vector3){ -4.0, 2.5, 1.0 };
|
||||||
|
Vector3 tc = (Vector3){ -8.0, 6.5, 0.0 };
|
||||||
|
|
||||||
|
Vector3 bary = { 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
|
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||||
|
|
||||||
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
// Main game loop
|
||||||
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
|
{
|
||||||
|
// Update
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
UpdateCamera(&camera); // Update camera
|
||||||
|
|
||||||
|
// Display information about closest hit
|
||||||
|
RayHitInfo nearestHit;
|
||||||
|
char *hitObjectName = "None";
|
||||||
|
nearestHit.distance = FLT_MAX;
|
||||||
|
nearestHit.hit = false;
|
||||||
|
Color cursorColor = WHITE;
|
||||||
|
|
||||||
|
// Get ray and test against ground, triangle, and mesh
|
||||||
|
ray = GetMouseRay(GetMousePosition(), camera);
|
||||||
|
|
||||||
|
// Check ray collision aginst ground plane
|
||||||
|
RayHitInfo groundHitInfo = GetCollisionRayGround(ray, 0.0f);
|
||||||
|
|
||||||
|
if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance))
|
||||||
|
{
|
||||||
|
nearestHit = groundHitInfo;
|
||||||
|
cursorColor = GREEN;
|
||||||
|
hitObjectName = "Ground";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check ray collision against test triangle
|
||||||
|
RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, ta, tb, tc);
|
||||||
|
|
||||||
|
if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance))
|
||||||
|
{
|
||||||
|
nearestHit = triHitInfo;
|
||||||
|
cursorColor = PURPLE;
|
||||||
|
hitObjectName = "Triangle";
|
||||||
|
|
||||||
|
bary = Barycenter(nearestHit.hitPosition, ta, tb, tc);
|
||||||
|
hitTriangle = true;
|
||||||
|
}
|
||||||
|
else hitTriangle = false;
|
||||||
|
|
||||||
|
RayHitInfo meshHitInfo;
|
||||||
|
|
||||||
|
// Check ray collision against bounding box first, before trying the full ray-mesh test
|
||||||
|
if (CheckCollisionRayBox(ray, towerBBox))
|
||||||
|
{
|
||||||
|
hitMeshBBox = true;
|
||||||
|
|
||||||
|
// Check ray collision against mesh
|
||||||
|
meshHitInfo = GetCollisionRayMesh(ray, &tower.mesh);
|
||||||
|
|
||||||
|
if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance))
|
||||||
|
{
|
||||||
|
nearestHit = meshHitInfo;
|
||||||
|
cursorColor = ORANGE;
|
||||||
|
hitObjectName = "Mesh";
|
||||||
|
}
|
||||||
|
|
||||||
|
} hitMeshBBox = false;
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
Begin3dMode(camera);
|
||||||
|
|
||||||
|
// Draw the tower
|
||||||
|
DrawModel(tower, towerPos, 1.0, WHITE);
|
||||||
|
|
||||||
|
// Draw the test triangle
|
||||||
|
DrawLine3D(ta, tb, PURPLE);
|
||||||
|
DrawLine3D(tb, tc, PURPLE);
|
||||||
|
DrawLine3D(tc, ta, PURPLE);
|
||||||
|
|
||||||
|
// Draw the mesh bbox if we hit it
|
||||||
|
if (hitMeshBBox) DrawBoundingBox(towerBBox, LIME);
|
||||||
|
|
||||||
|
// If we hit something, draw the cursor at the hit point
|
||||||
|
if (nearestHit.hit)
|
||||||
|
{
|
||||||
|
DrawCube(nearestHit.hitPosition, 0.5, 0.5, 0.5, cursorColor);
|
||||||
|
DrawCubeWires(nearestHit.hitPosition, 0.5, 0.5, 0.5, YELLOW);
|
||||||
|
|
||||||
|
Vector3 normalEnd;
|
||||||
|
normalEnd.x = nearestHit.hitPosition.x + nearestHit.hitNormal.x;
|
||||||
|
normalEnd.y = nearestHit.hitPosition.y + nearestHit.hitNormal.y;
|
||||||
|
normalEnd.z = nearestHit.hitPosition.z + nearestHit.hitNormal.z;
|
||||||
|
|
||||||
|
DrawLine3D(nearestHit.hitPosition, normalEnd, YELLOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawRay(ray, MAROON);
|
||||||
|
|
||||||
|
DrawGrid(100, 1.0f);
|
||||||
|
|
||||||
|
End3dMode();
|
||||||
|
|
||||||
|
// Draw some debug GUI text
|
||||||
|
DrawText(FormatText("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK);
|
||||||
|
|
||||||
|
if (nearestHit.hit)
|
||||||
|
{
|
||||||
|
int ypos = 70;
|
||||||
|
|
||||||
|
DrawText(FormatText("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK);
|
||||||
|
|
||||||
|
DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f",
|
||||||
|
nearestHit.hitPosition.x,
|
||||||
|
nearestHit.hitPosition.y,
|
||||||
|
nearestHit.hitPosition.z), 10, ypos + 15, 10, BLACK);
|
||||||
|
|
||||||
|
DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f",
|
||||||
|
nearestHit.hitNormal.x,
|
||||||
|
nearestHit.hitNormal.y,
|
||||||
|
nearestHit.hitNormal.z), 10, ypos + 30, 10, BLACK);
|
||||||
|
|
||||||
|
if (hitTriangle) DrawText(FormatText("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY);
|
||||||
|
|
||||||
|
DrawFPS(10, 10);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
46921
docs/examples/web/models_ray_picking.js
Normal file
46921
docs/examples/web/models_ray_picking.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -75,9 +75,7 @@ int main()
|
||||||
target = LoadRenderTexture(screenWidth, screenHeight);
|
target = LoadRenderTexture(screenWidth, screenHeight);
|
||||||
|
|
||||||
// Setup orbital camera
|
// Setup orbital camera
|
||||||
SetCameraMode(CAMERA_ORBITAL); // Set an orbital camera mode
|
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our camera position
|
|
||||||
SetCameraTarget(camera.target); // Set internal camera target to match our camera target
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -57,13 +57,11 @@ int main()
|
||||||
shader = LoadShader("resources/shaders/glsl100/base.vs",
|
shader = LoadShader("resources/shaders/glsl100/base.vs",
|
||||||
"resources/shaders/glsl100/grayscale.fs"); // Load model shader
|
"resources/shaders/glsl100/grayscale.fs"); // Load model shader
|
||||||
|
|
||||||
dwarf.material.shader = shader; // Set shader effect to 3d model
|
dwarf.material.shader = shader; // Set shader effect to 3d model
|
||||||
dwarf.material.texDiffuse = texture; // Bind texture to model
|
dwarf.material.texDiffuse = texture; // Bind texture to model
|
||||||
|
|
||||||
// Setup orbital camera
|
// Setup orbital camera
|
||||||
SetCameraMode(CAMERA_ORBITAL); // Set an orbital camera mode
|
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our camera position
|
|
||||||
SetCameraTarget(camera.target); // Set internal camera target to match our camera target
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -65,9 +65,7 @@ int main()
|
||||||
target = LoadRenderTexture(screenWidth, screenHeight);
|
target = LoadRenderTexture(screenWidth, screenHeight);
|
||||||
|
|
||||||
// Setup orbital camera
|
// Setup orbital camera
|
||||||
SetCameraMode(CAMERA_ORBITAL); // Set an orbital camera mode
|
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
|
||||||
SetCameraPosition(camera.position); // Set internal camera position to match our camera position
|
|
||||||
SetCameraTarget(camera.target); // Set internal camera target to match our camera target
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 114 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -47,8 +47,8 @@ int main()
|
||||||
fontBm = LoadSpriteFont("resources/fonts/bmfont.fnt"); // BMFont (AngelCode)
|
fontBm = LoadSpriteFont("resources/fonts/bmfont.fnt"); // BMFont (AngelCode)
|
||||||
fontTtf = LoadSpriteFont("resources/fonts/pixantiqua.ttf"); // TTF font
|
fontTtf = LoadSpriteFont("resources/fonts/pixantiqua.ttf"); // TTF font
|
||||||
|
|
||||||
fontPosition.x = screenWidth/2 - MeasureTextEx(fontBm, msgBm, fontBm.size, 0).x/2;
|
fontPosition.x = screenWidth/2 - MeasureTextEx(fontBm, msgBm, fontBm.baseSize, 0).x/2;
|
||||||
fontPosition.y = screenHeight/2 - fontBm.size/2 - 80;
|
fontPosition.y = screenHeight/2 - fontBm.baseSize/2 - 80;
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
@ -90,8 +90,8 @@ void UpdateDrawFrame(void)
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
DrawTextEx(fontBm, msgBm, fontPosition, fontBm.size, 0, MAROON);
|
DrawTextEx(fontBm, msgBm, fontPosition, fontBm.baseSize, 0, MAROON);
|
||||||
DrawTextEx(fontTtf, msgTtf, (Vector2){ 75.0f, 240.0f }, fontTtf.size*0.8f, 2, LIME);
|
DrawTextEx(fontTtf, msgTtf, (Vector2){ 75.0f, 240.0f }, fontTtf.baseSize*0.8f, 2, LIME);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
@ -97,49 +97,7 @@ char id=123 x=191 y=141 width=14 height=45 xoffset=-1 yoffset=0
|
||||||
char id=124 x=416 y=141 width=5 height=45 xoffset=2 yoffset=0 xadvance=9 page=0 chnl=15
|
char id=124 x=416 y=141 width=5 height=45 xoffset=2 yoffset=0 xadvance=9 page=0 chnl=15
|
||||||
char id=125 x=207 y=141 width=13 height=45 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=15
|
char id=125 x=207 y=141 width=13 height=45 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=15
|
||||||
char id=126 x=42 y=141 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15
|
char id=126 x=42 y=141 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15
|
||||||
‰PNG
|
|