updated light.go added basic lighting example
This commit is contained in:
parent
d97aa6e3f6
commit
d3497d36da
5 changed files with 295 additions and 18 deletions
103
examples/shaders/basic_lighting/main.go
Normal file
103
examples/shaders/basic_lighting/main.go
Normal file
|
@ -0,0 +1,103 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
rl "github.com/gen2brain/raylib-go/raylib"
|
||||
)
|
||||
|
||||
func main() {
|
||||
screenWidth := int32(1280)
|
||||
screenHeight := int32(720)
|
||||
|
||||
rl.SetConfigFlags(rl.FlagMsaa4xHint) //ENABLE 4X MSAA IF AVAILABLE
|
||||
|
||||
rl.InitWindow(screenWidth, screenHeight, "raylib [shaders] example - basic lighting")
|
||||
|
||||
camera := rl.Camera{}
|
||||
camera.Position = rl.NewVector3(2.0, 4.0, 6.0)
|
||||
camera.Target = rl.NewVector3(0.0, 0.5, 0.0)
|
||||
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
|
||||
camera.Fovy = 45.0
|
||||
camera.Projection = rl.CameraPerspective
|
||||
|
||||
ground := rl.LoadModelFromMesh(rl.GenMeshPlane(10, 10, 3, 3))
|
||||
cube := rl.LoadModelFromMesh(rl.GenMeshCube(2, 4, 2))
|
||||
|
||||
shader := rl.LoadShader("lighting.vs", "lighting.fs")
|
||||
|
||||
*shader.Locs = rl.GetShaderLocation(shader, "viewPos")
|
||||
|
||||
ambientLoc := rl.GetShaderLocation(shader, "ambient")
|
||||
shaderValue := []float32{0.1, 0.1, 0.1, 1.0}
|
||||
rl.SetShaderValue(shader, ambientLoc, shaderValue, rl.ShaderUniformVec4)
|
||||
|
||||
ground.Materials.Shader = shader
|
||||
cube.Materials.Shader = shader
|
||||
|
||||
lights := make([]Light, 4)
|
||||
lights[0] = NewLight(LightTypePoint, rl.NewVector3(-2, 1, -2), rl.NewVector3(0, 0, 0), rl.Yellow, shader)
|
||||
|
||||
lights[1] = NewLight(LightTypePoint, rl.NewVector3(2, 1, 2), rl.NewVector3(0, 0, 0), rl.Red, shader)
|
||||
|
||||
lights[2] = NewLight(LightTypePoint, rl.NewVector3(-2, 1, 2), rl.NewVector3(0, 0, 0), rl.Green, shader)
|
||||
|
||||
lights[3] = NewLight(LightTypePoint, rl.NewVector3(2, 1, -2), rl.NewVector3(0, 0, 0), rl.Blue, shader)
|
||||
|
||||
rl.SetTargetFPS(60)
|
||||
|
||||
for !rl.WindowShouldClose() {
|
||||
rl.UpdateCamera(&camera, rl.CameraOrbital)
|
||||
|
||||
cameraPos := []float32{camera.Position.X, camera.Position.Y, camera.Position.Z}
|
||||
rl.SetShaderValue(shader, *shader.Locs, cameraPos, rl.ShaderUniformVec3)
|
||||
|
||||
if rl.IsKeyPressed(rl.KeyY) {
|
||||
lights[0].enabled *= -1
|
||||
}
|
||||
if rl.IsKeyPressed(rl.KeyR) {
|
||||
lights[1].enabled *= -1
|
||||
}
|
||||
if rl.IsKeyPressed(rl.KeyG) {
|
||||
lights[2].enabled *= -1
|
||||
}
|
||||
if rl.IsKeyPressed(rl.KeyB) {
|
||||
lights[3].enabled *= -1
|
||||
}
|
||||
|
||||
for i := 0; i < len(lights); i++ {
|
||||
lights[i].UpdateValues()
|
||||
}
|
||||
|
||||
rl.BeginDrawing()
|
||||
|
||||
rl.ClearBackground(rl.RayWhite)
|
||||
|
||||
rl.BeginMode3D(camera)
|
||||
|
||||
rl.DrawModel(ground, rl.NewVector3(0, 0, 0), 1, rl.White)
|
||||
rl.DrawModel(cube, rl.NewVector3(0, 0, 0), 1, rl.White)
|
||||
|
||||
for i := 0; i < len(lights); i++ {
|
||||
if lights[i].enabled == 1 {
|
||||
rl.DrawSphereEx(lights[i].position, 0.2, 8, 8, lights[i].color)
|
||||
} else {
|
||||
rl.DrawSphereWires(lights[i].position, 0.2, 8, 8, rl.Fade(lights[i].color, 0.3))
|
||||
}
|
||||
}
|
||||
|
||||
rl.DrawGrid(10, 1.0) // Draw a grid
|
||||
|
||||
rl.EndMode3D()
|
||||
|
||||
rl.DrawFPS(10, 10)
|
||||
|
||||
rl.DrawText("KEYS [Y] [R] [G] [B] TURN LIGHTS ON/OFF", 10, 40, 20, rl.Black)
|
||||
|
||||
rl.EndDrawing()
|
||||
}
|
||||
|
||||
rl.UnloadShader(shader) // Unload shader
|
||||
rl.UnloadModel(cube) // Unload model
|
||||
rl.UnloadModel(ground) // Unload model
|
||||
|
||||
rl.CloseWindow()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue