Пример #1
0
func paintSprite(minx int, miny int, maxx int, maxy int, t *system.Texture, index int) {
	gl.MatrixMode(gl.TEXTURE)
	gl.Begin(gl.QUADS)
	gl.TexCoord2d(t.MinX(index), t.MinY(index))
	gl.Vertex2i(minx, miny)
	gl.TexCoord2d(t.MaxX(index), t.MinY(index))
	gl.Vertex2i(maxx, miny)
	gl.TexCoord2d(t.MaxX(index), t.MaxY(index))
	gl.Vertex2i(maxx, maxy)
	gl.TexCoord2d(t.MinX(index), t.MaxY(index))
	gl.Vertex2i(minx, maxy)
	gl.End()
	gl.MatrixMode(gl.MODELVIEW)
}
Пример #2
0
// Draws the contents of the framebuffer at the requested width and height.
func (fb *Framebuffer) Draw(w int, h int) {
	gl.Viewport(0, 0, w, h)
	gl.MatrixMode(gl.PROJECTION)
	gl.LoadIdentity()
	gl.Ortho(0, 1, 0, 1, 1, -1)
	gl.Enable(gl.TEXTURE_2D)
	fb.Texture.Bind(gl.TEXTURE_2D)
	gl.MatrixMode(gl.MODELVIEW)
	gl.LoadIdentity()
	gl.Begin(gl.QUADS)
	gl.TexCoord2d(0, 0)
	gl.Vertex3f(0.0, 0.0, 0)
	gl.TexCoord2d(1, 0)
	gl.Vertex3f(1.0, 0.0, 0)
	gl.TexCoord2d(1, 1)
	gl.Vertex3f(1.0, 1.0, 0)
	gl.TexCoord2d(0, 1)
	gl.Vertex3f(0.0, 1.0, 0)
	gl.End()
	gl.Flush()
}
Пример #3
0
// texcoord defines vertex texture coordinates.
// Used in classic render mode.
func (a *Attr) texcoord(i int) {
	i *= a.size

	switch a.size {
	case 1:
		switch v := a.data.(type) {
		case []int16:
			gl.TexCoord1s(v[i])
		case []int32:
			gl.TexCoord1i(int(v[i]))
		case []float32:
			gl.TexCoord1f(v[i])
		case []float64:
			gl.TexCoord1d(v[i])
		}
	case 2:
		switch v := a.data.(type) {
		case []int16:
			gl.TexCoord2s(v[i], v[i+1])
		case []int32:
			gl.TexCoord2i(int(v[i]), int(v[i+1]))
		case []float32:
			gl.TexCoord2f(v[i], v[i+1])
		case []float64:
			gl.TexCoord2d(v[i], v[i+1])
		}
	case 3:
		switch v := a.data.(type) {
		case []int16:
			gl.TexCoord3s(v[i], v[i+1], v[i+2])
		case []int32:
			gl.TexCoord3i(int(v[i]), int(v[i+1]), int(v[i+2]))
		case []float32:
			gl.TexCoord3f(v[i], v[i+1], v[i+2])
		case []float64:
			gl.TexCoord3d(v[i], v[i+1], v[i+2])
		}
	case 4:
		switch v := a.data.(type) {
		case []int16:
			gl.TexCoord4s(v[i], v[i+1], v[i+2], v[i+3])
		case []int32:
			gl.TexCoord4i(int(v[i]), int(v[i+1]), int(v[i+2]), int(v[i+3]))
		case []float32:
			gl.TexCoord4f(v[i], v[i+1], v[i+2], v[i+3])
		case []float64:
			gl.TexCoord4d(v[i], v[i+1], v[i+2], v[i+3])
		}
	}

}
Пример #4
0
func drawScene() {
	gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) /// 清除屏幕及深度缓存
	gl.LoadIdentity()                                   /// 重置模型观察矩阵

	gl.Translatef(0, 0, -5)          /// 并移入屏幕 5.0
	gl.Rotatef(rotation[0], 1, 0, 0) ///以x为轴旋转 参数:角度,X,Y,Z
	gl.Rotatef(rotation[1], 0, 1, 0)
	gl.Rotatef(rotation[2], 0, 0, 1)

	rotation[0] += 0.3
	rotation[1] += 0.2
	rotation[2] += 0.4

	/*
	  选择我们使用的纹理。如果您在您的场景中使用多个纹理,
	  应该使用来 glBindTexture(GL_TEXTURE_2D, texture[ 所使用纹理对应的数字 ]) 选择要绑定的纹理。
	  当想改变纹理时,应该绑定新的纹理。有一点值得指出的是,您不能在 glBegin() 和 glEnd() 之间绑定纹理,
	  必须在 glBegin() 之前或 glEnd() 之后绑定。注意在后面是如何使用 glBindTexture 来指定和绑定纹理的。
	*/
	textures[0].Bind(gl.TEXTURE_2D) ///选择纹理

	/*
	为了将纹理正确的映射到四边形上,必须将纹理的右上角映射到四边形的右上角,纹理的左上角映射到四边形的左上角,
	纹理的右下角映射到四边形的右下角,纹理的左下角映射到四边形的左下角。
	如果映射错误的话,图像显示时可能上下颠倒,侧向一边或者什么都不是。
	glTexCoord2f 的第一个参数是X坐标。 0.0f 是纹理的左侧。 0.5f 是纹理的中点, 1.0f 是纹理的右侧。
	glTexCoord2f 的第二个参数是Y坐标。 0.0f 是纹理的底部。 0.5f 是纹理的中点, 1.0f 是纹理的顶部。

	所以纹理的左上坐标是 X:0.0f,Y:1.0f ,四边形的左上顶点是 X: -1.0f,Y:1.0f 。其余三点依此类推。
	*/
	gl.Begin(gl.QUADS)     ///绘制正方形
	gl.TexCoord2f(0, 0)    ///前面
	gl.Vertex3f(-1, -1, 1) ///左下
	gl.TexCoord2f(1, 0)
	gl.Vertex3f(1, -1, 1) ///右下
	gl.TexCoord2f(1, 1)
	gl.Vertex3f(1, 1, 1) ///右上
	gl.TexCoord2f(0, 1)
	gl.Vertex3f(-1, 1, 1) ///左上

	gl.TexCoord2d(1, 0)     ///后面
	gl.Vertex3f(-1, -1, -1) ///右下
	gl.TexCoord2d(1, 1)
	gl.Vertex3f(-1, 1, -1) ///右上
	gl.TexCoord2d(0, 1)
	gl.Vertex3f(1, 1, -1) ///左上
	gl.TexCoord2d(0, 0)
	gl.Vertex3f(1, -1, -1) //左下

	gl.TexCoord2d(0, 1) ///上面
	gl.Vertex3f(-1, 1, -1)
	gl.TexCoord2d(0, 0)
	gl.Vertex3f(-1, 1, 1)
	gl.TexCoord2d(1, 0)
	gl.Vertex3f(1, 1, 1)
	gl.TexCoord2d(1, 1)
	gl.Vertex3f(1, 1, -1)

	gl.TexCoord2d(1, 1) ///下面
	gl.Vertex3f(-1, -1, -1)
	gl.TexCoord2d(0, 1)
	gl.Vertex3f(1, -1, -1)
	gl.TexCoord2d(0, 0)
	gl.Vertex3f(1, -1, 1)
	gl.TexCoord2d(1, 0)
	gl.Vertex3f(-1, -1, -1)

	gl.TexCoord2d(1, 0) ///右面
	gl.Vertex3f(1, -1, -1)
	gl.TexCoord2d(1, 1)
	gl.Vertex3f(1, 1, -1)
	gl.TexCoord2d(0, 1)
	gl.Vertex3f(1, 1, 1)
	gl.TexCoord2d(0, 0)
	gl.Vertex3f(1, -1, 1)

	gl.TexCoord2d(0, 0) ///左面
	gl.Vertex3f(-1, -1, -1)
	gl.TexCoord2d(1, 0)
	gl.Vertex3f(-1, -1, 1)
	gl.TexCoord2d(1, 1)
	gl.Vertex3f(-1, 1, 1)
	gl.TexCoord2d(0, 1)
	gl.Vertex3f(-1, 1, -1)

	gl.End() ///正方形绘制结束

	glfw.SwapBuffers() ///必须交换显示区才能展现
}