Skip to content

imkoi/golang-opengl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VoxCakeGo

VoxCakeGo is just the toy where you can render voxel models... Just at this moment.

Features

  • Volume component;
  • Camera component;
  • Mesh component:
  • Math wrapper;

Components

You can create your own component which will be executed by engine.

package main

import (
	"fmt"

	. "./voxcake"
	. "github.com/go-gl/mathgl/mgl32"
)

type CameraController struct {
}
//Executing on startup
func (cameraController *CameraController) Start() {
	fmt.Printf("%s", "CameraController was allocated!\n")
}

//Executing every frame
func (cameraController *CameraController) Update() {
	nFront := Vec3{0, 0, 0}.Sub(Camera.Front)

	if Input.GetKeyDown(KeyCode.W) {
		Camera.Translate(Camera.Front)
	}
	if Input.GetKeyDown(KeyCode.S) {
		Camera.Translate(nFront)
	}
	if Input.GetKeyDown(KeyCode.A) {
		Camera.Translate(Vec3.Normalize(Vec3.Cross(nFront, Camera.Up)))
	}
	if Input.GetKeyDown(KeyCode.D) {
		Camera.Translate(Vec3.Normalize(Vec3.Cross(Camera.Front, Camera.Up)))
	}

	Camera.Rotate(Input.GetAxis("X"), Input.GetAxis("Y"))

	if Input.GetButtonDown(0) {
		//vec := RaycastVolume(&Camera.Position, &Camera.Direction, Volume("Map.vcmap"))
		//vec := RaycastVolume(Camera.Position.X(), Camera.Position.Y(), Camera.Position.Z(), Camera.Front.X(), Camera.Front.Y(), Camera.Front.Z(), uint8(1), Volume("Map.vcmap"))
		//fmt.Printf("Hitted: Vec3(%[1]d, %[2]d, %[3]d)\n", int(vec.X()), int(vec.Y()), int(vec.Z()))
	}
	if Input.GetButtonDown(1) {
		fmt.Printf("%s", "WHEEL\n")
	}
	if Input.GetButtonDown(2) {
		fmt.Printf("%s", "RIGHT\n")
	}

	if Input.GetKeyDown(KeyCode.Escape) {
		Engine.Quit()
	}

	if Input.GetKeyDown(KeyCode.F) {
		Window.SetFullscreen(true)
	}
}

//Informatin for engine (name of component for sorting)
func (cameraController *CameraController) Name() string {
	return "CameraController"
}

//Information for engine (to return some type from IComponent interface)
func (cameraController *CameraController) Return() interface{} {
	return cameraController
}

Preview

About

Voxel renderer on Golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages