[rlgl] Implement vertex normals for RLGL immediate drawing mode (#3866)

* Fix several non-functional `target_compile_definitions`

* Avoid hardcoding the default vertex attribute locations

* Implement functional `rlNormal3f`

* Add normal definitions for `DrawCube`

* Update the basic lighting example to use `DrawCube` and `DrawPlane`
This commit is contained in:
bohonghuang 2024-04-23 20:22:29 +08:00 committed by GitHub
parent e0f6faa151
commit d80febde7d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 303 additions and 102 deletions

View file

@ -52,10 +52,6 @@ int main(void)
camera.fovy = 45.0f; // Camera field-of-view Y
camera.projection = CAMERA_PERSPECTIVE; // Camera projection type
// Load plane model from a generated mesh
Model model = LoadModelFromMesh(GenMeshPlane(10.0f, 10.0f, 3, 3));
Model cube = LoadModelFromMesh(GenMeshCube(2.0f, 4.0f, 2.0f));
// Load basic lighting shader
Shader shader = LoadShader(TextFormat("resources/shaders/glsl%i/lighting.vs", GLSL_VERSION),
TextFormat("resources/shaders/glsl%i/lighting.fs", GLSL_VERSION));
@ -69,10 +65,6 @@ int main(void)
int ambientLoc = GetShaderLocation(shader, "ambient");
SetShaderValue(shader, ambientLoc, (float[4]){ 0.1f, 0.1f, 0.1f, 1.0f }, SHADER_UNIFORM_VEC4);
// Assign out lighting shader to model
model.materials[0].shader = shader;
cube.materials[0].shader = shader;
// Create lights
Light lights[MAX_LIGHTS] = { 0 };
lights[0] = CreateLight(LIGHT_POINT, (Vector3){ -2, 1, -2 }, Vector3Zero(), YELLOW, shader);
@ -112,8 +104,12 @@ int main(void)
BeginMode3D(camera);
DrawModel(model, Vector3Zero(), 1.0f, WHITE);
DrawModel(cube, Vector3Zero(), 1.0f, WHITE);
BeginShaderMode(shader);
DrawPlane(Vector3Zero(), (Vector2) { 10.0, 10.0 }, WHITE);
DrawCube(Vector3Zero(), 2.0, 4.0, 2.0, WHITE);
EndShaderMode();
// Draw spheres to show where the lights are
for (int i = 0; i < MAX_LIGHTS; i++)
@ -136,8 +132,6 @@ int main(void)
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadModel(model); // Unload the model
UnloadModel(cube); // Unload the model
UnloadShader(shader); // Unload shader
CloseWindow(); // Close window and OpenGL context