`

opengl实现3D弹球(增强版)

阅读更多
    接着上次的弹球问题,增加了几个功能,首先可以改变弹球的速度(按ctrl+up速度变快,当按ctrl+down速度变慢,当按ctrl+left旋转变慢,当按ctrl+right选择变快),其次改变弹球选择速度,在碰壁的时候会发出碰撞的声音。
   
    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.OpenGl;
using Tao.FreeGlut;
using System.Media;

namespace homework2
{
    public partial class Form1 : Form
    {
        double cx = 0.01, cy = 0.02, cz = 0.03;
        double x = 0.0, y = 0.0, z = 0.0;
        double angle = 2.0;
        double cangle = 3.0;
        double radius = 0.2;
        SoundPlayer myplayer = new SoundPlayer();
        public Form1()
        {
            InitializeComponent();
            this.simpleOpenGlControl1.InitializeContexts();
            Glut.glutInit();
        }
        private void MyInit()
        {
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

        }
        private void SetViewVolume()
        {
           
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            double aspect = (double)this.simpleOpenGlControl1.Width / (double)this.simpleOpenGlControl1.Height;
            Glu.gluPerspective(45, aspect, 0.1, 100.0);
            Gl.glViewport(0, 0, this.simpleOpenGlControl1.Width, this.simpleOpenGlControl1.Height);
        }
        private void simpleOpenGlControl1_Load(object sender, EventArgs e)
        {
            MyInit();
            SetViewVolume();
        }

        private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
            drawWall();
            Random rn = new Random();
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
            Glu.gluLookAt(0.0, 0.0, 3.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
            Gl.glPushMatrix();
           Gl.glColor3f(1.0f, 1.0f, 1.0f);
            
             Gl.glTranslated(x, y, z); 
            Gl.glRotated(angle, 0.0, 1.0, 0.0);
            Glut.glutWireSphere(0.2, 20, 20);
            Gl.glPopMatrix();
           
            
        }

        private void drawWall()
        {
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
           
            Gl.glPushMatrix();
            Glu.gluLookAt(0.0, 0.0, 3.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
            Gl.glBegin(Gl.GL_QUADS);
         

            Gl.glColor3f(0.0f, 0.0f, 1.0f);			
            Gl.glVertex3f(1.0f, 1.0f, 1.0f);			
            Gl.glVertex3f(-1.0f, 1.0f, 1.0f);			
            Gl.glVertex3f(-1.0f, -1.0f, 1.0f);			
            Gl.glVertex3f(1.0f, -1.0f, 1.0f);
            Gl.glEnd();

            Gl.glBegin(Gl.GL_QUADS);
            Gl.glColor3f(1.0f, 0.0f, 0.0f);			
            Gl.glVertex3f(1.0f, -1.0f, -1.0f);			
            Gl.glVertex3f(-1.0f, -1.0f, -1.0f);			
            Gl.glVertex3f(-1.0f, 1.0f, -1.0f);			
            Gl.glVertex3f(1.0f, 1.0f, -1.0f);
            Gl.glEnd();

            Gl.glBegin(Gl.GL_QUADS);
            Gl.glColor3f(0.0f, 1.0f, 0.0f);			
            Gl.glVertex3f(-1.0f, 1.0f, 1.0f);			
            Gl.glVertex3f(-1.0f, 1.0f, -1.0f);			
            Gl.glVertex3f(-1.0f, -1.0f, -1.0f);			
            Gl.glVertex3f(-1.0f, -1.0f, 1.0f);
            Gl.glEnd();

            Gl.glBegin(Gl.GL_QUADS);
            Gl.glColor3f(0.0f, 1.0f, 0.0f);			
            Gl.glVertex3f(1.0f, 1.0f, -1.0f);			
            Gl.glVertex3f(1.0f, 1.0f, 1.0f);			
            Gl.glVertex3f(1.0f, -1.0f, 1.0f);			
            Gl.glVertex3f(1.0f, -1.0f, -1.0f);		

            Gl.glEnd();
            Gl.glPopMatrix();
            
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            angle += cangle;
            myplayer.SoundLocation=(Application.StartupPath + @"/16.wav");
           
            if (x + radius >= 1 || x - radius <= -1)
            {
                cx = -cx;
                myplayer.Play();
            }
            if (y + radius >= 1 || y - radius <= -1)
            {
                cy = -cy;
                myplayer.Play();
            }
            if (z + radius >= 1 || z - radius <= -1)
            {
                cz = -cz;
                myplayer.Play();
            }
            x += cx;
            y +=cy;
            z += cz;
            this.simpleOpenGlControl1.Refresh();
        }

        private void simpleOpenGlControl1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Up:
                    
                    if(this.timer1 .Interval >2)
                    this.timer1.Interval -= 2;
                    break;
                case Keys.Down:
                        this.timer1.Interval += 2;
                    break;
                case Keys.Left:
                    if(angle+cangle>0)
                    this.cangle -= 3.0;
                    if (cangle == 0.0)
                        angle = 0.0;
                    break;
                case Keys .Right:
                   this.cangle += 3.0;
                    break;
            }
            this.simpleOpenGlControl1.Refresh();
        }
        

    }
}

    
分享到:
评论

相关推荐

    用OpenGL实现简单弹球

    砖块挡反弹球程序。要求用键盘方向键控制砖块移动以挡反弹球,当球落到地面时游戏结束。

    opengl 3D弹球

    基于opengl glsl设计的基础的一款小游戏

    vs+opengl实现二维弹球游戏

    计算机图形学课程的一个课程设计实验,用vs+opengl实现二维弹球小游戏,内含一份完整代码和我的实验报告

    2维弹球游戏代码OpenGL C实现

    2维弹球的游戏代码,应用OpenGL C实现。需要glut库,左右键盘控制,具体操作看弹出窗口。

    【OpenGL】室内3D弹球.txt

    房间场景,两个小球弹来弹去,撞到墙会反弹。实现了重力加速度自由落体平抛斜抛,模拟物理运动。有任何问题加我QQ812515674随叫随到.读材质部分用的opencv,我有非opencv版本

    python实现基本弹球效果与多个球弹球

    python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球...

    三维弹球(opengl)

    其实就是一个类型与乒乓球的游戏,只不过球的效果是三维的,其实场景什么的都可以使三维的,只不过因为我上课没怎么听。。只看了点书就随便写了。。bug N多。。 将就下吧。。学习嘛,呵呵

    前端canvas案例,下落小球碰撞物体运动轨迹,简单3D弹球基础逻辑

    内容概要:下落小球碰撞物体运动轨迹,简单3D弹球基础逻辑。 实现技术:htm+js实现。双击浏览器打开即可看效果 能学到什么:canvas技术 适用人群: 前端canvas学习新手 阅读建议:支持canvas的浏览器

    OpenGL——弹球游戏

    本资源是山东大学软件学院图形学课程设计实验二

    微软太空军校生3D弹球

    在微软WINXP里的名字叫太空军校生的3D弹球游戏

    利用curses库实现弹球游戏

    本文给出了一个在Linux下,利用curses库实现弹球游戏的实现算法以及相关功能设计。可以用作linux实践教学的实例。

    3D重力弹球游戏-Android源代码.rar

    一款运行于Android环境 的3D重力弹球游戏源代码,是一个过关游戏,一关比一关难度增加,3D弹球在迷宫中弹跳,并附有迷宫地图设计器的源代码。测试时候不知道咋搞的,一运行APK,虚拟器就自动退出,有兴趣的帮我查找...

    使用tkinter实现弹球游戏

    弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏

    3D超级弹球

    一款3D弹球游戏,绝对超乎你的想象.

    实现了1616点阵上的三色显示的弹球游戏

    实现了1616点阵上的三色显示的弹球游戏,内含详细介绍。

    java弹球程序弹球程序

    ava弹球程序弹球程ava弹ava弹球程序弹球程序程序ava弹球程序弹球程序球程序

    JavaScript实现弹球游戏

    开始后球从挡板中间斜向上移动碰撞墙壁和砖块,碰到砖块后砖块消失。通过键盘的左右键移动位于底部的挡板接球。小球击中砖块后有可能下落绿色或黄色魔法棒,挡板移动碰到黄色魔法棒时挡板变短,碰到绿色魔法棒时挡板...

    用vb实现小弹球游戏

    用vb编写小弹球游戏,可根据快中慢来调整小球弹跳的速度

    左右移动键盘上的左移右移键实现弹球

    左右移动键盘上的左移右移键,实现将弹球弹回,否则游戏结束!!

    opencv下的弹球游戏

    vs环境下简单的弹球游戏,利用opencv,对手为简单人工智能

Global site tag (gtag.js) - Google Analytics