New example: models/yaw_pitch_roll
This commit is contained in:
parent
01864c04b8
commit
bc9182ac34
3 changed files with 10971 additions and 0 deletions
113
examples/models/yaw_pitch_roll/main.go
Normal file
113
examples/models/yaw_pitch_roll/main.go
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [models] example - Plane rotations (yaw, pitch, roll)
|
||||||
|
*
|
||||||
|
* Example originally created with raylib 1.8, last time updated with raylib 4.0
|
||||||
|
*
|
||||||
|
* Example contributed by Berni (@Berni8k) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
||||||
|
* BSD-like license that allows static linking with closed source software
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2024 Berni (@Berni8k) and Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import rl "github.com/gen2brain/raylib-go/raylib"
|
||||||
|
|
||||||
|
const (
|
||||||
|
screenWidth = 800
|
||||||
|
screenHeight = 450
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
//SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_WINDOW_HIGHDPI)
|
||||||
|
title := "raylib [models] example - plane rotations (yaw, pitch, roll)"
|
||||||
|
rl.InitWindow(screenWidth, screenHeight, title)
|
||||||
|
|
||||||
|
camera := rl.Camera{
|
||||||
|
Position: rl.Vector3{
|
||||||
|
Y: 50.0,
|
||||||
|
Z: -120.0,
|
||||||
|
}, // Camera position perspective
|
||||||
|
Target: rl.Vector3{}, // Camera looking at point
|
||||||
|
Up: rl.Vector3{Y: 1.0}, // Camera up vector (rotation towards target)
|
||||||
|
Fovy: 30.0, // Camera field-of-view Y
|
||||||
|
Projection: rl.CameraPerspective, // Camera type
|
||||||
|
}
|
||||||
|
model := rl.LoadModel("plane.obj") // Load model
|
||||||
|
texture := rl.LoadTexture("plane_diffuse.png") // Load model texture
|
||||||
|
rl.SetMaterialTexture(model.Materials, rl.MapDiffuse, texture) // Set map diffuse texture
|
||||||
|
|
||||||
|
var pitch, roll, yaw float32
|
||||||
|
|
||||||
|
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
|
||||||
|
|
||||||
|
// Main game loop
|
||||||
|
for !rl.WindowShouldClose() { // Detect window close button or ESC key
|
||||||
|
// Update
|
||||||
|
|
||||||
|
// Plane pitch (x-axis) controls
|
||||||
|
pitch = controlPlane(pitch, 0.6, rl.KeyDown, rl.KeyUp)
|
||||||
|
// Plane yaw (y-axis) controls
|
||||||
|
roll = controlPlane(roll, 1.0, rl.KeyLeft, rl.KeyRight)
|
||||||
|
// Plane roll (z-axis) controls
|
||||||
|
yaw = controlPlane(yaw, 1.0, rl.KeyA, rl.KeyS)
|
||||||
|
|
||||||
|
// Transformation matrix for rotations
|
||||||
|
rotationV := rl.Vector3{
|
||||||
|
X: rl.Deg2rad * pitch,
|
||||||
|
Y: rl.Deg2rad * yaw,
|
||||||
|
Z: rl.Deg2rad * roll,
|
||||||
|
}
|
||||||
|
model.Transform = rl.MatrixRotateXYZ(rotationV)
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
rl.BeginDrawing()
|
||||||
|
|
||||||
|
rl.ClearBackground(rl.RayWhite)
|
||||||
|
|
||||||
|
// Draw 3D model (recommended to draw 3D always before 2D)
|
||||||
|
rl.BeginMode3D(camera)
|
||||||
|
|
||||||
|
// Draw 3d model with texture
|
||||||
|
rl.DrawModel(model, rl.Vector3{Y: -8.0}, 1.0, rl.White)
|
||||||
|
rl.DrawGrid(10, 10.0)
|
||||||
|
|
||||||
|
rl.EndMode3D()
|
||||||
|
|
||||||
|
// Draw controls info
|
||||||
|
rl.DrawRectangle(30, 370, 260, 70, rl.Fade(rl.Green, 0.5))
|
||||||
|
rl.DrawRectangleLines(30, 370, 260, 70, rl.Fade(rl.DarkGreen, 0.5))
|
||||||
|
rl.DrawText("Pitch controlled with: KEY_UP / KEY_DOWN", 40, 380, 10, rl.DarkGray)
|
||||||
|
rl.DrawText("Roll controlled with: KEY_LEFT / KEY_RIGHT", 40, 400, 10, rl.DarkGray)
|
||||||
|
rl.DrawText("Yaw controlled with: KEY_A / KEY_S", 40, 420, 10, rl.DarkGray)
|
||||||
|
|
||||||
|
rl.DrawText("(c) WWI Plane Model created by GiaHanLam", screenWidth-240, screenHeight-20, 10, rl.DarkGray)
|
||||||
|
|
||||||
|
rl.EndDrawing()
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
rl.UnloadModel(model) // Unload model data
|
||||||
|
rl.UnloadTexture(texture) // Unload texture data
|
||||||
|
|
||||||
|
rl.CloseWindow() // Close window and OpenGL context
|
||||||
|
}
|
||||||
|
|
||||||
|
func controlPlane(ctrl, value float32, key1, key2 int32) float32 {
|
||||||
|
if rl.IsKeyDown(key1) {
|
||||||
|
ctrl -= value
|
||||||
|
} else if rl.IsKeyDown(key2) {
|
||||||
|
ctrl += value
|
||||||
|
} else {
|
||||||
|
if ctrl > 0.0 {
|
||||||
|
ctrl -= value / 2
|
||||||
|
} else if ctrl < 0.0 {
|
||||||
|
ctrl += value / 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ctrl
|
||||||
|
}
|
10858
examples/models/yaw_pitch_roll/plane.obj
Normal file
10858
examples/models/yaw_pitch_roll/plane.obj
Normal file
File diff suppressed because it is too large
Load diff
BIN
examples/models/yaw_pitch_roll/plane_diffuse.png
Normal file
BIN
examples/models/yaw_pitch_roll/plane_diffuse.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 804 KiB |
Loading…
Add table
Add a link
Reference in a new issue