func positionCamera() { gl.LoadIdentity() x, y, z := player.Position() gl.Translated(-x, -y+4, -z) gl.Lightfv(gl.LIGHT1, gl.POSITION, []float32{float32(x), float32(y), float32(z) + 0.5, 1}) }
// general OpenGL initialization func initGL() { gl.Enable(gl.TEXTURE_2D) gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0.0, 0.0, 0.0, 0.5) gl.ClearDepth(1.0) gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) // Setup the light gl.Lightfv(gl.LIGHT1, gl.AMBIENT, lightAmbient[:]) // ambient lighting gl.Lightfv(gl.LIGHT1, gl.DIFFUSE, lightDiffuse[:]) // make it diffuse gl.Lightfv(gl.LIGHT1, gl.POSITION, lightPosition[:]) // and place it gl.Enable(gl.LIGHT1) // and finally turn it on. gl.Color4f(1.0, 1.0, 1.0, 0.5) // Full Brightness, 50% Alpha ( NEW ) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE) // Blending Function For Translucency Based On Source Alpha Value ( NEW ) }
// general OpenGL initialization func initGL() { LoadGLTextures("data/mud.bmp") gl.Enable(gl.TEXTURE_2D) gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0.0, 0.0, 0.0, 0.0) gl.ClearDepth(1.0) gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) gl.Lightfv(gl.LIGHT1, gl.AMBIENT, lightAmbient[:]) gl.Lightfv(gl.LIGHT1, gl.DIFFUSE, lightDiffuse[:]) gl.Lightfv(gl.LIGHT1, gl.POSITION, lightPosition[:]) gl.Enable(gl.LIGHT1) gl.Color4f(1.0, 1.0, 1.0, 0.5) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE) }
func initGL() (err error) { if err = loadTextures(); err != nil { return } gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0, 0, 0, 0) gl.ClearDepth(1) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.TEXTURE_2D) gl.Lightfv(gl.LIGHT1, gl.AMBIENT, ambient) gl.Lightfv(gl.LIGHT1, gl.AMBIENT, diffuse) gl.Lightfv(gl.LIGHT1, gl.POSITION, lightpos) gl.Enable(gl.LIGHT1) return }
func initGL() { gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0, 0, 0, 0) gl.ClearDepth(1) gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) globalState.light[0] = 0 globalState.light[1] = 20 globalState.light[2] = -10 globalState.light[3] = 1 gl.Lightfv(gl.LIGHT1, gl.AMBIENT, []float32{1, 1, 1}) gl.Lightfv(gl.LIGHT1, gl.DIFFUSE, []float32{1, 1, 1}) gl.Lightfv(gl.LIGHT1, gl.POSITION, globalState.light[:]) gl.Enable(gl.LIGHT1) gl.Enable(gl.LIGHTING) }
//AFTER program.Use()! func (t *Light) Shine() { if !t.enabled { return } t.Scc = t.Sc.Cos() if globals.UseShader { program.SetLight(t) } else { eid := getLightName(t.id) //light character gl.Lightfv(eid, gl.AMBIENT, t.Amb.Slc32()) gl.Lightfv(eid, gl.DIFFUSE, t.Diff.Slc32()) gl.Lightfv(eid, gl.SPECULAR, t.Spec.Slc32()) //position var w Double = 0.0 if t.positional { w = 1.0 } pos4 := Col(t.Pos.X, t.Pos.Y, t.Pos.Z, w) gl.Lightfv(eid, gl.POSITION, pos4.Slc32()) //attentuation gl.Lightf(eid, gl.CONSTANT_ATTENUATION, float32(t.Kc)) gl.Lightf(eid, gl.LINEAR_ATTENUATION, float32(t.Kl)) gl.Lightf(eid, gl.QUADRATIC_ATTENUATION, float32(t.Kq)) //spot gl.Lightf(eid, gl.SPOT_EXPONENT, float32(t.Se)) gl.Lightf(eid, gl.SPOT_CUTOFF, float32(t.Sc)) gl.Lightfv(eid, gl.SPOT_DIRECTION, t.Dir.Slc32()) } }
// Initialize OpenGL settings. func glInit() { pos := []float32{5.0, 5.0, 10.0, 0.0} gl.Lightfv(gl.LIGHT0, gl.POSITION, pos) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.CULL_FACE) gl.Enable(gl.LIGHTING) gl.Enable(gl.LIGHT0) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.NORMALIZE) gl.Enable(gl.COLOR_MATERIAL) gl.ColorMaterial(gl.FRONT_AND_BACK, gl.AMBIENT_AND_DIFFUSE) gl.Enable(gl.LINE_SMOOTH) gl.Enable(gl.POINT_SMOOTH) }
func init_() { pos := []float32{5.0, 5.0, 10.0, 0.0} red := []float32{0.8, 0.1, 0.0, 1.0} green := []float32{0.0, 0.8, 0.2, 1.0} blue := []float32{0.2, 0.2, 1.0, 1.0} gl.Lightfv(gl.LIGHT0, gl.POSITION, pos) gl.Enable(gl.CULL_FACE) gl.Enable(gl.LIGHTING) gl.Enable(gl.LIGHT0) gl.Enable(gl.DEPTH_TEST) /* make the gears */ gear1 = gl.GenLists(1) gl.NewList(gear1, gl.COMPILE) gl.Materialfv(gl.FRONT, gl.AMBIENT_AND_DIFFUSE, red) gear(1.0, 4.0, 1.0, 20, 0.7) gl.EndList() gear2 = gl.GenLists(1) gl.NewList(gear2, gl.COMPILE) gl.Materialfv(gl.FRONT, gl.AMBIENT_AND_DIFFUSE, green) gear(0.5, 2.0, 2.0, 10, 0.7) gl.EndList() gear3 = gl.GenLists(1) gl.NewList(gear3, gl.COMPILE) gl.Materialfv(gl.FRONT, gl.AMBIENT_AND_DIFFUSE, blue) gear(1.3, 2.0, 0.5, 10, 0.7) gl.EndList() gl.Enable(gl.NORMALIZE) if *printInfo { print("GL_RENDERER = ", gl.GetString(gl.RENDERER), "\n") print("GL_VERSION = ", gl.GetString(gl.VERSION), "\n") print("GL_VENDOR = ", gl.GetString(gl.VENDOR), "\n") print("GL_EXTENSIONS = ", gl.GetString(gl.EXTENSIONS), "\n") } }
// general OpenGL initialization func initGL() { gl.Enable(gl.TEXTURE_2D) gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0.0, 0.0, 0.0, 0.5) gl.ClearDepth(1.0) gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) // Setup the light gl.Lightfv(gl.LIGHT1, gl.AMBIENT, lightAmbient1[:]) // ambient lighting gl.Lightfv(gl.LIGHT1, gl.DIFFUSE, lightDiffuse1[:]) // make it diffuse gl.Lightfv(gl.LIGHT1, gl.POSITION, lightPosition1[:]) // and place it gl.Enable(gl.LIGHT1) // and finally turn it on. gl.Lightfv(gl.LIGHT2, gl.AMBIENT, lightAmbient2[:]) // ambient lighting gl.Lightfv(gl.LIGHT2, gl.DIFFUSE, lightDiffuse2[:]) // make it diffuse gl.Lightfv(gl.LIGHT2, gl.POSITION, lightPosition2[:]) // and place it gl.Enable(gl.LIGHT2) // and finally turn it on. }
func reshape(width, height int) { shift, aspect := 0, float64(width)/float64(height) if aspect > 2 { aspect = 2 shift = width/2 - height width = height * 2 } gl.Viewport(shift, 0, width, height) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.COLOR_MATERIAL) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() glu.Perspective(45, aspect, NEAR_Z, FAR_Z) gl.Enable(gl.LIGHTING) gl.Lightfv(gl.LIGHT0, gl.POSITION, []float32{-2, -3, 5, 0}) gl.Lightfv(gl.LIGHT0, gl.AMBIENT, []float32{0.1, 0.1, 0.2, 1}) gl.Lightfv(gl.LIGHT0, gl.DIFFUSE, []float32{0.4, 0.35, 0.2, 1}) gl.Lightfv(gl.LIGHT0, gl.SPECULAR, []float32{1, 1, 1, 1}) gl.Enable(gl.LIGHT0) gl.Rotatef(-30, 1, 0, 0) gl.Translatef(0, 0, -5) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Lightfv(gl.LIGHT1, gl.AMBIENT, []float32{0, 0, 0, 1}) gl.Lightfv(gl.LIGHT1, gl.DIFFUSE, []float32{0.4, 0.4, 0.4, 1}) gl.Lightfv(gl.LIGHT1, gl.SPECULAR, []float32{1, 1, 1, 1}) gl.Enable(gl.LIGHT1) }
func (this *App) Run() { fmt.Println("running") var done bool cam := camera.New() cam.Pos = V3(-0, 0, 3) cam.Dir = V3(0, -0, -1) pos := []float32{5.0, 5.0, 10.0, 0.0} gl.Lightfv(gl.LIGHT0, gl.POSITION, pos) gl.Enable(gl.LIGHT0) elapsed := 0.0 rotateSpeed := DegToRad(100.0) moveSpeed := 3.0 texture.SetDefaultTexturePaths("res/textures/", ".png") texture.Load("ground") texture.Load("ground2") defer texture.ClearAllData() tex1 := texture.Get("ground2") //tex2 := texture.Get("ground2") model.SetDefaultModelPaths("res/models/", ".obj") model.Load("teapot") model.Load("cuboid") model.Load("sphere") model.Load("bunny") defer model.ClearAllData() mod1 := model.Get("bunny") //*/ //* prog1 := program.New("test", "test") defer prog1.Destroy() prog := prog1 println(prog.InfoLog()) var mView, mProjection, mModel *mat4.Mat4 mModel = mat4.New() //*/ done = false for !done { time1 := time.Now() this.win.ClearBuffers() this.win.ResetModelViewMatrix() //input if this.il.KeyDown(glfw.KeyLeft) { cam.RotateY(-rotateSpeed * elapsed) } if this.il.KeyDown(glfw.KeyRight) { cam.RotateY(rotateSpeed * elapsed) } if this.il.KeyDown(glfw.KeyUp) { cam.RotateX(-rotateSpeed * elapsed) } if this.il.KeyDown(glfw.KeyDown) { cam.RotateX(rotateSpeed * elapsed) } if this.il.KeyDown(KeyX) { cam.MoveZ(-moveSpeed * elapsed) } if this.il.KeyDown(KeyC) { cam.MoveZ(moveSpeed * elapsed) } if this.il.KeyPressed(KeyR) { prog.Reload() println(prog.InfoLog()) } this.win.ApplyCamera(cam) //* mView = cam.Matrix() mProjection = this.win.ProjectionMatrix() mModel.SetIdentity() prog.SetModelMatrix(mModel) prog.SetViewMatrix(mView) prog.SetProjectionMatrix(mProjection) prog.UniformColor("uColor", Col(1, .1, 0.5, 1)) prog.UniformMat4("uMat", mModel) prog.Use() //*/ material.White.Use() //tex1.Unbind() mod1.Render() tex1.Bind2(Col(1, 1, 1, 1)) gl.Begin(gl.TRIANGLES) gl.Normal3d(0, 0, 1) gl.TexCoord2d(11.0, 10.0) gl.Vertex3d(1.0, 0.0, -15.0) gl.TexCoord2d(0.5, 11.0) gl.Vertex3d(0.0, 1.0, -15.0) gl.TexCoord2d(0.0, 0.0) gl.Vertex3d(-1.0, 0.0, -15.0) gl.TexCoord2d(1.0, 0.0) gl.Vertex3d(1.0, 0.0, -5.0) gl.TexCoord2d(0.5, 1.0) gl.Vertex3d(0.0, 1.0, -5.0) gl.TexCoord2d(0.0, 0.0) gl.Vertex3d(-1.0, 0.0, -5.0) gl.End() //*/ this.win.Flip() done = this.il.MBQuit() || this.il.KeyPressed(glfw.KeyEsc) elapsed = time.Since(time1).Seconds() printFPS() } }
func Draw(t int64) { console.culledVertices = 0 console.vertices = 0 gVertexBuffer.Reset() gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) gl.Color4ub(192, 192, 192, 255) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.LIGHTING) gl.Enable(gl.LIGHT0) gl.Enable(gl.COLOR_MATERIAL) gl.LoadIdentity() center := ThePlayer.Position() matrix := ModelMatrix().Float32() gl.MultMatrixf(&matrix[0]) // Sun gl.Materialfv(gl.FRONT, gl.AMBIENT, []float32{0.1, 0.1, 0.1, 1}) gl.Materialfv(gl.FRONT, gl.DIFFUSE, []float32{0.1, 0.1, 0.1, 1}) gl.Materialfv(gl.FRONT, gl.SPECULAR, []float32{0.1, 0.1, 0.1, 1}) gl.Materialfv(gl.FRONT, gl.SHININESS, []float32{0.0, 0.0, 0.0, 1}) daylightIntensity := float32(SUNLIGHT_LEVELS[sunlightLevel]) gl.LightModelfv(gl.LIGHT_MODEL_AMBIENT, []float32{daylightIntensity / 2.5, daylightIntensity / 2.5, daylightIntensity / 2.5, 1}) gl.Lightfv(gl.LIGHT0, gl.POSITION, []float32{30 * float32(math.Sin(ThePlayer.Heading()*math.Pi/180)), 60, 30 * float32(math.Cos(ThePlayer.Heading()*math.Pi/180)), 0}) gl.Lightfv(gl.LIGHT0, gl.AMBIENT, []float32{daylightIntensity, daylightIntensity, daylightIntensity, 1}) gl.Lightfv(gl.LIGHT0, gl.DIFFUSE, []float32{daylightIntensity * 2, daylightIntensity * 2, daylightIntensity * 2, 1}) gl.Lightfv(gl.LIGHT0, gl.SPECULAR, []float32{daylightIntensity, daylightIntensity, daylightIntensity, 1}) gl.RenderMode(gl.RENDER) var selectedBlockFace *BlockFace if !pause.visible && !inventory.visible { selectedBlockFace = viewport.SelectedBlockFace() } ThePlayer.Draw(center, selectedBlockFace) TheWorld.Draw(center, selectedBlockFace) if pause.visible { pause.Draw(t) } else if inventory.visible { inventory.Draw(t) } else { picker.Draw(t) } if console.visible { console.Draw(t) } gl.Finish() gl.Flush() sdl.GL_SwapBuffers() console.framesDrawn++ }
func Draw(t int64) { console.culledVertices = 0 console.vertices = 0 gVertexBuffer.Reset() gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) gl.Color4ub(192, 192, 192, 255) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.DEPTH_TEST) //gl.Enable(gl.FOG) gl.Enable(gl.LIGHTING) gl.Enable(gl.LIGHT0) gl.Enable(gl.COLOR_MATERIAL) if timeOfDay < 5.3 || timeOfDay > 20.7 { gl.Enable(gl.LIGHT1) } else { gl.Disable(gl.LIGHT1) } // CheckGLError() gl.LoadIdentity() center := ThePlayer.Position() // matrix := *viewport.matrix.Float32() matrix := ModelMatrix().Float32() gl.MultMatrixf(&matrix[0]) //gl.Translatef(-float32(center[XAXIS]), -float32(center[YAXIS]), -float32(center[ZAXIS])) // Sun gl.Materialfv(gl.FRONT, gl.AMBIENT, []float32{0.1, 0.1, 0.1, 1}) gl.Materialfv(gl.FRONT, gl.DIFFUSE, []float32{0.1, 0.1, 0.1, 1}) gl.Materialfv(gl.FRONT, gl.SPECULAR, []float32{0.1, 0.1, 0.1, 1}) gl.Materialfv(gl.FRONT, gl.SHININESS, []float32{0.0, 0.0, 0.0, 1}) var daylightIntensity float32 = 0.45 var nighttimeIntensity float32 = 0.15 if timeOfDay < 5 || timeOfDay > 21 { gl.LightModelfv(gl.LIGHT_MODEL_AMBIENT, []float32{0.2, 0.2, 0.2, 1}) daylightIntensity = 0.01 } else if timeOfDay < 6 { daylightIntensity = nighttimeIntensity + daylightIntensity*(timeOfDay-5) } else if timeOfDay > 20 { daylightIntensity = nighttimeIntensity + daylightIntensity*(21-timeOfDay) } gl.LightModelfv(gl.LIGHT_MODEL_AMBIENT, []float32{daylightIntensity / 2.5, daylightIntensity / 2.5, daylightIntensity / 2.5, 1}) gl.Lightfv(gl.LIGHT0, gl.POSITION, []float32{30 * float32(math.Sin(ThePlayer.Heading()*math.Pi/180)), 60, 30 * float32(math.Cos(ThePlayer.Heading()*math.Pi/180)), 0}) gl.Lightfv(gl.LIGHT0, gl.AMBIENT, []float32{daylightIntensity, daylightIntensity, daylightIntensity, 1}) // gl.Lightfv(gl.LIGHT0, gl.DIFFUSE, []float32{daylightIntensity, daylightIntensity, daylightIntensity,1}) // gl.Lightfv(gl.LIGHT0, gl.SPECULAR, []float32{daylightIntensity, daylightIntensity, daylightIntensity,1}) gl.Lightfv(gl.LIGHT0, gl.DIFFUSE, []float32{daylightIntensity * 2, daylightIntensity * 2, daylightIntensity * 2, 1}) gl.Lightfv(gl.LIGHT0, gl.SPECULAR, []float32{daylightIntensity, daylightIntensity, daylightIntensity, 1}) // Torch // ambient := float32(0.6) // specular := float32(0.6) // diffuse := float32(1) // gl.Lightfv(gl.LIGHT1, gl.POSITION, []float32{float32(ThePlayer.position[XAXIS]), float32(ThePlayer.position[YAXIS] + 1), float32(ThePlayer.position[ZAXIS]), 1}) // gl.Lightfv(gl.LIGHT1, gl.AMBIENT, []float32{ambient, ambient, ambient, 1}) // gl.Lightfv(gl.LIGHT1, gl.SPECULAR, []float32{specular, specular, specular, 1}) // gl.Lightfv(gl.LIGHT1, gl.DIFFUSE, []float32{diffuse, diffuse, diffuse, 1}) // gl.Lightf(gl.LIGHT1, gl.CONSTANT_ATTENUATION, 1.5) // gl.Lightf(gl.LIGHT1, gl.LINEAR_ATTENUATION, 0.5) // gl.Lightf(gl.LIGHT1, gl.QUADRATIC_ATTENUATION, 0.01) // gl.Lightf(gl.LIGHT1, gl.SPOT_CUTOFF, 35) // gl.Lightf(gl.LIGHT1, gl.SPOT_EXPONENT, 2.0) // gl.Lightfv(gl.LIGHT1, gl.SPOT_DIRECTION, []float32{float32(math.Cos(ThePlayer.Heading() * math.Pi / 180)), float32(-0.7), -float32(math.Sin(ThePlayer.Heading() * math.Pi / 180))}) gl.RenderMode(gl.RENDER) selectedBlockFace := viewport.SelectedBlockFace() ThePlayer.Draw(center, selectedBlockFace) TheWorld.Draw(center, selectedBlockFace) if pause.visible { pause.Draw(t) } else if inventory.visible { inventory.Draw(t) } else { picker.Draw(t) } if console.visible { console.Draw(t) } gl.Finish() gl.Flush() sdl.GL_SwapBuffers() // runtime.GC() }