OpenGL 4 : 一个漂亮的心 For you, My Love

画一个心形有非常多公式能够使用,以下这个公式我觉得最完美了:

float x = R * 16 * pow(sin(theta), 3);
float y = R * (13 * cos(theta) - 5*cos(2*theta)	- 2*cos(3*theta) - cos(4*theta));

画出来的心形最美丽,最原始的笛卡尔的心形是个肥心,没这个好看,呵呵。

效果例如以下:

数学參考:

http://mathworld.wolfram.com/HeartCurve.html

http://www.mathematische-basteleien.de/heart.htm

#pragma once
#include <stdio.h>
#include <gl\glew.h>
#include <GL\freeglut.h>
#include "math_3d.h"
#include <cmath>

namespace Tutorial2_Heart
{
	const static float PI = 3.1415926f;
	int gSegments;
	GLuint VBO;

	void genHeart_2(Vector3f *vers, int offset, int segments,
		float ox, float oy, float R = 0.05)
	{
		for (int i = 0; i < segments; i++)
		{
			float theta = 2.0f * PI * float(i) / float(segments);

			float x = R * 16 * pow(sin(theta), 3);
			float y = R * (13 * cos(theta) - 5*cos(2*theta)
				- 2*cos(3*theta) - cos(4*theta));

			vers[offset+i] = Vector3f(ox+x, oy+y, 0.0f);
		}
	}

	void genGeometry()
	{
		const int segments = 360;
		Vector3f vers[segments];
		gSegments = segments;
		genHeart_2(vers, 0, segments, 0.f, 0.f);

		glGenBuffers(1, &VBO);
		glBindBuffer(GL_ARRAY_BUFFER, VBO);
		glBufferData(GL_ARRAY_BUFFER, sizeof(vers), vers, GL_STATIC_DRAW);
	}

	static void renderScene()
	{
		glClear(GL_COLOR_BUFFER_BIT);

		glEnableVertexAttribArray(0);
		glBindBuffer(GL_ARRAY_BUFFER, VBO);
		glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

		glDrawArrays(GL_LINE_LOOP, 0, gSegments);

		glDisableVertexAttribArray(0);

		glutSwapBuffers();
	}

	void initCallBack()
	{
		glutDisplayFunc(renderScene);
	}

	int run(int argv, char **argc)
	{
		glutInit(&argv, argc);
		glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
		glutInitWindowSize(600, 600);
		glutInitWindowPosition(50, 50);
		glutCreateWindow("Heart Shape");

		initCallBack();

		GLenum res = glewInit();
		if (res != GLEW_OK)
		{
			fprintf(stderr, "Error:'%s'\n", glewGetErrorString(res));
			return 1;
		}

		genGeometry();

		glClearColor(0.8f, 0.1f, 0.1f, 0.0f);

		glutMainLoop();

		return 0;
	}
}

OpenGL 4 : 一个漂亮的心 For you, My Love

时间: 2024-08-02 20:04:39

OpenGL 4 : 一个漂亮的心 For you, My Love的相关文章

OpenGL 4 : 一个美丽的心 For you, My Love

画一个心形有很多公式可以使用,下面这个公式我认为最完美了: float x = R * 16 * pow(sin(theta), 3); float y = R * (13 * cos(theta) - 5*cos(2*theta) - 2*cos(3*theta) - cos(4*theta)); 画出来的心形最漂亮,最原始的笛卡尔的心形是个肥心,没这个好看,呵呵. 效果如下: 数学参考: http://mathworld.wolfram.com/HeartCurve.html http://

OpenGl 绘制一个立方体

OpenGl 绘制一个立方体 为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定6*4=24个顶点.但是我们知道,一个立方体其实总共只有八个顶点,要指定24次,就意味着每个顶点其实重复使用了三次,这样可不是好的现象.最起码,像上面这样重复烦琐的代码,是很容易出错的.稍有不慎,即使相同的顶点也可能被指定成不同的顶点了. 如果我们定义一个数组,把八个顶点都放到数组里,然后每次指定顶点都使用指针,而不是使用直接的数据,这样就避免了在指定顶点时考虑大量的数据,于是减少了代码出错的可能性.

基于OpenGL编写一个简易的2D渲染框架02——搭建OpenGL环境

由于没有使用GLFW库,接下来得费一番功夫. 阅读这篇文章前请看一下这个网页:https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/ 以下,我摘取了一点片段 Windows上的OpenGL库 如果你是Windows平台,opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了.由于这篇教程用的是VS编译器,并且是在Windo

一个漂亮的java烟花程序

<img src="http://img.blog.csdn.net/20140617111511890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzkxMDM1Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />package org.jetic.web.chat; impo

PHP入门培训教程 一个漂亮的PHP验证码

PHP入门培训教程 一个漂亮的PHP验证码 如何写一个漂亮的PHP验证码?兄弟连PHP培训小编分享一段代码给大家: <?php class Imagecode{ private $width ; private $height; private $counts; private $distrubcode; private $fonturl; private $session; function __construct($width = 120,$height = 30,$counts = 5,$

一个漂亮的PHP验证码

验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录.论坛恶意灌水等. 自己可以导入字体,可以按照自己的额需要随便修改. 一个漂亮的验证码,体现出网站的大方. <span style="font-size:14px;"><?php class Imagecode{ private $width ; private $height; private $counts; private $distrubcode; private $fonturl;

制作一个漂亮的 Android 应用图标

Android应用图标应当是一个 Alpha 通道透明的32位 PNG 图片.由于安卓设备众多,一个应用程序图标需要设计几种不同大小,如: LDPI (Low Density Screen,120 DPI),其图标大小为 36 x 36 px.MDPI (Medium Density Screen, 160 DPI),其图标大小为 48 x 48 px.HDPI (High Density Screen, 240 DPI),其图标大小为 72 x 72 px.xhdpi (Extra-high

分享一个漂亮的ASP.NET MVC界面框架

本文分享一个插件化的界面框架,该框架提供了用户.角色.权限管理功能,也提供了插件的管理和插件中心.下图是该界面框架的样式(全部源码和原理介绍下一篇分享,推荐越多,源码放的越早,呵呵). 要使用该界面框架,你可以通过以下地址来下载到界面框架的Visual Studio 2013模板:下载框架模板. 模板下载地址:http://files.cnblogs.com/baihmpgy/iOpenWorksMvc1.zip 下载后,解压缩,将iOpenWorksMvc1目录直接拷贝到VS的项目模板目录(C

给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化

给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化 标签: ajaxdictionaryjsonobject服务器function 2012-07-25 18:41 2242人阅读 评论(6) 收藏 举报  分类: Ajax(6)  版权声明:本文为博主原创文章,未经博主允许不得转载. Ajax最强悍的功能莫过于服务器和客户端之间的异步交互,他们在交互的时候不是通过soap协议等,而是通过回调函数,以Json的格式传送数据. 由于Json格式的限制,在很多情况下,稍微复杂一些的