简单一个opengl程序,2D图形移动

很早打算系统的学习一下opengl,但是由于课程以及学习算法占据了时间,一直没能开始,现在这段时间开始弄opengl了,这几天看正在看《Opengl 变成指南 第8版》,首先看了GLSL写shader。这里先使用固定管线写个简单的小例子试试,然后开始进行可编程管线。

这个小例子很简单,就是在2D平面画个正方形,然后左右移动。

思路很简单,主要是两个函数,draw 和 move,draw负责绘制,move负责移动的控制,然后设置两个回调函数,glutDisplayFunc和glutIdleFunc,这样在空闲的时候就会调用move函数,设置移动信息,然后发送一个重新显示的信号,这样就能回调draw函数进行在移动后的新位置重新绘制。

#include <gl/glew.h>
#include <gl/glut.h>
#include <iostream>
#include <cstdlib>

using namespace std;

GLfloat rtx = 0, rty = 0, rtz = 0;

void init()
{
	glLoadIdentity();
	glClearColor(0.0, 0.0, 0.0, 0.0);
}

void draw(void)
{
	glClear(GL_COLOR_BUFFER_BIT);

	glPushMatrix();
	glTranslatef(rtx, rty, rtz);

	glBegin(GL_QUADS);
		glColor3f(1.0f, 0.0f, 0.0f);
		glVertex2f(-0.5f, 0.5f);
		glColor3f(0.0f, 1.0f, 0.0f);
		glVertex2f(0.5f, 0.5f);
		glColor3f(0.0f, 0.0f, 1.0f);
		glVertex2f(0.5f, -0.5f);
		glColor3f(0.5f, 0.5f, 0.5f);
		glVertex2f(-0.5f, -0.5f);
	glEnd();

	glPopMatrix();
	glutSwapBuffers();
}

void move()
{
	static GLfloat step = 0.0002;
	if (rtx + step > 0.5 || rtx + step < -0.5)step = -step;
	rtx += step;

	glutPostRedisplay();
}

int main(int argc, char *argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(300, 300);
	glutCreateWindow("test");

	init();

	glutDisplayFunc(draw);
	glutIdleFunc(move);

	glutMainLoop();
	return 0;
}
时间: 2024-12-28 18:34:05

简单一个opengl程序,2D图形移动的相关文章

1.一个简单的OpenGL程序

一.OpenGL介绍 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的. 如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单. 2.强大的可移植性. 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机). 而OpenGL不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机.各种专

OpenGL学习-------visual studio 2010配置和第一个OpenGL程序讲解

OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的.如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单. 2.强大的可移植性. 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机).而OpenGL不仅用于 Windows,还可

【OpenGL】详解第一个OpenGL程序

写在前面 OpenGL能做的事情太多了!很多程序也看起来很复杂.很多人感觉OpenGL晦涩难懂,原因大多是被OpenGL里面各种语句搞得头大,一会gen一下,一会bind一下,一会又active一下.搞到最后都不知道自己在干嘛,更有可能因为某一步的顺序错误导致最后渲染出错,又或者觉得记下这些操作的顺序是非常烦人的一件事.那么,OpenGL为什么会长成这个样子呢?这篇文章旨在通过一个最简单的OpenGL程序开始,让我们能够"看懂"它,"记住"这些操作顺序. 我们先来解

OpenGL用法暨第一个OpenGL程序

//OpenGL的书写规范 暨我的第一个OpenGL程序 //有了框架,其他就什么都好说了 #include "..\H\glut.h" #pragma comment(lib, "glut.lib") void init(void) { glClearColor(1.0, 1.0, 0.0, 0.0);//设置主窗口的背景颜色 glColor3f(1.0f,0.0f,0.0f);  // 设置所绘图形的颜色 glMatrixMode(GL_PROJECTION);

第一个OpenGL程序

刚开始学习OpenGL,感觉这个挺有趣的(在绘制三维模型时,空间想象能力要求比较高,不然很头疼的). 新东西,新心情...来一发红色三角形. 我就是要通过OpenGL来绘制一个红色的三角形.现在我们来看一下代码: #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存 glLoadIdentity(); // 重置当前的模型观察矩阵 glTran

Java界面编程-建立一个可以画出图形的简单框架

引子:总共使用3个.java文件,建立一个简单界面编程的框架. 第1个文件:NotHelloWorldComponent.java //NotHelloWorldComponent.java 1 import java.awt.*; 2 import java.awt.geom.*; 3 import javax.swing.*; 4 5 public class NotHelloWorldComponent extends JComponent { 6 public static final

利用JSP编程技术实现一个简单的购物车程序

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

一个简单的Qt程序分析

本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNA

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与