`
cd1985
  • 浏览: 8131 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

迪子3D记账系列(一)之基础图形绘制

阅读更多



//============================================================================
// Name        : opengl.cpp
// Author      : 迪子
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#ifdef WIN32
  #include <windows.h>
#endif
#include <iostream>
#include <GL/glut.h>
#include <GL/gl.h>

using namespace std;

//当键盘被按下时执行
void handleKeypress(unsigned char key, //键盘被按下的键的键值
					int x, int y) {    //鼠标坐标
	switch (key) {
		case 27: //Escape 键
			exit(0); //退出程序
	}
}

//初始化 3D 渲染
void initRendering() {
	//启动深度测试,话说假设在视线前有两物体,如果没启动这个功能,先画A还是先画B产生的结果是不同的;后画的物体会遮挡先被画出的物体。
	//会产生的错误结果就是距离您远的物体挡住了距离您近的物体。
	//启动这功能就NB了,无论先画哪个物体,opengl都会自动正确计算遮挡关系,当然系统开销会增大。
	glEnable(GL_DEPTH_TEST);
}

//当窗口大小改变是执行
void handleResize(int w, int h) {
	//告诉 OpenGL 怎样讲坐标转换成像素值;在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中;
	//x,y 指定视口的左下角,w,h 是视口矩形的宽度和高度;
	//简单的说就是设置下画面大小。
	glViewport(0, 0, w, h);

	glMatrixMode(GL_PROJECTION); //告诉OPENGL接下来的变换函数将影响投影矩阵,投影变换的目的是定义一个视景体;
	//视景体决定了一个物体是如何被映射到屏幕上,以及哪些些物体被裁剪;

	//设置摄像机 投影
	glLoadIdentity(); //reset摄像机
	gluPerspective(45.0,                  //视角
				   (double)w / (double)h, //宽,高比
				   1.0,                   //The near z 裁剪坐标
				   200.0);                //The far z 裁剪坐标       ;显示距离摄像机 1到200的物体,之外的被剔除,不显示
}

//画场景
void drawScene() {
	//清除上次的颜射缓冲合深度缓冲
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW); //告诉OPENGL接下来的变换函数将影响模型矩阵
	glLoadIdentity(); //Reset 矩阵

	glBegin(GL_QUADS); //开始画四方形

	//四方形4个顶点
	glVertex3f(-0.7f, -1.5f, -5.0f);
	glVertex3f(0.7f, -1.5f, -5.0f);
	glVertex3f(0.4f, -0.5f, -5.0f);
	glVertex3f(-0.4f, -0.5f, -5.0f);

	glEnd(); //四方形画完了

	glBegin(GL_TRIANGLES); //开始画三角形


	//五角形由三个三角形组成
		//第一个三角形
	glVertex3f(0.5f, 0.5f, -5.0f);
	glVertex3f(1.5f, 0.5f, -5.0f);
	glVertex3f(0.5f, 1.0f, -5.0f);
		//第二个三角形
	glVertex3f(0.5f, 1.0f, -5.0f);
	glVertex3f(1.5f, 0.5f, -5.0f);
	glVertex3f(1.5f, 1.0f, -5.0f);
		//第三个三角形
	glVertex3f(0.5f, 1.0f, -5.0f);
	glVertex3f(1.5f, 1.0f, -5.0f);
	glVertex3f(1.0f, 1.5f, -5.0f);

	//三角行
	glVertex3f(-0.5f, 0.5f, -5.0f);
	glVertex3f(-1.0f, 1.5f, -5.0f);
	glVertex3f(-1.5f, 0.5f, -5.0f);

	glEnd(); //结束三角形绘制

	glutSwapBuffers(); //把场景往屏幕上画
}

int main(int argc, char** argv) {
	//初始化 GLUT
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(400, 400); //设置窗体大小

	//创建窗体
	glutCreateWindow("测试");
	initRendering(); //初始化3D渲染


	glutDisplayFunc(drawScene); //画呀画
	glutKeyboardFunc(handleKeypress);//按呀按
	glutReshapeFunc(handleResize);//变呀变

	glutMainLoop();
	return 0;
}


先这样吧
jogl , jme, webgl 版代码以后补上

  • 大小: 14.4 KB
分享到:
评论

相关推荐

    电子记账本(主要用于电子记账方面)

    电子记账本(主要用于电子记账方面)!电子记账本(主要用于电子记账方面)!

    很专业的家庭电子记账单

    在现代生活中,家庭财务管理变得越来越重要,而"很专业的家庭电子记账单"为我们提供了一种高效、便捷的方式来实现这一目标。这个电子记账单专为家庭理财设计,旨在帮助用户清晰地记录并分析家庭的收支情况,从而实现...

    电子记账本excel下载

    标题中的“电子记账本excel下载”指的是使用Excel软件创建的一种个人或家庭财务管理工具,它允许用户记录收入、支出和资产,以便跟踪财务状况。这种记账本利用Excel的计算和数据分析功能,提供了灵活的模板和自定义...

    最新版本简单好用的电子记账本

    《最新版本简单好用的电子记账本》 在当今数字化时代,电子记账本已经成为了个人财务管理的重要工具。这款最新版本的电子记账本,以其便捷的操作和强大的功能,深受用户喜爱,无论你是初次接触记账的新手,还是经验...

    电子记账系统

    J2EE包含了一系列标准和规范,如Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)等,电子记账系统基于J2EE,意味着它可以运行在支持J2EE的任何应用服务器上,如Tomcat、GlassFish等。 4. **MVC设计...

    一款简单易用图形界面的优秀记账软件-熊猫记账

    这款软件使用非常方便,科目设计也比较合理,服务团队反应也比较迅速,值得一用。我曾经遭遇过网络记账的数据丢失事故,当时那叫一个心痛,后来多方寻找,终于找到了这个软件,强烈推荐!

    2013年EXCEL格式电子记账本

    EXCEL格式电子记账本,方便记账,养成一个良好的记账习惯

    电子记账系统概要设计

    电子记账系统概要设计是关于构建一个用于自动化管理财务记录的软件系统的过程。本文档主要目的是明确系统的设计框架、功能、处理方式以及接口,为开发团队提供清晰的指导,确保系统开发、测试和验收的有效性。文档由...

    美萍系列软件记账通

    【美萍系列软件记账通】是一款专为小型企业、个人及门市设计的高效、易用的财务记账管理工具。它集成了全面的账目管理功能,旨在简化日常的会计工作,提高财务处理效率,确保数据准确无误。这款软件的核心特性包括:...

    微信记账小程序源码个人记账本小程序源码

    一款实用的记账列表,分类记账,生活记账小程序工具。包含:添加记账、编辑记账、统计分析、计算器等4个页面。 微信记账小程序源码,个人记账本小程序源码。一款实用的记账列表,分类记账,生活记账小程序工具。包含...

    网络电子记账本

    "网络电子记账本"作为一款免安装的在线记账工具,为我们的日常生活提供了极大的便利,帮助我们更好地追踪、分析和管理个人或家庭的财务状况。 首先,让我们深入了解这个工具的核心功能。"网络电子记账本"的最大特点...

    微信记账小程序源码(随手记账).rar

    记账是小程序的基础,用户可以通过简单的操作输入收入和支出的金额、日期和类别。这里的类别管理是一项重要设计,它允许用户为不同的消费设定不同的类别,如餐饮、购物、交通等,这样可以清晰地划分各项开支,便于...

    .net 3.5下的学生简单电子记账软件

    WPF是.NET Framework的一部分,提供了一种强大的图形用户界面(GUI)开发框架,它允许开发者创建美观且交互性强的应用程序,同时具有丰富的数据绑定、控件和动画功能。 在.NET 3.5 SP1环境下,开发者可以利用C#语言...

    一款简单的微信记账小程序源码,后端使用的是PHP.zip

    一款简单的微信记账小程序,后端使用的是PHP。 一款简单的微信记账小程序,后端使用的是PHP。 一款简单的微信记账小程序,后端使用的是PHP。 一款简单的微信记账小程序,后端使用的是PHP。 一款简单的微信...

    家用电子记账簿,理财从记账开始

    《电子记账簿》提供给您这样一个小型理财工具。 《电子记账簿》主要是面向家庭记账,也可以用于小型店面记账。在本软件中,不仅能够灵活设置不同的收支项目,而在能够快速统计出每月各个项目收支的总量,并用图表...

    2013 EXCEL电子记账本

    这记帐本套用了很多公式计算.稍微懂excel的人可以点公式看看.其实他不只教了你记帐.还教了你整个规划财务的流程.相信这种观念学起来后.不只可以用在个人财务.甚至对于公司家庭的财务规划.也可到达近专业的境界

    2013年个人多功能电子记账本

    2013年个人多功能电子记账本 可以对每天的消费情况进行一个统计,每个月看看自己资金使用情况。

    小型电子记账簿(超小超好用)

    综上所述,这款“小型电子记账簿”是一款专注于个人和家庭财务管理的软件,它具有安全的数据保护机制、出色的移动性以及绿色无污染的特性,使用SQLite数据库存储数据,并提供了便捷的更新功能和详尽的使用说明,旨在...

    电子记账本轻松理财的好帮手

    电子记账本是一种高效、便捷的财务管理工具,它可以帮助用户清晰地记录每一笔收支,从而更好地理解自己的消费习惯,制定合理的理财计划。在信息化时代,使用电子记账本已经成为个人财务管理的重要方式,无论你是学生...

    2012年个人多功能电子记账本

    2012年个人多功能电子记账本 个人记账理财等等功能,请自行体验

Global site tag (gtag.js) - Google Analytics